MySQL的not null default


建表语句每行末尾的NOT NULL DEFAUTL 含义


        该句的含义是,该字段不能为null,并且设置如果插入数据的时候不设置该字段的值的时候使用的默认值。insert操作且不给该字段插值的时候,数据库判断该字段不能为null,于是便会找他的default值来写入数据库,如果没有default值,要么报错,插入失败,要么插入成功给个警告(社区版为报错,商用版报警告,并插入空串'',详见下面运行情况)


         由此可见如果为了避免插入null值单纯设置not null是不够的,在多数情况下可能还需要用default设置插入的时候没有设置值的情况下,数据库应该填入的默认值,否则可能引起插入失败。


        注:null不是'',在进行比较的时候null是不等于''的,对于null值需要用IFULL()、 IS NULL、 IS NOT NULL来处理的不能用 =等号。


mysql> \W                //  打开警告,默认MySQL不显示警告,关闭警告用\w
Show warnings enabled.
mysql> insert into test (name) values('aa'); 
Query OK, 1 row affected, 1 warning (0.01 sec)

Warning (Code 1364): Field 'tmp' doesn't have a default value    //  报警告,插入成功
mysql> show variables like '%version%';
+-------------------------+---------------------------------------------------------+
| Variable_name           | Value                                                   |
+-------------------------+---------------------------------------------------------+
| innodb_version          | 5.5.32                                                  |
| protocol_version        | 10                                                      |
| slave_type_conversions  |                                                         |
| version                 | 5.5.32-enterprise-commercial-advanced-log               |
| version_comment         | MySQL Enterprise Server - Advanced Edition (Commercial) |
| version_compile_machine | x86_64                                                  |
| version_compile_os      | Linux                                                   |
+-------------------------+---------------------------------------------------------+
7 rows in set (0.00 sec)

mysql> \W
Show warnings enabled.
mysql> insert into test (name) values('b');
ERROR 1364 (HY000): Field 'note' doesn't have a default value  //  报错,插入失败
mysql> show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.6.14                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| version                 | 5.6.14                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86                          |
| version_compile_os      | Win32                        |
+-------------------------+------------------------------+
7 rows in set (0.00 sec)

           

你可能感兴趣的:(MySQL)