mysql 06: 约束

删除表

  • drop table tb_name;

  • drop table if exists tb_name;

    • oracle不支持该语法

约束(constraint)

  • 什么是约束?作用?常见约束有那些?
    • 约束:根据实际情况和业务需求,对字段加一些条件限制
    • 作用:保证数据的完整性,合法性,有效性
    • 常见约束
      • 非空约束(not null)
      • 唯一约束(unique)
      • 主键约束(primary key):既不能为空也不能重复,简称PK
      • 外键约束(foreign key)
      • 检查约束(check):oracle数据库有check约束,mysql暂时不支持该约束

唯一性约束

  • unique:字段不能重复,但可以为NULL

    • 都为NULL,不代表重复,不具有可比性
  • 给两个或多个字段添加unique

    • --在列后面加约束
      create table tb_user(
          id int,
          usercode varchar(255) unique,    --列级约束
          username varchar(255) unique
      );
      
    • --添加联合约束
      create table tb_user(
          id int,
          usercode varchar(255),
          username varchar(255),
          unique(usercode, username)        --表级约束
      );
      
  • 列级约束和表级约束

    • not null没有表级约束

主键约束

  • 一张表的主键只能有一个
  • primary key
    • 非空且不能重复
    • 在字段后面加,列级约束
  • 相关术语
    • 主键约束
    • 主键字段
    • 主键值
  • 作用
    • 表的设计三范式中:第一范式就要求,任何一张表都要有主键
    • 主键值是这行记录在这张表当中的唯一标识
  • 主键分类
    • 根据主键字段的字段数量
      • 单一主键(推荐,常用)
      • 复合主键(多个字段联合起来,添加一个主键,不建议使用,违背三范式)
        • primary key(name1, name2);
    • 根据主键性质
      • 自然主键(和业务无关的自然数,推荐使用)
      • 业务主键(主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证的号码做主键,不建议使用)
        • 最好主键不要与业务挂钩,能完成自身的基本职责即可
        • 业务变化时,可能导致主键值改变,肯能导致主键重复
  • 表级约束,列级约束形式
    • 列级:字段名后加
    • 表级:单独起一行
  • mysql提供了主键自增
    • 字段名后加上:auto_increment
    • 自动维护一个自增的数字,从1开始,以1递增
    • oracle 也提供了一个自增机制,叫做:序列(sequence)对象

外键约束

  • 相关术语
    • 外键约束:foreign key
    • 外键字段:添加有外键约束的字段
    • 外建值:外键字段中的每一个值
  • 作用
    • 减少数据冗余
    • 形成数据约束(值不能随便写了,必须参考外键所在字段里的数据)
  • 语法:foreign key (子表字段名) references 父表名(被参考的父表字段名);
    • 某个表的字段,被另外一张表引用参考
      • 被参考的字段不一定是主键,但是必须保证唯一性(至少有unique约束)
    • 外键所在表为父表,有父子表之分
      • 删除表时,先删除字表
      • 删除数据时,先删除字表
      • 添加数据时,先添加父表
      • 创建表时,先创建父表
  • 外键值可以为NULL?
    • 可以为NULL
版权声明:程序员胖胖胖虎阿 发表于 2022年9月1日 上午5:16。
转载请注明:mysql 06: 约束 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...