• 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;
  • 相关阅读:
    Beta冲刺——集合随笔
    Beta冲刺——用户调查报告
    Beta冲刺——总结
    Beta冲刺——代码规范、冲刺任务与计划
    Beta冲刺——Day 7
    Beta冲刺——Day 6
    Beta冲刺——Day 5
    Beta冲刺——Day 4
    Beta冲刺——Day3
    beta冲刺汇总
  • 原文地址:https://www.cnblogs.com/lixingwu/p/7204377.html
Copyright © 2020-2023  润新知