MySql -- not null 非空约束

2、not null 非空约束

  用于确保当前列的值不为空;在创建表时,如果不指定是否可以为空,字段默认可以为NULL。

-- 这是上一篇默认约束创建的表
CREATE TABLE `test`.`user`(  
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` VARCHAR(225) NOT NULL COMMENT '姓名', -- 这里添加了NOT NULL
  `sex` TINYINT(1) DEFAULT 1 COMMENT '性别 1男 0女',
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_c

 

给字段添加非空约束:

/*
在创建表时,直接在字段类型后面添加 NOT NULL 即可。
如果已经存在了表,那么直接修改表的字段为非空
*/
ALTER TABLE `user`  MODIFY  `name` VARCHAR(255) NOT NULL;
DESC `user`; -- DESC 查看表结构

结果:
Field   Type          Null    Key     Default  Extra           
-----------------------------------------------------------------
id      int(11)       NO      PRI     (NULL)   auto_increment  
name    varchar(225)  NO              (NULL)                   
sex     tinyint(1)    YES             1                      

 

删除非空约束:

/*
删除非空约束和添加非空约束一样,都是修改表字段的结构;
直接删除 NOT NULL,这样就把非空删除了。
*/
ALTER TABLE `user` MODIFY `name` VARCHAR(255);
DESC `user`;

结果:
Field   Type          Null    Key     Default  Extra           
---------------------------------------------------------------
id      int(11)       NO      PRI     (NULL)   auto_increment  
name    varchar(255)  YES             (NULL)                   
sex     tinyint(1)    YES             1                        

 

向非空约束中添加数据:

-- 添加一条记录,直接设置name字段为 '' ,可以添加成功。
INSERT INTO `user`(`name`,`sex`) VALUES('',0);

结果:
共 1 行受到影响


-- 添加一个'null'或者'(NULL)'字符串,添加成功
INSERT INTO `user`(`name`,`sex`) VALUES('null',0);
INSERT INTO `user`(`name`,`sex`) VALUES('(NULL)',0);

结果:
共 2 行受到影响


-- 设置name字段为null,添加失败
INSERT INTO `user`(`name`,`sex`) VALUES(NULL,0);

结果:
错误代码: 1048
COLUMN 'name' cannot be NULL


--
不设置name字段的值,直接添加,添加失败
-- 如果在name字段上再加上默认约束,那么就可以添加,添加的值为默认的值
INSERT INTO `user`(`sex`) VALUES(0); 结果: 错误代码: 1364 FIELD 'name' doesn't have a default value

 

有关的null的查询:

-- 查询name字段为NULL的记录
SELECT * FROM `user` WHERE `name` IS NULL;

-- 查询name字段为不为NULL的记录
SELECT * FROM `user` WHERE `name` IS NOT NULL;

-- 查询空字符串''
SELECT * FROM `user` WHERE `name` = '';

-- 查询全是空的字符串,使用 LENGTH 和 TRIM 函数组合
SELECT * FROM `user` WHERE LENGTH(TRIM(`name`)) = 0;

 

posted @ 2017-07-19 15:07  喵喵扑  阅读(5059)  评论(0编辑  收藏  举报