数据库学习之MySQL (二十六) |
您所在的位置:网站首页 › mysql的check语句索引约束 › 数据库学习之MySQL (二十六) |
文章目录
前言 ´・ᴗ・`组合主键 组合唯一键上一节的问题外键补充添加约束删除约束 修改约束总结 ´◡`
前言 ´・ᴗ・`
这里讲一下一些主键 外键有关的细节 可能做题面试什么的会考到 算是一个补充同时深化 索引 概念的理解
组合主键 组合唯一键
主键 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 |