【1】主键 spa
主键(PRIMARY KEY),也称“主键约束”。code
MySQL主键约束是一个列或者多个列的组合,其值能惟一地标识表中的每一行。blog
这样的一列或多列称为表的主键,经过它能够强制表的实体完整性。索引
【2】选取设置主键约束的字段 ip
主键约束即在表中定义一个主键来惟一肯定表中每一行数据的标识符。 class
主键能够是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。循环
【3】主键规则 im
(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.
顺序 选择 循环 总结