转载

[mysql基础文档]-15-Not NULL约束与默认值

我们在使用数据库的过程中,有时候因为操作失误,常常会产生一些NULL数据,从而导致一些提取信息时不可预知的问题;本文介绍两种方法来防止NULL数据的产生——Not NULL约束与默认值设定。

文章目录

  • [1].MySQL如何设置Not Null约束
  • [2].MySQL如何设置列默认值

[1].MySQL如何使用Not Null约束

首先来看一个包含NULL数据的表的查询实例:

//创建表t19 mysql> create table t19(id int,dt date);  //插入四行数据,最后一行仅插入id字段的数据 mysql> insert into t19 values(1,'2015-10-01'); mysql> insert into t19 values(2,'2015-10-02'); mysql> insert into t19 values(3,'2015-10-03'); mysql> insert into t19(id) values(4);  //通过where筛选查询结果,不论dt大于等于2号还是小于等于2号,都没有NULL数据,但实际上NULL是真是存在的,并且id=4 mysql> select * from t19 where dt>='2015-10-02'; +------+------------+ | id   | dt         | +------+------------+ |    2 | 2015-10-02 | |    3 | 2015-10-03 | +------+------------+  mysql> select * from t19 where dt<='2015-10-02'; +------+------------+ | id   | dt         | +------+------------+ |    1 | 2015-10-01 | |    2 | 2015-10-02 | +------+------------+  //必须用is null这个特殊的判断语法才能查询到NULL数据 mysql> select * from t19 where dt<='2015-10-02' or dt is null; +------+------------+ | id   | dt         | +------+------------+ |    1 | 2015-10-01 | |    2 | 2015-10-02 | |    4 | NULL       | +------+------------+

可能大家会觉得本例中“select * from t19”一眼就能看到NULL数据,但如果表格记录非常庞大,其中出现几个NULL就不那么容易被察觉了,这时就可以通过给字段添加Not Null约束来限制那一列的数据中,不能出现NULL数据。

● 建表时设置Not Null约束

//在数据类型后面添加not null参数即可实现 mysql> create table t20(id int not null,uname char(20) not null);  //测试仅添加id列数据 mysql> insert into t20(id) values(1);  //uname列并不是NULL,而是一个空字符串 mysql> select * from t20; +----+-------+ | id | uname | +----+-------+ |  1 |       | +----+-------+  //可以通过where筛选直接将空字符串的记录筛选出来 mysql> select * from t20 where uname='';  //如果不给int列添加数据 mysql> insert into t20(uname) values('qingsword.com'); mysql> insert into t20(uname) values('www.qingsword.com');  //MySQL缺省的默认值是0 mysql> select * from t20; +----+-------------------+ | id | uname             | +----+-------------------+ |  1 |                   | |  0 | qingsword.com     | |  0 | www.qingsword.com | +----+-------------------+

那如果建表时忘记添加Not Null约束了怎么办,请看下面的实例;

● 给已经存在的表添加Not Null约束

//拿上面的t19表举例,有两种方法,第一种使用change参数 //语法:alter table [表名] change [旧列名] [新列名] [数据类型] not null; //change不仅仅可以给列重命名,还可以给列增加或删除某些属性 mysql> alter table t19 change id id int not null;  //更加专业的修改某列参数的做法是使用modify mysql> alter table t19 modify dt date not null;  //dt的第四条记录因为前面故意设置成了NULL,添加了not null约束后被自动设置成了缺省默认值 mysql> select * from t19; +----+------------+ | id | dt         | +----+------------+ |  1 | 2015-10-01 | |  2 | 2015-10-02 | |  3 | 2015-10-03 | |  4 | 0000-00-00 | +----+------------+

[2].MySQL如何设置列默认值

默认值的设置同Not Null一样,在声明字段的末尾添加default属性即可,请看下面的实例:

//创建表t13,一共4列,每列都设置了Not Null约束与对应的默认值 mysql> create table t21(  -> id int not null default 0,  -> uname char(30) not null default '',  -> gender tinyint not null default 0,  -> login datetime not null default '0000-00-00 00:00:00'  -> ); mysql> desc t21; +--------+------------+------+-----+---------------------+-------+ | Field  | Type    | Null | Key | Default    | Extra | +--------+------------+------+-----+---------------------+-------+ | id  | int(11) | NO   |  | 0       |    | | uname  | char(30)   | NO   |  |      |    | | gender | tinyint(4) | NO   |  | 0       |    | | login  | datetime   | NO   |  | 0000-00-00 00:00:00 |    | +--------+------------+------+-----+---------------------+-------+ 

应该尽量避免使用NULL数据填充字段,如果暂时没有数据可以填充,建议使用默认值取代NULL,比如对一个integer的年龄字段填充-1或0作为默认值,对一个字符串字段填充一个空字符作为默认值,这样会让以后数据库的检索更加方便。

[**] 注:如文中未特别声明转载请注明出自:QingSword.COM

正文到此结束
Loading...