我正在为一个简单的网站编写SQL DB,但是存在问题。
我创建了一个表'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的记录。
发生了什么事?
答案 0 :(得分:1)
以下版本与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 :(得分:1)
这可能与MySQL中的模式有关。列i INT NOT NULL
的默认值为0,当不在严格模式时,将自动为您插入。如果您处于严格模式,您的查询将按预期失败。
http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html
答案 2 :(得分:0)
等待。是在第二种情况下将NULL
插入test2还是0
?那些不是一回事。假设它在问题中指定插入0(而不是NULL,如标题所暗示的那样):我相信它正在为int
列数据类型插入默认值。