MySQL-约束

概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性

分类:

  1.主键约束:primary key

   Ⅰ.创建表时添加非空约束

      create table stu(

        id int primary key,

        name varchar(20)

      );

    Ⅱ.创建表完成以后添加非空约束

      alter table stu modify id int primary key;

    Ⅲ.删除非空约束

      alter table stu drop primary key;

    注意:

      ①含义:非空且唯一

      ②一张表只能有一个字段为主键

      ③主键就是表中记录的唯一标识

  2.非空约束:not null

       Ⅰ.创建表时添加非空约束

      create table stu(

        id int,

        name varchar(20) not null  --name为非空

      );

       Ⅱ.创建表完成以后添加非空约束

      alter table stu modify name varchar(20) not null;

    Ⅲ.删除非空约束

      alter table stu modify name varchar(20);

  3.唯一约束:unique

   Ⅰ.创建表时添加唯一约束

      create table stu(

        id int,

        phone_number varchar(20) unique --添加了唯一约束

      );

     Ⅱ.创建表完成后添加唯一约束

      alter table stu modify name varchar(20) unique; 

     Ⅲ.删除唯一约束

      alter table stu drop index phone_number;  --注意,删除唯一约束和删除非空约束的方法不一样

     注意:在MySQL中,如果添加了唯一约束的表的多个值为null,则不会报错,在这里,null有点像表示的是不确定

  4.外键约束:foreign key

   Ⅰ.在创建表时,可以添加外键(有外键的表是从表):

      create table 表名(

        ......

        外键列

        constraint 外键名称 foreign key(外键列名称)references 主表名称(主表列名称)

       );

   关联两张表的约束:

    主表部门表:

      create table department(

        id int primary key auto_increment,

        dep_name varchar(20);  --部门名

        dep_location varchar(20);   --部门地址

      );

    从表员工表:

      create table employee(

        id int primary key auto_increment,

        name varchar(20),

        age int,

        dep_id int,  --外键对应主表的主键

        constraint dep_emp_fk foreign key(dep_id) references department(id);

      );

    Ⅱ.在创建表后,可以添加外键

      alter table employee add constraint dep_emp_fk foreign key(dep_id) references department(id);

    Ⅲ.删除外键

      alter table employee drop foreign key emp_dept_fk;

    Ⅳ.级联操作:级联就是说,如果相互关联的两个表,关联的部分的从表想要修改成主表中没有的数据,则会报错,关联的部分的主表想要修改从表中没有的数据,也会报错,如果使用级联,则主表修改的数据从表与之相关联的数据也会相应的修改过去,不会报错

      只需要在创建表的添加外键的时候(上面的Ⅱ),后面加上on update cascade即可 如:alter table employee add constraint dep_emp_fk foreign key(dep_id) references department(id) on update cascade;

      如果想要级联删除,则先删除外键,然后在创建表的添加外键的时候(上面的Ⅱ),后面加上on delete cascade即可 如:alter table employee add constraint dep_emp_fk foreign key(dep_id) references department(id) on delete cascade;

      级联更新和删除可以都写上,则说明说明你既可以有级联更新的权限也有级联删除的权限,则更新和删除就不会因为主外键约束而修改不了

原文地址:https://www.cnblogs.com/KeepCalmAndNeverSayNever/p/11890463.html