数据库-约束

约束

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

(一组数据必须有值,比如必须有名字,不然表格不完整)

分类:

  1. 主键约束:primary key
  2. 非空约束:not null
  3. 唯一约束:unique
  4. 外键约束:foreign key

1、主键约束

  • 含义:非空且唯一

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

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

  1. 创建表时,添加主键约束
 CREATE TABLE stu(
     id INT PRIMARY KEY,   -- 给id添加主键约束
     NAME VARCHAR(20) 
 );
  1. 删除主键
 ALTER TABLE stu DROP PRIMARY KEY;
  1. 创建完表之后,添加主键
 ALTER TABLE stu MODIFY id INT PRIMARY KEY;
  1. 自动增长
  • 概念:如果某一列是数值类型的,使用关键字 auto_increment 可以来完成值的自动增长。
CREATE TABLE stu(
         id INT PRIMARY KEY AUTO_INCREMENT,   -- 给id添加主键约束
         NAME VARCHAR(20) 
     );
     -- 表格里已经有1|aaa ,2|bbb
     SELECT * FROM stu;
     
     -- 这里把id置为NULL,主键一般会报错,但是加了AUTO_INCREMENT,就可以自动生成3执行下面这段代码多次,数字也会逐渐增加。3|ccc,4|ccc,5|ccc...,如果我加一条语句INSERT INTO stu VALUES(10,'ccc'),运行之后,添加了10|ccc。再运行一遍下面这条语句,那么结果将会变成11|ccc。会读取上一条记录的值,然后自动增长。
     INSERT INTO stu VALUES(NULL,'ccc');
  • 删除自动增长
 ALTER TABLE stu MODIFY id INT;
 -- 主键仍然存在
  • 添加自动增长
 ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

2、非空约束

  1. 重新建一个表,在设定数据时加入代码not null
CREATE TABLE teacher(
        id INT,
        NAME VARCHAR(20) NOT NULL -- name为非空
);
在添加数据时把name置空就会报错,如下图

在这里插入图片描述

  1. 删除name非空约束
ALTER TABLE teacher MODIFY NAME VARCHAR(20);
  1. 创建表后,再添加非空约束
ALTER TABLE teacher MODIFY NAME VARCHAR(20) NOT NULL;

3、唯一约束

  1. 创建表时添加唯一约束
CREATE TABLE teacher(
        id INT,
        phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
);
不能与其他编号相同,不可以有重复的数字。但是都为null不会报错,可以有多个null
  1. 删除唯一约束
ALTER TABLE teacher DROP INDEX phone_number;
-- 与上面不相同,较为特殊,使用了drop index
  1. 创建表后添加唯一约束
ALTER TABLE teacher MODIFY phone_number VARCHAR(20) UNIQUE;

4、外键约束

  • 创建表
CREATE TABLE emp(
     id INT PRIMARY KEY AUTO_INCREMENT,
     NAME VARCHAR(30),
     age INT,
     dep_name VARCHAR(30), -- 部门名称
     dep_location VARCHAR(30) -- 部门地址
);
idNMAEagedep_namedep_location
1张三20研发部广州
2李四21研发部广州
3王五20研发部广州
4老王20销售部深圳
5大王22销售部深圳
6小王18销售部深圳

出现了数据冗余的现象

  • 那么解决方案就是创建两张表然后把dep_name,dep_location,作为两列
iddep_namedep_location
1研发部广州
2销售部深圳

外键要关联另一张表的主键,让表与表产生关系,从而保证数据的正确性。

  • 外键约束
  1. 创建表时,可以添加外键
CREATE TABLE department(
     id INT PRIMARY KEY AUTO_INCREMENT,
     dep_name VARCHAR(20), -- 部门名称
     dep_location VARCHAR(20) -- 部门地址
);
CREATE TABLE employment(
     id INT PRIMARY KEY AUTO_INCREMENT,
     NAME VARCHAR(20),
     age INT,
     dep_id INT, -- 外键对应主表的键
     CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
    -- CONSTRAINT 外键名称 FOREIGN KEY(外键 列名称) REFERENCES 主表名称(主表 列名称)
);

ps:有外键关联之后不可以随便将department表中的行数据删掉,而且也不可以在employment中添加不存在的部门编号,例如3。可以为null

  1. 删除外键
ALTER TABLE employment DROP FORIGN KEY emp_dept_fk;
-- ALTER TABLE 表名 DROP FORIGN KEY 外键名称;
  1. 创建表之后,添加外键
ALTER TABLE employment ADD FORIGN KEY emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id);
-- ALTER TABLE 表名 ADD FORIGN KEY 外键名称 FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主表 列名称);
  1. 级联操作

作用就是当我改变不论是主表还是副表的id值,把department里的id值由1改成5,或者把employment主表中的外键对应的列dep_id由1改成5,只要是关联的数据就会跟着改变。

  • 级联更新:
-- 添加外键,设置级联更新
ALTER TABLE employment ADD CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id) ON UPDATE CASCADE;
-- 改变employment中的dep_id的值由1改成5
UPDATE employment SET dep_id = NULL WHERE dep_id = 1;
UPDATE employment SET dep_id = 5 WHERE dep_id IS NULL;
  • 级联删除:
-- 添加外键,设置级联更新级联删除
ALTER TABLE employment ADD CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE;
-- 把一号部门删掉,那么主表的员工也会被删掉,用上面的例子就是说删了销售部那一行,那么老王,大王,小王这三个员工都会被删掉
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值