В этом вопросе я изучил, как предотвратить вставку Нулевого значения. Но к сожалению, пустая строка вставляется так или иначе. Кроме предотвращения этого на стороне PHP, я хотел бы использовать что-то как ограничение базы данных для предотвращения этого. Конечно, проверка на стороне приложения необходима, но я хотел бы, чтобы она была с обеих сторон.
Мне преподают, что независимо от того, что приложение говорит с Вашей базой данных, оно не должно мочь вставить в основном неправильные данные в него. Так...
CREATE TABLE IF NOT EXISTS tblFoo (
foo_id int(11) NOT NULL AUTO_INCREMENT,
foo_test varchar(50) NOT NULL,
PRIMARY KEY (foo_id)
);
Все еще позволил бы мне делать эту вставку:
INSERT INTO tblFoo (foo_test) VALUES ('');
Который я хотел бы предотвратить.
Обычно вы делаете это с ограничением CHECK:
foo_test VARCHAR(50) NOT NULL CHECK (foo_test <> '')
К сожалению, MySQL имеет ограниченную поддержку ограничений. Из Справочное руководство MySQL :
Предложение CHECK анализируется, но игнорируется всеми механизмами хранения.
Вот почему вы должны использовать триггеры в качестве обходного пути, как отмечали люди.
В будущем вы, возможно, захотите взглянуть на PostgreSQL , который, как считается многими людьми, лучше поддерживает целостность данных (среди прочего ) .
Вы можете использовать триггеры для предотвращения вставки пустой строки.
Это не быстро, не очень лаконично и не красиво, но...
Пример:
Создайте таблицу:
mysql> create table yar (val VARCHAR(25) not null);
Запрос OK, 0 строк обработано (0.02 сек)
Создайте триггер 'before insert' для проверки на наличие пустой строки и запрета.
mysql> delimiter $
mysql> создайте триггер foo перед вставкой на yar
-> для каждой строки
-> begin
-> if new.val = '' then
-> signal sqlstate '45000';
-> end if;
-> end;$
Запрос OK, 0 строк обработано (0.01 сек)
mysql> разделитель ;
Попробуйте вставить null и blankstring в ваш столбец:
mysql> insert into yar values("");
ОШИБКА 1644 (45000): Не обработанное пользовательское условие исключения
mysql> insert into yar values(NULL);
ERROR 1048 (23000): Столбец 'val' не может быть нулевым
mysql> insert into yar values ("abc");
Запрос OK, 1 строка затронута (0.01 сек)
mysql> select * from yar;
+-----+
| val |
+-----+
| abc |
+-----+
1 строка в наборе (0.00 сек)