Каков синтаксис для указания первичного ключа в более чем 1 столбце в SQLITE?
sqlite
primary-key
ddl
composite-primary-key
Богдан Гаврил MSFT
источник
источник
Ответы:
Согласно документации это
источник
источник
NULL
допускается в первичных ключах. Этот ответ подчеркивает, что если вы хотите более стандартного поведения, вам нужно добавитьNOT NULL
себя. Мой ответ - это самый простой синтаксис первичного ключа из нескольких столбцов.Да. Но помните, что такой первичный ключ допускает
NULL
значения в обоих столбцах несколько раз.Создайте таблицу как таковую:
Теперь это работает без предупреждения:
источник
NULL
?Базовый:
Если ваши столбцы являются внешними ключами других таблиц (общий случай):
источник
Поля первичного ключа должны быть объявлены как не нулевые (это не стандартно, поскольку определение первичного ключа состоит в том, что он должен быть уникальным, а не нулевым). Но ниже приведена хорошая практика для всех многоколоночных первичных ключей в любой СУБД.
источник
Начиная с версии 3.8.2 SQLite, альтернативой явным спецификациям NOT NULL является спецификация «БЕЗ ROWID»: [ 1 ]
Таблицы «БЕЗ КРУГЛЫХ» имеют потенциальные преимущества в эффективности, поэтому следует рассмотреть менее подробную альтернативу:
Например, в командной строке sqlite3:
sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2
источник
WITHOUT ROWID
имеет дополнительные последствия, и его не следует использовать в качестве альтернативы записиNOT NULL
рядом с вашим первичным ключом.Другим способом вы можете также сделать первичный ключ из двух столбцов
unique
и ключ автоинкрементаprimary
. Просто так: https://stackoverflow.com/a/6157337источник
PRIMARY KEY (id, name)
не работал для меня Добавление ограничения сделало работу вместо этого.CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))
источник
Следующий код создает таблицу с 2 столбцами в качестве первичного ключа в SQLite.
РЕШЕНИЕ:
источник