Вставка записи с нулем в SQL, когда это не должно - PullRequest
0 голосов
/ 07 декабря 2010

Я пишу базу данных SQL для простого сайта, но есть проблема.Я создал таблицу test с int test1 NOT NULL и int test2 NOT NULL.Нет значений по умолчанию.

Когда я пишу

INSERT INTO test 
  (test1, test2) 
VALUES 
  (1,2)

... все хорошо.

Когда я использую

INSERT INTO test 
  (test1) 
VALUES 
  (4)

Не долженэто выбросить ошибку?Вместо этого он добавляет запись с test1 = 4 и test2 = 0.

Что происходит?

Ответы [ 3 ]

1 голос
/ 07 декабря 2010

Следующее работает так же, как и ожидалось в версии 5.1.42.На какой вы версии?

create table test(
   test1 int not null
  ,test2 int not null
);

Query OK, 0 rows affected (0.05 sec)


insert into test(test1, test2) values(1,2);
Query OK, 1 row affected (0.00 sec)

insert into test(test1) values(4);
ERROR 1364 (HY000): Field 'test2' doesn't have a default value

insert into test(test2) values(4);    
ERROR 1364 (HY000): Field 'test1' doesn't have a default value

select * from test;
+-------+-------+
| test1 | test2 |
+-------+-------+
|     1 |     2 |
+-------+-------+
1 row in set (0.00 sec)
1 голос
/ 07 декабря 2010

Это может быть связано с режимом в MySQL.Значение по умолчанию для столбца i INT NOT NULL равно 0, и оно будет вставлено автоматически, если не в строгом режиме .Если вы находитесь в строгом режиме, ваш запрос не будет выполнен, как вы ожидали.

http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

0 голосов
/ 07 декабря 2010

Подождите. Это вставка NULL в test2 во втором случае, или 0? Это не одно и то же. Предполагая, что он вставляет 0, как указано в вопросе (в отличие от NULL, как подразумевается в заголовке): я полагаю, что он вставляет значение по умолчанию для типа данных столбца int.

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