zoukankan      html  css  js  c++  java
  • mysql教程(七) 约束详解

    1、常见约束

      not null:非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空。

      unique:唯一约束,它可以使某个字段的值不能重复,如:email不能重复:

      primary key:主键约束,每个表应该具有主键,主键可以标识记录的唯一性,主键分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的。

      foreign key:外键约束,外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键,如:emp中的deptno值必须来源于dept表中的deptno字段值。

      注意:当一个表中存在外键约束时,比如a表中有一个外键来自b表,那么删除数据的时候的时候要先删除a表中的引用记录,再删除b表中的数据。

    2、一个完整的创建表并添加约束的模板

    drop table if exists t_classes;
    create table t_classes(
    classes_id	int (3),
    classes_name	varchar(30)	not null,
    constraint	pk_classes_id	primary key(classes_id) 
    )
    
    drop table if exists t_student;
    create table t_student(
    student_id	int(10),
    student_name varchar(50) not null,
    sex	char(2) not null,
    birthday	date not null,
    email	varchar(30) unique,
    classes_id	int (3) not null,
    constraint	pk_student_id	primary key(student_id),
    constraint	fk_classes_id	foreign key(classes_id) references t_classes(classes_id) 
    )
    

    3、级联更新与级联删除

      当一个表中存在外键约束时,删除和修改都会是一个比较令人头疼的事情,一不小心就会报错。可以采用级联的方法去解决这个问题。

      on update cascade 级联更新

    mysql对有些约束的修改比较麻烦,所以我们可以先删除,再添加
    alter table t_student drop foreign key fk_classes_id;
    alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id)  on update cascade;

      on delete cascade 级联删除

    mysql对有些约束的修改时不支持的,所以我们可以先删除,再添加
    alter table t_student drop foreign key fk_classes_id;
    alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id)  on delete cascade;
    delete from t_classes where classes_id = 20;
    

    4、添加约束

      ① 添加外键约束:alter table 从表 add constraint   约束名称 foreign key 从表(外键字段) references 主表(主键字段);

      示例:alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id);

      ② 添加主键约束:alter table 表 add constraint  约束名称  primary key  表(主键字段); 

      示例:alter table t_student add constraint pk primary key(student_id);

      ③ 添加唯一性约束:alter table 表 add constraint  约束名称 unique  表(字段); 

      示例:alter table t_student add constraint uk unique(email);

    5、修改约束

      alter table t_student modify student_name varchar(30) unique;

      mysql对有些约束的修改时不支持,所以我们可以先删除,再添加

    6、删除约束

      删除外键约束:alter table 表名 drop foreign key 约束名;

      删除主键约束:alter table 表名 drop primary key ;

      

      

  • 相关阅读:
    Java深入学习31:ArrayList并发异常以及解决方案
    Java深入学习30:CAS中的ABA问题以及解决方案
    Java深入学习29:线程等待和唤醒的两个方案
    Redis学习05:Springboot集成Redis集群cluster
    项目总结66:Springboot项目继承kafka集群
    项目总结65:内存溢出OOM问题处理
    异常处理009:Windows10远程桌面连接提示:出现身份验证错误,要求的函数不受支持
    项目总结64:分别使用Redisson和Zookeeper分布式锁模拟模拟抢红包业务
    项目总结63:使用Spring AOP和BindingResult实现对接口的请求数据校验,并用@ExceptionHandler返回校验结果
    Java深入学习04:深入理解HashMap
  • 原文地址:https://www.cnblogs.com/wnnstudy/p/14113865.html
Copyright © 2011-2022 走看看