如果不应该在SQL中插入带有null的记录

时间:2010-12-07 20:08:58

标签: sql mysql insert

我正在为一个简单的网站编写SQL DB,但是存在问题。 我创建了一个表'test',int test1 NOT NULLint test2 NOT NULL。没有默认值。

写作时

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

......一切都很好。

当我使用

INSERT INTO test 
  (test1) 
VALUES 
  (4)

不应该抛出错误吗?相反,它添加了test1 = 4和test2 = 0的记录。

发生了什么事?

3 个答案:

答案 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列数据类型插入默认值