MySql里面的 PRIMARY KEY 和 KEY 是啥关系?一个字段即可以是PRIMARY KEY 又可以是 KEY吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql里面的 PRIMARY KEY 和 KEY 是啥关系?一个字段即可以是PRIMARY KEY 又可以是 KEY吗?相关的知识,希望对你有一定的参考价值。
下面的例子中 CameraTypedesignation既是PRIMARY KEY,又是KEY,让人很费解;
---------------------------------------------------------
-- Table "camera_typedesignation_tab" DDL
CREATE TABLE `camera_typedesignation_tab` (
`CameraBrand` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '摄像头品牌',
`CameraTypedesignation` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '摄像头型号',
PRIMARY KEY (`CameraBrand`,`CameraTypedesignation`),
KEY `CameraTypedesignation` (`CameraTypedesignation`),
CONSTRAINT `camera_typedesignation_tab_ibfk_1` FOREIGN KEY (`CameraBrand`) REFERENCES `camera_brand_tab` (`CameraBrand`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
主键:唯一标识表中的所有行的一个列或一组列。主键不允许空值。不能存在具有相同的主键值的两个行,因此主键值总是唯一标识单个行。表中可以有不止一个键唯一标识行,每个键都称作候选键。只有一个候选键可以选作表的主键,所有其它候选键称作备用键。尽管表不要求具有主键,但定义主键是很好的做法。 在规范化的表中,每行中的所有数据值都完全依赖于主键。例如,在以 EmployeeID 作为主键的规范化的 employee 表中,所有列都应包含与某个特定职员相关的数据。该表不具有 DepartmentName 列,因为部门的名称依赖于部门 ID,而不是职员 ID。 外键:外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。 Create database cat go use cat go CREATE TABLE s(s# int not null primary key,s_name varchar(8) not null) go CREATE TABLE c (c# int not null primary key,c_name varchar(8) not null) go CREATE TABLE cs(c# int not null,s# int not null,cj tinyint not null default(0), primary key (c#,s#),foreign key(s#) references s(s#),foreign key(c#) references c(c#)) go insert s values(1,'saa') insert c values(1,'caa') --这句是对的 insert cs values(1,1,86) --这句是错的,sql会报错,应为s表的s#列里没有2 insert cs vlaues(2,1,45) 定义主键来强制不允许空值的指定列中输入值的唯一性。如果在数据库中为表定义了主键,则可将该表与其它表相关,从而减少冗余数据。表只能有一个主键。 外键。 当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。 例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。 FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。 主键是本表的唯一标识,而外键是与另一个表相关联
参考技术A
1
以上是关于MySql里面的 PRIMARY KEY 和 KEY 是啥关系?一个字段即可以是PRIMARY KEY 又可以是 KEY吗?的主要内容,如果未能解决你的问题,请参考以下文章
mysql语句添加索引
mysql 添加索引语句
MYSQL 的 primary key 和unique key 的区别
mysql中key和primary key的区别
MySQL中Key、Primary Key、Unique Key和Index的区别
MySQL - 创建表时一起使用“PRIMARY KEY”、“UNIQUE KEY”和“KEY”的含义