一、主键约束简单来说就是在创建表的时候在字段类型后面添加primary key这个词组。注意1.一个表只能有一个主键但可以是多个字段一起组成主键那就是复合主键单值主键与复合主键的区别单值主键的话是作为主键的字段前面插入的数据与要插入的数据是一定不重复的重复就会报错复合主键的话是作为主键的字段一起不与前面插入的数据重合才能创建也就是说比如 我 一个表中有id和num这两个字段作为主键比如里面有 id:100,num:15,那我后面插入的数据可以是id:100,num:20,或id:30,num:15,只有id:100,num:15这种情况才会报错它的使用场景可以是学生选课同一名学生可以选不同的课相同的课也可以是不同的学生选。SQL语句对上述的概念的实操create table tt13 ( id int unsigned primary key comment 学号不能为空, name varchar(20) not null)这是单值主键的创建表如果创建表时没有创建主键可以追加主键alter table 表名 add primary key(‘字段名’)也可以删除主键alter table 表名 drop primart key这是复合主键的创建表比如学生选课create table pick_course( student_id int unsigned comment 这是学生的学号 course_name varchar(10), student_name varchar(20) not null primary key(student_id,course_name) ; 这样就达到了插入数据时相同学生只能选不同学科相同的学科可以被不同的学生选。二、唯一键约束唯一键的作用跟主键的效果是一样的加了这个约束的字段不能出现相同的数据与主键的区别就是它插入数据时可以允许插入空数据我想很多人都会有跟我刚学的疑问既然与主键效果一样那为什么不都用主键呢我举个例子你就懂了比如在员工表中有这个公司给的每个人的工号还有身份证号名字。我们知道每个人的工号是不同的身份证号也不同名字可能同名这种情况就要有约束了如是两个都是主键的话就意味着相同工号的人可以插入不同的身份证号相同的身份证号可以是不同工号的人这个在实际生活中不是不符合实际的吧所以两个都为主键就达不到一个工号对应一个身份证号了所以就要唯一键的到来如果把工号作为主键身份证号作为唯一键那就可以完成一个工号对应一个身份证号了为了理解也可以认为这样的操作时多个单值主键使得单个字段的唯一性确定更强了注意一个表中能有多个唯一键只要在每个字段创建的过程中加上 unique key就行SQL语句的实操就拿我上面那个例子写create table employee(employee_id int unsigned primary keykey可以省略,employee_name varchar(20) not null,employee_card_id int unsignedunique key);在创表后添加唯一键alter table ‘表名’ add unique (‘字段名’)可以多个字段一起删除唯一键alter table ‘表名’ drop index ‘字段名’三、外键约束概念简单来讲就是两个或两个以上的表之间存在联系这个联系的纽扣就需要外键来当媒介约束两张表间即存在联系又不互相矛盾外键是什么就是一个表中的一个字段去联系另外一个字段的主键或唯一键通过这个字段能快速找到与当前表有关系的的数据。我们把拥有外键的表叫做从表外键联系的那张表叫主表举个例子:比如两张表一张为学生表有id和name一张为成绩表有id和各个科目的成绩可以看出成绩表的id对应学生表的id所以成绩表可以做学生表的从表也就是说id就是外键外键的好处如上面例子如果我们要改某个学生的名字就只要学生表里改成绩表不用动。如果学生姓名插入成绩表的话就是相当于一张表表示如果改名字的话各个科目的名字都要改就很重复效率低。所以能看出有了主从表的关系后修改数据就很方便就只要改从表或主表的任意一个表的数据就能有正确的数据表达SQL语句的实操就拿上面的例子学生表create table student(student_id int unsigned primary key comment ‘学生学号’,student_name varchar(20) not null comment ‘学生姓名’);成绩表create table student_score(student_id int unsigned,chinese_score double unsigned not null default 0,math_score double unsigned not null default 0,foreign key(student_id) references student(主表名)(student_id));注意如果你要删除主表的某个字段的话如果这个字段的数据还存在于从表插入的数据就删不了。就是比如上面例子我想删除student里的student_id的话要保证成绩表约束的外键student_id没有插入数据才能删还有在从表插入数据时作为外键的字段插入的数据要在主表中存在才能插入比如 学生id只有1001如果的成绩表插入1002的成绩时就会报错也就是说从表的作为外键的字段只能存在主表主键或唯一键已存在的数据
MySQL基础操作——约束(下)
发布时间:2026/5/27 3:26:07
一、主键约束简单来说就是在创建表的时候在字段类型后面添加primary key这个词组。注意1.一个表只能有一个主键但可以是多个字段一起组成主键那就是复合主键单值主键与复合主键的区别单值主键的话是作为主键的字段前面插入的数据与要插入的数据是一定不重复的重复就会报错复合主键的话是作为主键的字段一起不与前面插入的数据重合才能创建也就是说比如 我 一个表中有id和num这两个字段作为主键比如里面有 id:100,num:15,那我后面插入的数据可以是id:100,num:20,或id:30,num:15,只有id:100,num:15这种情况才会报错它的使用场景可以是学生选课同一名学生可以选不同的课相同的课也可以是不同的学生选。SQL语句对上述的概念的实操create table tt13 ( id int unsigned primary key comment 学号不能为空, name varchar(20) not null)这是单值主键的创建表如果创建表时没有创建主键可以追加主键alter table 表名 add primary key(‘字段名’)也可以删除主键alter table 表名 drop primart key这是复合主键的创建表比如学生选课create table pick_course( student_id int unsigned comment 这是学生的学号 course_name varchar(10), student_name varchar(20) not null primary key(student_id,course_name) ; 这样就达到了插入数据时相同学生只能选不同学科相同的学科可以被不同的学生选。二、唯一键约束唯一键的作用跟主键的效果是一样的加了这个约束的字段不能出现相同的数据与主键的区别就是它插入数据时可以允许插入空数据我想很多人都会有跟我刚学的疑问既然与主键效果一样那为什么不都用主键呢我举个例子你就懂了比如在员工表中有这个公司给的每个人的工号还有身份证号名字。我们知道每个人的工号是不同的身份证号也不同名字可能同名这种情况就要有约束了如是两个都是主键的话就意味着相同工号的人可以插入不同的身份证号相同的身份证号可以是不同工号的人这个在实际生活中不是不符合实际的吧所以两个都为主键就达不到一个工号对应一个身份证号了所以就要唯一键的到来如果把工号作为主键身份证号作为唯一键那就可以完成一个工号对应一个身份证号了为了理解也可以认为这样的操作时多个单值主键使得单个字段的唯一性确定更强了注意一个表中能有多个唯一键只要在每个字段创建的过程中加上 unique key就行SQL语句的实操就拿我上面那个例子写create table employee(employee_id int unsigned primary keykey可以省略,employee_name varchar(20) not null,employee_card_id int unsignedunique key);在创表后添加唯一键alter table ‘表名’ add unique (‘字段名’)可以多个字段一起删除唯一键alter table ‘表名’ drop index ‘字段名’三、外键约束概念简单来讲就是两个或两个以上的表之间存在联系这个联系的纽扣就需要外键来当媒介约束两张表间即存在联系又不互相矛盾外键是什么就是一个表中的一个字段去联系另外一个字段的主键或唯一键通过这个字段能快速找到与当前表有关系的的数据。我们把拥有外键的表叫做从表外键联系的那张表叫主表举个例子:比如两张表一张为学生表有id和name一张为成绩表有id和各个科目的成绩可以看出成绩表的id对应学生表的id所以成绩表可以做学生表的从表也就是说id就是外键外键的好处如上面例子如果我们要改某个学生的名字就只要学生表里改成绩表不用动。如果学生姓名插入成绩表的话就是相当于一张表表示如果改名字的话各个科目的名字都要改就很重复效率低。所以能看出有了主从表的关系后修改数据就很方便就只要改从表或主表的任意一个表的数据就能有正确的数据表达SQL语句的实操就拿上面的例子学生表create table student(student_id int unsigned primary key comment ‘学生学号’,student_name varchar(20) not null comment ‘学生姓名’);成绩表create table student_score(student_id int unsigned,chinese_score double unsigned not null default 0,math_score double unsigned not null default 0,foreign key(student_id) references student(主表名)(student_id));注意如果你要删除主表的某个字段的话如果这个字段的数据还存在于从表插入的数据就删不了。就是比如上面例子我想删除student里的student_id的话要保证成绩表约束的外键student_id没有插入数据才能删还有在从表插入数据时作为外键的字段插入的数据要在主表中存在才能插入比如 学生id只有1001如果的成绩表插入1002的成绩时就会报错也就是说从表的作为外键的字段只能存在主表主键或唯一键已存在的数据