【mysql】主键的概念作用及特点
概念 :主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。作用:1)保证实体的完整性;2)加快数据库的操作速度3)在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。4) ACCESS自动按主键值的顺序
概念 :
主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字
。一个表只有一个主关键字
。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。
主键是单表的概念
作用:
1)保证实体的完整性;
2)加快数据库的操作速度
3)在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
特点:
1)一个表中只能有一个主键。如果在其他字段上建立主键,则原来的主键就会取消。在ACCESS中,虽然主键不是必需的,但最好为每个表都设置一个主键。
2)主键的值不可重复,也不可为空
(NULL)。
3)主键值不能被重用
提示:虽然并不总是需要主键,但是多数数据库设计者都会保证他们创建的每个表具有一个主键,以便以后的数据库的操作和管理。
主键&复合主键&联合主键
主键
我们一般常说的主键就是单字段主键
,我先看下主键的语法:
PRIMARY KEY [字段名]
复合主键
复合主键和联合主键一般是一个意思,就是指这个主键是由一张表中多个字段组成的,语法格式如下::
PRIMARY KEY [字段1,字段2,…,字段n]
比如,设置学生选课数据表时,使用学生编号做主键还是用课程编号做主键呢?如果用学生编号做主键,那么一个学生就只能选择一门课程。如果用课程编号做主键,那么一门课程只能有一个学生来选。显然,这两种情况都是不符合实际情况的。
实际上设计学生选课表,要限定的是一个学生只能选择同一课程一次。因此,学生编号和课程编号可以放在一起共同作为主键,这也就是联合主键了。
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`studentId` varchar(32) NOT NULL COMMENT '学号',
`studentName` varchar(32) NOT NULL COMMENT '姓名',
`studentGender` varchar(32) NOT NULL COMMENT '性别',
`studentAge` int DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`studentId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生信息表';
DROP TABLE IF EXISTS `student_course`;
CREATE TABLE `course` (
`courseId` varchar(32) NOT NULL COMMENT '课程id',
`courseName` varchar(32) NOT NULL COMMENT '课程名称',
`courseCredit` varchar(32) NOT NULL COMMENT '课程学分',
PRIMARY KEY (`courseId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='课程信息表';
DROP TABLE IF EXISTS `student_course`;
CREATE TABLE `student_course` (
`studentId` varchar(32) NOT NULL COMMENT '学号',
`courseId` varchar(32) NOT NULL COMMENT '课程id',
PRIMARY KEY (`studentId`,`courseId` )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生选课表';
有的文章把联合主键理解成2张表的关联,比如把选课表看成是学生表和课程表之间的关联,事实是不准确的,因为选课表就是一张表而已,语法也是单表的语法,不存在多表的主键语法(类似外键那样的多表间带约束的语法)
删除主键约束
当一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。
ALTER TABLE student DROP PRIMARY KEY;
由于主键约束在一个表中只能有一个,因此不需要指定主键名就可以删除一个表中的主键约束。
如果主键不存在或已经被删除,再次尝试删除会报错:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)