MySQL问题,设置为不允许为空的字段却可以为空

所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS关键字, Mysql3.23.0或以后支持用<=>用来比较两个NULL值是否相等, 即 select * from table where id <=> NULL.

为什么会出现NULL?这是来源于数据库的左右连接,不是凭空想出来的。比如:
A(ID, Name), B(ID, Address)
1, Name1 1, Shanghai
2, Name2 3, Beijing

当A左连接B则得到:
1, Name1, Shanghai
2, Name2, NULL

当A右连接B则得到:
1, Name1, Shanghai
3, NULL, Beijing

数据库的字段ID设为NOT NULL, 仅仅说明该字段不能为NULL, 也就是说只有在
INSERT INTO table(ID) VALUES(NULL);
这种情况下数据库会报错,而
INSERT INTO table(ID) VALUES(”);
这不能说明是NULL, 数据库系统会根据ID设的缺省值填充,或者如果是自增字段就自动加一
等缺省操作。

摘自:
http://bbs.csdn.net/topics/90102550

你可能感兴趣的:(MySQL)