SQL-оператор не пустой запрос - PullRequest
0 голосов
/ 09 июня 2019

Может ли кто-нибудь объяснить, почему в приведенных ниже утверждениях одно допустимо, а другое нет, когда они кажутся идентичными (игнорируя тот факт, что один является СОЗДАТЬ, а другой - АЛТЕР).

«ALTER TABLE позволяет добавлять только те столбцы, которые могут содержать нули или иметь определение DEFAULT», почему CREATE TABLE допускает добавление пустых столбцов, для которых не указано значение по умолчанию?

CREATE TABLE Test
(
  ID int NOT NULL
);

ALTER TABLE Test ADD
ID int NOT NULL;

Ответы [ 2 ]

1 голос
/ 09 июня 2019

Скажите, что таблица содержит 2 строки данных.
Это утверждение:

ALTER TABLE Test ADD ID int NOT NULL;

(если бы он мог выполняться) создаст новый столбец, и у 2 существующих строк будет id = NULL, хотя вы определили столбец как NOT NULL !!!
Вы видите проблему?
Но для оператора CREATE такой проблемы нет, потому что на момент создания нет данных.

1 голос
/ 09 июня 2019

Ваша версия запроса не работает, поскольку в таблице уже есть столбец с именем id. Вы не можете добавить еще один.

Но вы можете добавить новый столбец, чтобы он работал:

ALTER TABLE Test ADD ID2 int NOT NULL;

Вернее, это работает на пустой таблице . Вы не можете добавить столбец NOT NULL без DEFAULT в таблицу с какими-либо строками. Существующие строки получат столбец. Но с какой ценностью? Это не может быть NULL из-за ограничения NOT NULL. И нет альтернативного DEFAULT значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...