MYSQL笔记 之 集合和约束

一、集合

为了合并多个select语句的结果,可以使用集合操作符,实现集合的并,交,差

结合操作符:union union all

用来获取两个或两个以上结果集的并集,
union操作符会自动去掉合并后的重复记录
union all 返回两个结果集中的所有行,包括重复的行。
多条SQL集合操作的SELECT语句的列个数和数据类型必须匹配
例:

select * from 表名
union select * from 表名;

二、约束

约束(constraint)的全称是约束条件,也称做完整性约束条件
约束是在数据表上强制执行的一些数据校验规则,可以保证表中数据的完整性,保证数据间的商业逻辑
一张表中可以有多个唯一约束

约束的类型

  • 非空约束 (not null),简称(NN)
  • 唯一性约束(Unique) ,简称(UK)
  • 主键约束(Primary Key), 简称PK
  • 外键约束(Foreign Key), 简称FK

非空约束 not null

非空约束用于确保字段值不为空,当某个字段被设置了非空约束条件,这个字段中必须存在有效值
当执行insert操作时,必须提供这个列的数据,当执行update操作时,不能给这个列的值设置为NULL

唯一性约束 unique

唯一性(unique)约束条件用于保证字段或者字段的组合不出现重复值
当给表的某个列定义了唯一约束条件,该列的值不允许重复,但允许是NULL值
唯一性约束条件可以在建表同时建立,也可以在建表以后建立

单个唯一性约束

create table employees (
    eid int unique
);

组合唯一性约束

确保多个字段组合后唯一,需要组合添加约束

  • 创建表时添加
    create table employees (
        eid int unique,
        name varchar(2),
        constraint employess_name_uk unique(name)
    )
    
  • 建表后添加
    alter table 表名 add constraint 约束名称 unique(字段1,字段2);
    
  • 删除唯一约束
    alter table t_user drop index 约束;
    

主键约束 primary key

主键的意义

主键(primary key)约束条件从功能上看相当于非空约束(not null) 和 唯一约束(unique)的组合
用来唯一确定一行数据,一个表上只允许建立一个主键,而其它约束条件则没有明确的个数限制

主键选取的原则

主键应是对系统无意义的数据,永远也不要更新主键,让主键除了唯一标识一行之外,再无其他的用途,主键应自动生成,不要人为干预,以避免使它带有除了唯一标识一行以外的意义

代码

  • 创建时增加

    create table 表名(
        id int primary key auto_increment,
        name varchar(20)
    )
    
  • 创建后增加

    alter table 表名 add constraint 约束名称 primary key (字段1,字段2);
    
  • 删除

    alter table 表名 drop primary key;
    

auto_increment 表示主键自动增长

  • 创建时增加
    create table 表名(
       id int primary key auto_increment,
       name varchar(20)
    ) auto_increment = 10;
    -- 表后面AUTO_INCREMENT表示从多少开始自增
    
  • 创建后增加
    alter table stu1 auto_increment = 2;//修改自增长   
    

外键约束 Foreign Key 避免使用

外键约束条件定义在两个表的字段上,用于保证相关两个字段的关系,
外键约束下,删除上层数据需先删除下层数据
  • 外键约束对性能的降低

如果在一个频繁DML操作的表上建立外键,每次DML操作都将导致数据库自动对外键所关联的主表做检查,产生开销。
如果已在程序中控制逻辑,这些判断将增加额外的负担,可以省去。外键确定了主从表的先后产生关系,有时会影响业务逻辑。

  • 关联不一定需要外键约束

保证数据完整性可由程序控制
简化开发,维护数据时不用考虑外键约束
大量数据DML操作时不需要考虑外键耗费时间

代码

  • 创建

    create table 学生表(
       id int,
       cls_id int,
       foreign key(cls_id) references cls(id)
       -- 将cls_id 列关联到 班级表的id列
    )
    
  • 外部添加外键约束

    alter table 学生表 add constraint 约束名称 foreign key(学生表字段) REFERENCES 班级表(班级表ID)
    
  • 删除外键约束

    alter table 表名 drop foreign key 约束名;
    

猜你喜欢

转载自blog.csdn.net/woharen/article/details/89599457