Я пытаюсь добавить новый столбец, который будет внешним ключом. Мне удалось добавить столбец и ограничение внешнего ключа с помощью двух отдельных ALTER TABLE
команд:
ALTER TABLE one
ADD two_id integer;
ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);
Есть ли способ сделать это с помощью одной команды ALTER TABLE вместо двух? Я не мог придумать ничего, что работает.
Ответы:
Как это часто бывает с вопросом, связанным с SQL, это зависит от СУБД. Некоторые СУБД позволяют комбинировать операции ALTER с таблицами, разделенные запятыми. Например...
Синтаксис Informix :
Синтаксис IBM DB2 LUW аналогичен, повторяется ключевое слово ADD, но (если я правильно прочитал диаграмму) не требуется запятая для разделения добавленных элементов.
Синтаксис Microsoft SQL Server :
Некоторые другие не позволяют вам так комбинировать операции ALTER TABLE. Стандартный SQL допускает только одну операцию в операторе ALTER TABLE, поэтому в стандартном SQL она должна выполняться в два этапа.
источник
В MS-SQLServer:
источник
Для SQL Server это должно быть что-то вроде
источник
В MS SQL SERVER:
С пользовательским именем внешнего ключа
Без имени внешнего ключа, определенного пользователем
источник
В Oracle :
источник
Обновление 2020
Это довольно старый вопрос, но люди все еще возвращаются к нему, я вижу. Если приведенные выше ответы вам не помогли, убедитесь, что вы используете тот же тип данных для нового столбца, что и идентификатор другой таблицы.
В моем случае я использовал Laravel, и я использую «целое число без знака» для всех своих идентификаторов, поскольку нет смысла иметь отрицательный идентификатор LOL.
Для этого необработанный SQL-запрос изменится следующим образом:
Я надеюсь, что это помогает
источник
Вы можете сделать это, как показано ниже, в SQL Server
источник
PostgreSQL DLL для добавления столбца FK:
источник
ALTER TABLE TableName ADD NewColumnName INTEGER, FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)
источник
Для DB2 синтаксис:
источник
Если вам также нужно добавить значения по умолчанию, если у вас уже есть несколько строк в таблице, добавьте DEFAULT val
источник
Попробуй это:
источник