我在MySQL中使用以下代码在CentOS 6.4和MySQL 5.1上创建了一个表
CREATE TABLE test (
t1 int(10) NOT NULL,
t2 varchar(12) NOT NULL,
PRIMARY KEY (t1),
UNIQUE KEY t2 (t2)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
但查询成功执行后。
desc test
的输出是
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| t1 | int(10) | NO | PRI | NULL | |
| t2 | varchar(12) | NO | UNI | NULL | |
+-------+-------------+------+-----+---------+-------+
它显示DEFAULT
为NULL
而不是NOT NULL
。
但结果是一样的。
此后如果给出插入
INSERT INTO test VALUES ()
插入成功,但它不应该是因为我给出了NULL值而t1的值为0。 插入应该失败,因为值为NULL。
由于重复键子句,后续插入会产生错误。 请告诉我哪里出错了。
我在Ubuntu 13.04上使用MySQL 5.5的另一台机器上试过这个。
| Variable_name | Value |
+-------------------------+-------------------------+
| innodb_version | 5.5.32 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.32-0ubuntu0.13.04.1 |
| version_comment | (Ubuntu) |
| version_compile_machine | x86_64 |
| version_compile_os | debian-linux-gnu |
+-------------------------+-------------------------+
答案 0 :(得分:0)
你写了,你的表有2个字段不可为空,但是你没有为它们指定默认值。 (在第三列输出中 - NULL - 您读为NO)
我用默认值
重写了你的脚本CREATE TABLE test (
t1 int(10) NOT NULL DEFAULT 0,
t2 varchar(12) NOT NULL DEFAULT '',
PRIMARY KEY (t1),
UNIQUE KEY t2 (t2)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;