Primary Keys SQLite

В этом учебном пособии вы узнаете, как создать, добавить, и удалить primary key в SQLite с синтаксисом и примерами.

Описание

В SQLite первичный ключ - это отдельное поле или комбинация полей, однозначно определяющая запись. Таблица может иметь только один первичный ключ.

СОВЕТ. Хотя стандарты SQL-89 и SQL-92 не допускают значения NULL в первичном ключе, SQLite разрешает использование NULL при определенных обстоятельствах. Мы настоятельно рекомендуем не использовать значение NULL в первичном ключе.

Создать первичный ключ (оператор CREATE TABLE)

Первичный ключ может быть создан при выполнении оператора CREATE TABLE в SQLite.

Синтаксис

Синтаксис для создания первичного ключа с помощью оператора CREATE TABLE в SQLite:

CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...

CONSTRAINT constraint_name PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)
);

ИЛИ

CREATE TABLE table_name
(
column1 datatype CONSTRAINT constraint_name PRIMARY KEY,
column2 datatype [ NULL | NOT NULL ],
...
);

table_name
Имя таблицы, которую вы хотите создать.

column1, column2
Столбцы, которые вы хотите создать в таблице.

constraint_name
Название первичного ключа.

pk_col1, pk_col2, ... pk_col_n
Столбцы, составляющие первичный ключ.

Пример

Рассмотрим пример того, как создать первичный ключ, используя оператор CREATE TABLE в SQLite. Мы начнем с очень простого, где наш первичный ключ состоит всего из одного столбца.

Например:

В этом примере мы создали первичный ключ для таблицы employee, называемый employee_pk. Он состоит только из одного столбца - employee_id.

Мы могли бы использовать альтернативный синтаксис и создать этот же первичный ключ следующим образом:

Оба эти синтаксиса действительны при создании первичного ключа только с одним полем.

Если вы создаете первичный ключ, состоящий из 2 или более столбцов, вы ограничены использованием только первого синтаксиса, в котором первичный ключ определен в конце оператора CREATE TABLE.

Например:

В этом примере создается первичный ключ в таблице customers под названием customers_pk, который состоит из комбинации столбцов last_name и first_name. Таким образом, каждая комбинация last_name и first_name должна быть уникальной в таблице customers.

Добавить первичный ключ

Если ваша таблица уже существует и вы хотите добавить первичный ключ позже, вы не можете использовать оператор ALTER TABLE для создания первичного ключа. Вместо этого вы должны создать новую таблицу с первичным ключом и скопировать данные в эту новую таблицу.

Синтаксис

Синтаксис для добавления первичного ключа в таблицу в SQLite:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE table_name RENAME TO old_table;

CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT constraint_name PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)
);

INSERT INTO table_name SELECT * FROM old_table;

COMMIT;

PRAGMA foreign_keys=on;

table_name
Имя таблицы для изменения. Это таблица, к которой вы хотите добавить первичный ключ.

old_table
Имя исходной таблицы, которое будет оставлено после создания новой таблицы с добавленным первичным ключом.

constraint_name
Название первичного ключа.

pk_col1, pk_col2, ... pk_col_n
Столбцы, составляющие первичный ключ.

Пример

Рассмотрим пример того, как добавить первичный ключ в существующую таблицу в SQLite. Скажем так, у нас уже есть таблица employees со следующим определением:

И мы хотели добавить первичный ключ в таблицу employees, которая состоит из employee_id. Мы могли бы запустить следующие команды:

В этом примере мы создали первичный ключ для таблицы employees с именем employee_pk, который состоит из столбца employee_id. Исходная таблица все еще будет существовать в базе данных с именем old_employees. Вы можете удалить таблицу old_employees после того, как убедитесь, что таблица employees и её данные соответствуют ожиданиям.

Удалить первичный ключ

В SQLite вы не можете использовать оператор ALTER TABLE для удаления первичного ключа. Вместо этого вы должны создать новую таблицу с удаленным первичным ключом и скопировать данные в эту новую таблицу.

Синтаксис

Синтаксис для удаления первичного ключа из таблицы в SQLite:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE table_name RENAME TO old_table;

CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
);

INSERT INTO table_name SELECT * FROM old_table;

COMMIT;

PRAGMA foreign_keys=on;

table_name
Имя таблицы для изменения. Это таблица, из которой вы хотите удалить первичный ключ.

old_table
Имя исходной таблицы, которое останется после создания новой таблицы с удаленным первичным ключом.

Пример

Рассмотрим пример удаления первичного ключа из существующей таблицы в SQLite. Скажем так, у нас уже есть таблица suppliers со следующим определением:

И мы хотели убрать первичный ключ из таблицы suppliers. Мы могли бы запустить следующие команды:

В этом примере мы удалили первичный ключ в существующей таблице suppliers. Исходная таблица все еще будет существовать в базе данных с именем old_suppliers. Вы можете удалить таблицу old_suppliers после того, как убедитесь, что таблица suppliers и данные соответствуют ожидаемым.