首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【MySQL】008-表的约束

【MySQL】008-表的约束

作者头像
訾博ZiBo
发布2025-01-06 14:17:56
发布2025-01-06 14:17:56
14900
代码可运行
举报
运行总次数:0
代码可运行

一、概述

1、概念

对表里的数据进行限定,保证数据的正确性、有效性和完整性;

2、分类

①主键约束:primary key

②非空约束:not null

③唯一约束:unique

④外键约束:foreign key

二、非空约束

1、创建表时添加约束:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE stu(
	id INT,
	NAME VARCHAR(20) NOT NULL -- 名字不允许为空,否则创建失败
);

注意:

""与NULL是不同的两个概念;

说明链接:https://blog.csdn.net/u014743697/article/details/54136092

2、删除name的非空约束,本质上就是更改表的字段:

代码语言:javascript
代码运行次数:0
运行
复制
-- 删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);

3、创建表完成之后添加约束,本质上也是更改表的字段:

代码语言:javascript
代码运行次数:0
运行
复制
-- 创建表之后,添加name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

三、唯一约束

1、创建表时添加唯一约束:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE stu(
	id INT,
	NAME VARCHAR(20) UNIQUE -- 唯一约束
);
注意:

两个NULL值,不算重复;

2、删除唯一约束,本质是修改对应字段

代码语言:javascript
代码运行次数:0
运行
复制
-- 删除唯一约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);

3、创建表之后,添加唯一约束,本质是修改对应字段

代码语言:javascript
代码运行次数:0
运行
复制
-- 创建表之后,添加name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

四、主键约束

1、注意

①含义:非空且唯一;

②一张表只能有一个主键;

2、创建表时添加主键约束

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE stu(
	id INT PRIMARY KEY,  -- 主键约束
	NAME VARCHAR(20)
);

3、删除主键约束和创建表之后添加主键约束与非空约束和唯一约束一样

五、主键约束——自动增长

1、概念

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

2、创建表时添加

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE stu(
	id INTPRIMARY KEY AUTO_INCREMENT, -- 主键自动增长
	NAME VARCHAR(20)
);
注意:添加语句时主键的内容填入NULL即可,会根据上一个主键的值进行自动增加

3、删除自动增长和创建表后自动增长,同非空约束和唯一约束;

六、外键约束

1、描述

个人理解:加入一个部门的员工表,对于每一个员工在某些字段上存在大量相同的数据,比如有几百名来自同一部门的员工同时都是男性,都是大学生这些相同属性,那么这个时候重复地将一些相同的数据赋值给不同的员工,这样来说浪费了很多内存,那么这样的话就可以建立一个从表,将这些表具有相同值的字段添加进去,主表进行调取即可,这就像是写代码中的定义变量,不需要一次次赋予一样的值。

2、在创建表时添加外键

语法格式:
代码语言:javascript
代码运行次数:0
运行
复制
create table 表名(
    ...
    外键列名称 数据类型,
    constraint 外键名称 foreign key (外键列名称) references 从表名称(关联的从表列(一般是主键)名称)
);
注意:从表要在主表创建之前 创建并添加数据记录,主表才能使用;
完整案例代码:
代码语言:javascript
代码运行次数:0
运行
复制
-- 创建从表,记录学生的性别和年龄,id自增长
CREATE TABLE stu_p(
   id INT PRIMARY KEY AUTO_INCREMENT,
   sex VARCHAR(20),
   age INT
)

-- 为从表添加记录
INSERT INTO stu_p(id,sex,age) VALUES(1,"男",20);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"男",21);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"男",22);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"女",20);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"女",21);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"女",22);

-- 创建主表,记录学生的信息,关联从表里面学生的属性
CREATE TABLE stu(
   id INT PRIMARY KEY AUTO_INCREMENT,
   NAME VARCHAR(20),
   ranking INT,
   dep_id INT, -- 外键对应的从表的主键(一般都是对应主键)
   CONSTRAINT stu_p_id_fk FOREIGN KEY (dep_id) REFERENCES stu_p(id)
)

-- 为主表添加记录
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(1,"大哥",1,1);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"二哥",3,2);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"三哥",2,3);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"四哥",5,2);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"大姐",8,1);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"二姐",44,2);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"三姐",31,3);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"四姐",51,3);

-- 查询从表数据
SELECT * FROM stu_p;
-- 查询主表数据
SELECT * FROM stu;

3、删除外键

代码语言:javascript
代码运行次数:0
运行
复制
ALTER TABLE 主表名 DROP FOREIGN KEY 外键名称;

4、创建表后添加外键

代码语言:javascript
代码运行次数:0
运行
复制
ALTER TABLE 主表名 ADD constraint 外键名称 foreign key (外键列名称) references 从表名称(关联的从表列(一般是主键)
外键备注:外键可以为null,但是不能为不存在的外键值;

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

1、添加外键,设置级联更新和级联删除

代码语言:javascript
代码运行次数:0
运行
复制
ALTER TABLE 主表名 
ADD constraint 外键名称 
foreign key (外键列名称) 
references 从表名称(关联的从表列(一般是主键) 
ON UPDATE CASCADE ON DELETE CASCADE;
当删除从表里面的记录时,主表里面关联所删除的记录主键的记录也会被一起删除;

2、分类

级联更新:ON UPDATE CASCAD

级联删除:ON DELETE CASCADE

3、备注

级联操作用的时候一定要非常谨慎,因为很容易误删数据;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
    • 1、概念
    • 2、分类
  • 二、非空约束
    • 1、创建表时添加约束:
    • 2、删除name的非空约束,本质上就是更改表的字段:
    • 3、创建表完成之后添加约束,本质上也是更改表的字段:
  • 三、唯一约束
    • 1、创建表时添加唯一约束:
      • 注意:
    • 2、删除唯一约束,本质是修改对应字段
    • 3、创建表之后,添加唯一约束,本质是修改对应字段
  • 四、主键约束
    • 1、注意
    • 2、创建表时添加主键约束
    • 3、删除主键约束和创建表之后添加主键约束与非空约束和唯一约束一样
  • 五、主键约束——自动增长
    • 1、概念
    • 2、创建表时添加
      • 注意:添加语句时主键的内容填入NULL即可,会根据上一个主键的值进行自动增加
    • 3、删除自动增长和创建表后自动增长,同非空约束和唯一约束;
  • 六、外键约束
    • 1、描述
    • 2、在创建表时添加外键
      • 语法格式:
      • 注意:从表要在主表创建之前 创建并添加数据记录,主表才能使用;
      • 完整案例代码:
    • 3、删除外键
    • 4、创建表后添加外键
      • 外键备注:外键可以为null,但是不能为不存在的外键值;
  • 七、外键约束——级联操作
    • 1、添加外键,设置级联更新和级联删除
      • 当删除从表里面的记录时,主表里面关联所删除的记录主键的记录也会被一起删除;
    • 2、分类
    • 3、备注
      • 级联操作用的时候一定要非常谨慎,因为很容易误删数据;
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档