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 @   kaizenly  阅读(6880)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
打赏

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示