数据库学习之MySQL (二十六)

您所在的位置:网站首页 mysql的check语句索引约束 数据库学习之MySQL (二十六)

数据库学习之MySQL (二十六)

2024-07-13 16:09| 来源: 网络整理| 查看: 265

文章目录 前言 ´・ᴗ・`组合主键 组合唯一键上一节的问题外键补充添加约束删除约束 修改约束总结 ´◡`

前言 ´・ᴗ・` 这里讲一下一些主键 外键有关的细节 可能做题面试什么的会考到 算是一个补充同时深化 索引 概念的理解 组合主键 组合唯一键

主键 PRIMARY KEY 唯一键 UNIQUE 组合 把两列甚至多列放在一起 成一个键(KEY)

上代码就知道了,我们组合唯一键看看效果: 还是上一节的示例

USE data1; DROP TABLE IF EXISTS project; CREATE TABLE project( 项目编号 INT PRIMARY KEY, #PRIMARY KEY 跟在列后面的约束就是列约束 作用于一列 项目识别码 INT NOT NULL , 专利申请号 CHAR(20) NOT NULL , 项目名称 CHAR(20) NOT NULL , 项目负责人 CHAR(20) NOT NULL , CONSTRAINT un_project UNIQUE (项目识别码,专利申请号,项目名称), CONSTRAINT ck_responsibility CHECK(项目负责人 = 'Ryan' OR 项目负责人 = 'SST') #另起一行 用逗号隔开的就是表级约束 可以约束多个列 就好像控制一个表一样 ); DESC project;

DESC结果: 在这里插入图片描述 然后 我们这么插入数据看看:

INSERT INTO project VALUES(1,2233,2333,'基于MEMS传感器的跌到检测系统','Ryan'); INSERT INTO project VALUES(2,2233,2333,'基于树莓派和内置深度学习算法的','Ryan1');

在这里插入图片描述 可见 第一条和第二条 虽然 项目识别码,专利申请号 都重复 但是没问题! 因为 这是组合成一起判断 是否唯一了

我们再加一句:

INSERT INTO project VALUES(3,2233,2333,'基于树莓派和内置深度学习算法的','Ryan1');

报错如下: 在这里插入图片描述 明显 CONSTRAINT un_project UNIQUE (项目识别码,专利申请号,项目名称), 这句 把三列组合在一起判断了

这就是组合唯一键

同样 你可以尝试组合主键: 加上这样的约束CONSTRINT: CONSTRAINT pk_project PRIMARY KEY (项目编号,项目识别码,专利申请号,项目名称), 测试一下 另外 组合键一般不推荐 因为不够稳定 这里只是拓展视野之用

上一节的问题

上一节 列级约束与表级约束 一段 我们提到: 在这里插入图片描述 现在你就理解了 CONSTRAINT 后面跟着的不仅仅是约束名 也是一个新的键名字 也可以称为 索引 index

注意 既然是索引 是供别人查询的 记得命名要规范: 在这里插入图片描述 正确的命名 PRIMARY KEY - pk 我写的是pk_id_IMSI_ISO CHECK - ck 这里下划线是黑色 背景遮盖了

外键补充

在这里插入图片描述

添加约束

当表已经创建完以后 我们也可以添加约束 1️⃣这里我们先尝试添加列级约束 还是上面的案例

DROP TABLE IF EXISTS project; CREATE TABLE project( 项目编号 INT NOT NULL ,#PRIMARY KEY 跟在列后面的约束就是列约束 作用于一列 项目识别码 INT NOT NULL , 专利申请号 CHAR(20) NOT NULL , 项目名称 CHAR(20) NOT NULL , 项目负责人 CHAR(20) NOT NULL , CONSTRAINT pk_project PRIMARY KEY(项目编号,项目识别码,专利申请号,项目名称), CONSTRAINT ck_responsibility CHECK(项目负责人 = 'Ryan' OR 项目负责人 = 'SST') #另起一行 用逗号隔开的就是表级约束 可以约束多个列 就好像控制一个表一样 );

我们运行一句:

ALTER TABLE project MODIFY COLUMN 项目编号 INT DEFAULT 18;

还记得二十五节 传送: 我们那个公式: alter table [表名] add|drop|modify|change column [列名] [列类型] [约束] 我们其实是修改modify 只不过从无修改到有 就好像添加一样 结果 注意看success部分 在这里插入图片描述 DESC 可见DEFAULT已经添加了 在这里插入图片描述 为啥不用ADD关键字呢?别急 ADD用于 表级约束 2️⃣添加表级约束

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(项目名称,项目负责人);

结果: 在这里插入图片描述 这里我们用 SHOW INDEX FROM project; 查询所有键 也就是索引 我们说过 键一般就是主键 PRIMARY KEY 和 唯一键 UNIQUE 在这里插入图片描述

注意 我们是添加约束 所以 约束名(键名 或者说索引不能重复) 你可以再运行一次

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(项目名称,项目负责人);

就会这样: 在这里插入图片描述 duplicate 重复

当然了 我们还可以添加外键 在这里插入图片描述

删除约束 修改约束

其实添加没啥暖用一般——基本的属性创表就写好了嘛 主要是有冲突的时候 我说过 键名不能重复 不然没法添加新约束 这时 我们得修改约束 SQL挺蛋疼 得先删除 再添加 比如 上面的这句约束

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(项目名称,项目负责人);

我少加了一个 应该是这样:

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(专利申请号,项目名称,项目负责人);

咋办?没回头路了“There’s no way back.’” 先删再加: 1️⃣删除UNIQUE 我们用INDEX关键字

ALTER TABLE project DROP INDEX un_name_responsibility;

再检查一下:

SHOW INDEX FROM project;

在这里插入图片描述 2️⃣ok 下一步:

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(专利申请号,项目名称,项目负责人); SHOW INDEX FROM project;

在这里插入图片描述 3️⃣补充一下:对于主键 我们用 PRIMARY KEY关键字 对于外键 我们用FOREIGN KEY关键字 如果只有一个 可以不加键名 约束名

ALTER TABLE project DROP PRIMARY KEY; ALTER TABLE project DROP FOREIGN KEY; 总结 ´◡`

这一节在上一节的基础上 更加深入讲解了约束类型 从此 我们正式结束了DDL的学习 恭喜!也恭喜你自己能够学到这里! 这里奖励一个萌妹子: 在这里插入图片描述

当然 革命尚未成功 同志任需努力 下一站 我们进入下一个语言的学习——TCL 一节给他结束 重在理解 数据库学习之MySQL (二十七)—— 事务 transaction 事务控制语言 TCL commit rollback

本文专栏 MySQL专栏我的其他专栏 希望能够帮到你 ( •̀ ω •́ )✧ 手把手带你学后端(服务端)python这么火 想要深入学习python 玩一下简单的应用嘛? python应用 谢谢大佬支持! 萌新有礼了:)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3