网站侧边栏代码,wordpress 微信h5,工商注册流程和需要的资料,网页设计最牛的网站建设以前写的太乱了#xff0c;翻出来重新整理下系列目录#xff1a;MySQL入门#xff0c;问题不大【增删改查极速上手】(一) 引入约束(1) 约束出现在哪里#xff1f; 想要讲解约束#xff0c;就要知道约束用在哪里#xff0c;用来干嘛#xff1f;SQL 语言通过定义一个关系所… 以前写的太乱了翻出来重新整理下系列目录MySQL入门问题不大【增删改查极速上手】(一) 引入约束(1) 约束出现在哪里 想要讲解约束就要知道约束用在哪里用来干嘛SQL 语言通过定义一个关系所对应的基本表来完成关系模式的定义其语句格式为CREATE TABLE 表名( 1 1 [], [2 2 [],...], []);符号规定下面展示一些定义的时候为简便理解使用中文配合符号表述(会有具体举例不用担心理解不了) 中的内容为实际的语义[] 中的内容为任选项(不填写也可){} 中的内容必须显式的指定| 为选项符[,…n] 表示前面的项可以重复多次(2) 约束用来干嘛 约束就是针对属性值的一些约束条件只针对某一列叫做列级约束、针对多列属性的约束叫做表级约束怎么理解呢就例如某一列叫做 学号我们就指定约束这一行不允许为 NULL 同时我们还能指定它为主键这样通过学号就可以查找到一条唯一的学生记录了还有例如外键知识等等…总结起来就一句话约束用来对表中的数据进行限定保证数据的正确性、有效性和完整性同样有了约束知识的铺垫我们就可以引申出后面的一些知识例如多表操作等等所以约束虽然简单还是非常重要的哈~(二) 常见约束(1) 主键约束 A基本概念在关系模型中主键的本质其实就是一个候选键理解非常简单就是能通过这个主键确定一个唯一的记录例如学号是学生实体的候选键一个学号就能确定这个学生到底哪个学生而我们不选择姓名这是因为姓名在实际的情况中不能作为一个唯一的标识确认一个唯一的学生记录候选键关系中能唯一标志一个元组的最小属性集B特点确定为主键的列不能为空也不能重复C具体操作指定主键约束使用的是 PRIMARY KEY 关键字一般来说主键约束主要用在创建表时指定约束的方式有两种① 定义在列后CREATE TABLE students ( sid INT(8) PRIMARY KEY, sname VARCHAR(5), department VARCHAR(32), birthday date)② 独立定义CREATE TABLE students ( sid INT(8), sname VARCHAR(5), department VARCHAR(32), birthday date, PRIMARY KEY (sid) )如果在表已经创建好的前提下还可以通过下列两种方式进行主键的指定和删除① 删除主键ALTER TABLE students DROP PRIMARY KEY;② 指定主键ALTER TABLE students ADD PRIMARY KEY(sid);ALTER TABLE students MODIFY sid INT PRIMARY KEY;D主键自增提到主键就必须提到主键自增了这个功能也是非常常用的当设置主动自增后例如你使用高级语言操作数据库向学生表插入一条记录后即使不给出主键值主键值也会自动生成出来并且会在最大主键值的基础上 1例如 012 … n最重要的一点主键必须是整型才能实现自增喔~如果主键例如 sid 为 varchar 类型就会有这样的报错Incorrect column specifier for column sid同样主键自增一般用在创建表的时候使用 AUTO_INCREMENT直接跟在列名后即可CREATE TABLE students ( sid INT(8) PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(5), department VARCHAR(32), birthday date)如果表已经创建好了还可以进行是否自增的修改① 设置主键自增ALTER TABLE students CHANGE sid sid INT AUTO_INCREMENT;ALTER TABLE students MODIFY sid INT AUTO_INCREMENT;② 删除主键自增ALTER TABLE students CHANGE sid sid INT;ALTER TABLE students MODIFY sid INT;说明上面设置以及删除都给出了 CHANGE 和 MODIFY 两种有什么区别呢其实细心的朋友也可以看出来 CHANGE 后要多一个列名 sid(可以修改) 所以总结如下只修改类型用 MODIFY既修改列名也修改类型用 CHANGE(2) 非空约束 非空约束很好理解就是指定非空约束列的值不能为空我们使用 NOT NULL 来实现这个功能CREATE TABLE students ( sid INT(8) PRIMARY KEY AUTO_INCREMENT, sname varchar(5) NOT NULL, -- sname 不为空 department varchar(32), birthday date);很简单吧我们已经将 sname 这个字段(列)在创建时添加了非空约束如果 sname 在插入时为NULL 则会报错 Column sname cannot be null如果表已经创建好了怎么办呢创建表完后添加非空约束ALTER TABLE students MODIFY sname VARCHAR(5) NOT NULL;删除 sname 的非空约束ALTER TABLE students MODIFY sname VARCHAR(5);(3) 唯一约束 唯一约束就是指定这个字段(列)的值必须是唯一的这种感觉就类似主键例如我们下面要求创建表的时候指定 sname 不能重名CREATE TABLE students ( sid INT(8) PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(5) NOT NULL UNIQUE, -- sname唯一 department VARCHAR(32), birthday date);如果添加两条重名的记录就会报错INSERT INTO students VALUES (NULL,张三,计算机系,2020-06-16);INSERT INTO students VALUES (NULL,张三,工商管理系,2019-06-16);错误信息Duplicate entry 张三 for key sname同样如果已经创建表后又该怎么设置或者删除唯一约束呢在创建表后添加唯一约束ALTER TABLE students MODIFY sname VARCHAR(8) UNIQUE;删除唯一约束(本质上就是删除索引)ALTER TABLE students DROP INDEX sname;-- 这两种方法都是可以的drop index sname on students;(4) 外键约束 A概念理解外键的理论定义是比较复杂的我在以前公众号写过的一篇数据库理论文章中有提及过但是这一篇我们重点讲解 MySQL 的使用所以我们把理论都换成例子和通俗的大白话先来看个问题学生实体和课程实体分别用关系“学生”和“课程”来表示它们之间的联系用关系“选课”来表示学生(学号姓名所在系生日)课程(课程编号课程名授课老师)选课(学号课程编号成绩)问题判断各关系的候选键、主键、外键答学生中(students) 学号可以确认唯一的学生是候选键可做主键姓名需要在不重名的情况下也可以但是实际情况不能保证没有重名不合适课程中(course) 课程编号可以确认唯一的课程是候选键可做主键而选课中(sc_relation)需要由学号和课程编号共同才能确定唯一的值所以两者共同构成候选键并做主键选课关系中的 学号(sc_relation.sid) 和 课程号(sc_relation.cid) 分别代表选课关系的外键他们分别对应 学生关系的学号(students.sid) 和 课程关系的课程号(course.sid)(不一定要同名但是为了好理解一般写成同名)模拟了几张简单的表给大家直观的理解说明第一张为 学生表 students 第二张为 课程表 course第三张为 选课表 sc_relation看完这个例子是不是从理解上感觉清晰了很多那么接下来我们就实际操作一下C基本格式CREATE TABLE 表名( .... CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称));-- 创建表之后删除外键ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;-- 创建表之后添加外键ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);B具体操作我们下面就按照这张图的规划来做创建学生表 students学号 sid 为主键CREATE TABLE students ( sid INT(8) PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(5) NOT NULL UNIQUE, department VARCHAR(32), birthday date);创建课程表 course课程号 cid 为主键CREATE TABLE course ( cid INT(8) PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(5), teacher VARCHAR(32));创建选课关系表sc_sid、sc_cid 分别为外键指向学生表中的学号 sid 和 课程表中的课程号 cidCREATE TABLE sc_relation ( sid INT(8), cid INT(8), cscore VARCHAR(5), CONSTRAINT sc_sid FOREIGN KEY (sid) REFERENCES students(sid), CONSTRAINT sc_cid FOREIGN KEY (cid) REFERENCES course(cid));随便提供一些数据方便大家测试-- 插入学生数据INSERT INTO students VALUES (1001, 王五, 工商管理系, 2020-06-16);INSERT INTO students VALUES (1002, 汤姆, 音乐与舞蹈系, 2020-06-16);INSERT INTO students VALUES (1003, 杰克, 美术系, 2020-06-16);-- 插入课程数据INSERT INTO course VALUES (1, 大学英语, 老师1);INSERT INTO course VALUES (2, 大学物理, 老师2);INSERT INTO course VALUES (3, 数据库, 老师3);INSERT INTO course VALUES (4, 操作系统, 老师4);INSERT INTO course VALUES (5, 高等数学, 老师5);-- 插入选课数据INSERT INTO sc_relation VALUES (1001, 2, 88);INSERT INTO sc_relation VALUES (1001, 3, 92);INSERT INTO sc_relation VALUES (1001, 4, 78);INSERT INTO sc_relation VALUES (1001, 5, 83);INSERT INTO sc_relation VALUES (1002, 1, 77);INSERT INTO sc_relation VALUES (1002, 2, 90);INSERT INTO sc_relation VALUES (1002, 5, 89);INSERT INTO sc_relation VALUES (1003, 1, 86);INSERT INTO sc_relation VALUES (1003, 6, 88);INSERT INTO sc_relation VALUES (1003, 6, 82);有什么用呢这个时候学生表以及课程表就同选课表之间形成了关系可视化软件编辑插入的时候就会默认的给出一些可插入的选择这是软件基于你设置的外键关系而自动寻找的创建表后又怎么操作呢创建表之后删除外键ALTER TABLE sc_relation DROP FOREIGN KEY sc_sid;创建表之后添加外键ALTER TABLE sc_relation ADD CONSTRAINT sc_sid FOREIGN KEY (sid) REFERENCES students(sid)C级联操作如果在上述选课表中已经存储着 关于学号为 1001 学生的相关选课信息如果这个时候在学生表中修改或者删除这条记录就会直接报错Cannot add or update a child row: a foreign key constraint fails (mysql_grammar_test.sc_relation, CONSTRAINT sc_sid FOREIGN KEY (sid) REFERENCES students (sid))所以我们使用级联操作就可以达到同时更新或者删除多张表内的相关数据先给出基本格式ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;A级联更新ON UPDATE CASCADEB级联删除ON DELETE CASCADE例如测试一下ALTER TABLE sc_relation ADD CONSTRAINT sc_sid FOREIGN KEY (sid) REFERENCES students(sid) ON UPDATE CASCADE ON DELETE CASCADE;之前不能操作的内容现在已经可以了例如我们在学生表中将 1001学号修改为 1008 这样选课表中相关的内容就会自动根据修改变化了哈结尾邮箱ideal_bwh163.com如果能帮到你的话那就来关注我吧如果您更喜欢微信文章的阅读方式可以关注我的公众号如果您更加喜欢PC端的阅读方式可以访问我的个人博客域名www.ideal-20.cn在这里的我们素不相识却都在为了自己的梦而努力 ❤一个坚持推送原创开发技术文章的公众号理想二旬不止