Mysql 主键

【1】主键

主键(PRIMARY KEY),也称“主键约束”。

MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行。

这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

【2】选取设置主键约束的字段

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。

主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。

【3】主键规则

(1)每个表有且仅有一个主键。

如下示例:

(a)创建表

# 创建表
DROP TABLE IF EXISTS students;
CREATE TABLE `students` (
  `sId` INT(20) UNSIGNED NOT NULL,
  `sName` VARCHAR(100) NOT NULL,
  `sAge` INT(10) NOT NULL,
  `sAddr` VARCHAR(200) DEFAULT NULL,
  `sGrade` INT(10) DEFAULT NULL,
  `sStuId` VARCHAR(20) DEFAULT NULL,
  `sSex` INT(10) UNSIGNED DEFAULT NULL
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

执行,创建表成功。

(b)创建主键1

# 创建主键1
ALTER TABLE students ADD PRIMARY KEY (sId, sStuId);

执行,创建主键1成功。

(c)创建主键2

# 创建主键2
ALTER TABLE students ADD PRIMARY KEY (sId, sName);

执行,创建主键2失败,错误提示

查询:ALTER TABLE students ADD PRIMARY KEY (sId, sName)错误代码: 1068
Multiple primary key defined

(2)唯一性原则。主键值必须唯一地标识表中的每一行,且不能为NULL,即表中不可能存在两行数据有相同的主键值。

上一步,我们已经为表建立了主键,查询主键建立结果:

# 查询索引
SHOW INDEX FROM students;

查询主键结果:

现在,我们向表中添加数据1:

# 添加数据1
INSERT INTO students(sId, sNAME, sAge, sAddr, sGrade, sStuId, sSex)
VALUES (1, 'wangjun', 22, 'weinan', NULL, 6, 1)

如上,数据1添加成功。再添加数据2:

# 添加数据2
INSERT INTO students(sId, sNAME, sAge, sAddr, sGrade, sStuId, sSex)
VALUES (2, 'liujie', 20, 'xian', 8, NULL, 0)

执行失败,提示如下:

Column 'sStuId' cannot be null

说明:即使是复合主键,主键的所有列值均不能为NULL。

(3)一个列名只能在复合主键列表中出现一次。

删除上表的主键,重新创建主键,执行SQL如下:

# 删除主键
ALTER TABLE students DROP PRIMARY KEY;
# 创建主键sStuId
ALTER TABLE students ADD PRIMARY KEY (sId, sStuId, sStuId);

执行错误,错误提示:

查询:ALTER TABLE students ADD PRIMARY KEY (sId, sStuId, sStuId)错误代码: 1060
DUPLICATE COLUMN NAME 'sStuId'

如下,说明复合主键的列只能出现一次。

(4)最小化原则。复合主键不能包含不必要的多余列。即当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。

 

Good Good Study, Day Day Up.

顺序 选择 循环 总结

posted @ 2019-05-20 09:59  kaizenly  阅读(6876)  评论(0编辑  收藏  举报
打赏