zoukankan      html  css  js  c++  java
  • MySQL数据库(三)—— 表的约束

    一、概念

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

    二、分类

    1.主键约束:primary key

    2.非空约束:not null

    3.唯一约束:unique

    4.外键约束:foreign key

    三、非空约束 not null,被修饰列值不能为空

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

    create table student(id int, name varchar(32) not null); -- name为非空

    2.删除非空约束

    alter table student modify name varchar(32);

     3.创建表完成后,添加非空约束

    alter table student modify name varchar(32) not null;

    四、唯一约束 unique,被修饰列值不能重复

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

     create table student(id int, phone_number varchar(20) unique); -- phone_number列添加了唯一约束

    2.删除唯一约束

    alter table student drop index phone_number;

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

    alter table student modify phone_number varchar(20) unique;

    注意:这样删除不掉唯一约束:alter table student modify phone_number varhcar(20);

    注意:MySQL中唯一约束限定的列的值可以有多个null。

    五、主键约束 primary key

    (一) 注意:

    1. 主键的含义:非空且唯一。

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

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

    (二)添加主键

    1.创建表时添加主键约束

    create table student(id int primary key, name varchar(20));

    2.删除主键约束

    alter table student drop primary key;

    3.创建表完成后,添加主键

    alter table student modify id int primary key;

    注意:这样删除不掉主键约束:alter table student modify id int;

    六、主键约束_自动增长

    1.概念:如果某一列是数值类型的,使用auto_increment可以来完成值的自动增长

    2.创建表时添加主键约束,并完成自增长。

    create table student(id int primary key auto_increment, name varchar(32));

    3.删除自动增长(主键约束删除不掉,自动增长约束可以删除)

    alter table student modify id int;

    4.创建表完成后,给主键列添加自动增长约束

    alter table student modify id int auto_increment;

    七、外键约束 foreign key,让表与表产生关系,从而保证数据的正确性

    1.在创建表时添加外键约束

    语法:

    create table(

      ……

      外键列

      constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称 -- 可以是主键,也可以是被唯一约束的列)

    );

    举例:

    创建部门表(id, dept_name, dept_location)

    create table department(

      id int primary key auto_increment,

      dept_name varchar(20),

      dept_location varchar(20)

    );

    创建员工表(id, name, age, dept_id)

    create table employee(

      id int primary key auto_increment,

      name varchar(20),

      age int,

      dept_id int,

      constraint emp_dept_fk foreign key (dept_id) references department(id)

    );

    外键名随便起,只要不重复即可。

    2.删除外键

    alter table employee drop foreign key emp_dept_fk;

    alter table 表名 drop foreign key 外键名称;

    3.创建表完成后,添加外键约束

    alter table employee add constraint emp_dept_fk foreign key (dept_id) references deparment(id);

    alter table 表名add constraint 外键名称 foreign key (列名) references 主表名称(主表的列的名称);

    八、外键约束——级联操作

    1.添加外键时,设置级联更新

    alter table employee add constraint emp_dept_fk foreign key (dept_id) references deparment(id) on update cascade;

    2.级联删除(部门表删除id为1,员工表对应数据也都删除)

    alter table employee add constraint emp_dept_fk foreign key (dept_id) references deparment(id) on delete cascade;

    3.设置级联更新和级联删除

    alter table employee add constraint emp_dept_fk foreign key (dept_id) references deparment(id) on update cascadeon delete cascade;

    4.总结语法:

    alter table 表名add constraint 外键名称 foreign key (列名) references 主表名称(主表的列的名称) on update cascadeon delete cascade;

  • 相关阅读:
    java实现前n项和,要求不使用循环、乘除法、判断标识
    java 线程池 带返回值
    java 多线程 数据通信
    jedis使用分布式锁
    记一次自定义管理工厂使用spring自动装载bean
    面试题玩数组
    记一次随便排序算法
    九九乘法表打印记一次al面试
    多线程操作共享变量顺序输出abc 记一次al面试题
    博客迁移
  • 原文地址:https://www.cnblogs.com/upyang/p/11996493.html
Copyright © 2011-2022 走看看