Mysql踩坑记之为什么能不null就不null

大家都知道,mysql的字段有个属性是是否允许为NULL,我们可以设置为default null 或者not null  或者not null default ‘’ 

下面我列一下这三个表示方法的利弊。

1、default null 

    这种写法,会造成我们根据当前列比较的时候判断当前列是否是null的时候,不用使用常规的=,而是要使用

    

select name from student where name is null;

另外一点是,如果当前列是唯一索引,会允许多个null的值并存,这可能会造成我们的代码上的bug,这点大家一定要注意。

 

2、not null,这要求插入值的时候,当前类不能是null,这本身没有什么问题,但是下面的场景,就会带来大问题,尤其是新手程序员需要注意。

    

create table t1(
id int auto_increment primary key ,
name varchar(30) not null ) ;


-- 场景a 插入sql
insert into t1(name) values('a');


--某个需要,需要增加字段。
alter table t1 add column  address varchar(30) not null;



--如果场景a忘记了修改
insert into t1(name) values('b');
--会报如下错误。
ERROR 1364 (HY000): Field 'address' doesn't have a default value




3、alter table t1 add column  address varchar(30) not null default ‘’ ,这种写法是强烈推荐的 。既可以避免ERROR 1364 (HY000): Field 'address' doesn't have a default value,错误,又可以避免第一个场景下的不便。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值