Unique Constraints SQLite

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

Описание

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

В чем разница между уникальным ограничением и первичным ключом?

Первичный ключ Уникальное ограничение
"Ни одно из полей, являющихся частью первичного ключа, не может содержать значение NULL.

(Хотя стандарты SQL-89 и SQL-92 не допускают значения NULL в первичном ключе, SQLite допускает NULL при определенных обстоятельствах. Мы настоятельно рекомендуем не использовать значение NULL в первичном ключе.)"

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

Создать уникальное ограничение

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

Синтаксис

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

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

CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, ... uc_col_n)
);

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

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

constraint_name
Имя уникального ограничения.

uc_col1, uc_col2, ... uc_col_n
Столбцы, которые составляют уникальное ограничение.

Пример

Рассмотрим пример того, как создать уникальное ограничение в SQLite.

В этом примере мы создали уникальное ограничение для таблицы employees с именем name_unique. Он состоит из полей last_name и first_name.

Добавить уникальное ограничение

Если ваша таблица уже существует и вы хотите добавить уникальное ограничение позже, вы не можете использовать оператор 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 UNIQUE (uc_col1, uc_col2, ... uc_col_n)
);

INSERT INTO table_name SELECT * FROM old_table;

COMMIT;

PRAGMA foreign_keys=on;

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

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

constraint_name
Имя уникального ограничения.

uc_col1, uc_col2, ... uc_col_n
Столбцы, которые составляют уникальное ограничение.

Пример

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

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

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

Удалить уникальное ограничение

В 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 и данные соответствуют ожидаемым.