mysql not default_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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值