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;