mysql 约束

mysql 约束:

  • 约束关键字:not null,unique,primary key,foreign key 和 check;

  • primary key:用于唯一标识当前行的数据,定义主键约束后,该行不能重复;

    • primary key 不能重复,而且不能为null,涉及符复合主键也不能为null;
    • 一张表,最多只能有一个主键,但是可以复合主键【primary key (字段1,字段2)】;
    • 主键的指定方式:
      • 字段名 + 类型 + primary key,
      • 在表定义以后,写primary key(列名)
  • unique:不能重复,为一值,但是可以放入多个null 值,unique认为null 不是一个具体的数值;

    • primary key = unique not null;
    • 复合主键的唯一是字段共同判断,单个字段可以重复;
  • foreign key:外键

    • 定义从表和主表之间的关系,外键的约束定义在从表上,主表则必须要有primary key或者是unique约束【确保对应唯一】;

    • 当定义外键后,插入数据,要求外键数据必须在朱标的主键上存在,或者为null【null,代表数据的不存在或未定义状态】;

    • 表的类型是innodb,才支持外键;

    • 一旦建立外键关系,主表数据就不能随意删除

      -- t20(id, ename 是复合主键)
      CREATE TABLE t21 (
      	id INT,
      	ename VARCHAR(255),
      	address VARCHAR(255),
      	FOREIGN KEY(id, ename) REFERENCES t20(id, ename)
      );
      
  • check:强制行数据必须满足的条件,

    • 但是mysql 5.7目前只支持语法校验,但是不会生效;
    CREATE TABLE t21 (
    	id INT,
        sex CHAR(1) CHECK(sex in('男','女')),
    	ename VARCHAR(255),
    	address VARCHAR(255),
    );
    
  • null的基本特性

    • 不可比较性,NULL 与任何值(包括另一个 NULL)比较时,结果不是 TRUEFALSE,而是 UNKNOWN
      • 需要 IS NULL/IS NOT NULL进行判断;
    • 在聚合函数中,(如 SUM, AVG, COUNT 等)会忽略 NULL 值;
    • NULL 参与逻辑运算(如 AND/OR)时,可能导致意外结果;
    • 与空值的区别:NULL 是“无值”,而空字符串 '' 或 0 是具体的值
  • 自增长

    • 自增长默认是从1开始,也可以自己设置;

      CREATE TABLE asc_(
      	id INT PRIMARY KEY AUTO_INCREMENT,
      	ename VARCHAR(255)
      );
      ALTER TABLE asc_ AUTO_INCREMENT = 100;
      
    • 修饰字段最好是整数;

    • 一般和 primary key 或者 unique 配合使用;

    • 如果添加数据,则以添加数据为准,但下次以当前列的最大值 + 1进行自增长;

posted @   烟雨断桥  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示