LINUX.ORG.RU

MySQL не пустой столбец


0

0

Здравствуйте. Что надо сделать со столбцом, чтобы при добавлении новой записи, нельзя было не указать его? Ну т.е. имеем к примеру 3 столбца: s1, s2, s3. s2 - обязательный столбец и не может быть пустым. Если делаем запрос вида: insert into table (s1,s3) values (1,3); - то ошибка.

Я понимаю, что это можно отследить на уровне приложения, но хочется, но уровне СУБД, чтобы если попытка такого добавления будет в транзакции - она не прошла.

★★★★★

Ответ на: комментарий от Anoxemian

Нет

Величина DEFAULT должна быть константой, она не может быть функцией или выражением. Если для данного столбца не задается никакой величины DEFAULT, то MySQL автоматически назначает ее. Если столбец может принимать NULL как допустимую величину, то по умолчанию присваивается значение NULL. Если столбец объявлен как NOT NULL, то значение по умолчанию зависит от типа столбца:

roy ★★★★★
() автор топика
Ответ на: комментарий от Anoxemian

Вот пример:

mysql> CREATE TABLE `test`
    -> (
    ->         `id` INTEGER  NOT NULL AUTO_INCREMENT,
    ->         `login` VARCHAR(255)  NOT NULL,
    ->         `password` VARCHAR(255)  NOT NULL,
    ->         PRIMARY KEY (`id`) 
    -> )Type=InnoDB;
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> insert into test (login) values ('la');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from test;
+----+-------+----------+
| id | login | password |
+----+-------+----------+
|  1 | la    |          | 
+----+-------+----------+
1 row in set (0.00 sec)

mysql> 


Более того, даже созданеи индексов по полю дает возможность вставить
одну запись с пустым значением этого поля

roy ★★★★★
() автор топика
Ответ на: комментарий от Anoxemian

Ошибкой.

mysql> CREATE TABLE `test`
    -> (
    ->         `id` INTEGER  NOT NULL AUTO_INCREMENT,
    ->         `login` VARCHAR(255)  NOT NULL,
    ->         `password` VARCHAR(255)  NOT NULL DEFAULT NULL,
    ->         PRIMARY KEY (`id`),
    ->         UNIQUE KEY `user_password` (`password`)
    -> )Type=InnoDB;
ERROR 1067 (42000): Invalid default value for 'password'

roy ★★★★★
() автор топика
Ответ на: комментарий от MKuznetsov

Да, сработало. Спасибо, пошел RTFM

roy ★★★★★
() автор топика
Ответ на: комментарий от roy

> `password` VARCHAR(255) NOT NULL DEFAULT NULL,

o_O это как? стоит констрейн "null низя", а следом default null. Бред какой-то.

Deleted
()
Ответ на: комментарий от Deleted

Да не, это "опечатка". Это я просто уже игрался с разными опциями, конечно без DEFAULT NULL.

roy ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.