insert into xyz(A,B) values(1,''); // is this possible if B is NOT NULL?
Ответ 1
Да, вы можете... Концепция значения NULL является распространенным источником путаницы для новичков SQL, которые часто считают, что NULL совпадает с пустой строкой '' или значением нуля.
Это не так. Концептуально NULL означает "недостающее неизвестное значение", и оно трактуется несколько иначе, чем другие значения. Например, чтобы проверить значение NULL, вы не можете использовать операторы арифметического сравнения, такие как =, <, или < > в большинстве СУБД.
Ответ 2
Зависит от СУБД.
Oracle no: '' и null идентичны
SQL-Server да: '', а null - разные значения.
Ответ 3
Как сказал Даниэль, да, вы можете вставить строку нулевой длины в поле NOT NULL (кроме Oracle). Однако, если вы хотите также исключить строки нулевой длины, вы можете добавить ограничение:
ALTER TABLE xyz ADD CONSTRAINT CHECK (b LIKE '_%');
Большинство современных баз данных имеют оператор или функцию регулярного выражения, которую можно использовать для ограничений, но точный синтаксис варьируется от базы данных к базе данных.