- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL 查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查询
- SQL - 删除查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - Where 子句
- SQL - Top 子句
- SQL - Distinct 子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL - Having 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY,ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接与右连接
- SQL - Union 与 Join
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 复合键
- SQL - 备用键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - Min & Max
- SQL - Null 函数
- SQL - 检查约束
- SQL - 默认约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - Group By 与 Order By
- SQL - IN 与 EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - 主键
SQL 主键
SQL 的主键是用于唯一标识数据库表中每条记录的列(或列的组合)。主键还可以加快数据访问速度,并用于在表之间建立关系。
尽管一个表只能有一个主键,但它可以在一个或多个字段上定义。当在表的多个字段上创建主键时,称为复合键。
假设您正在开发一个名为“客户管理系统”的应用程序,用于处理仅限会员度假村的所有客户数据。这些数据可以包括他们的个人详细信息、分配的会员 ID、他们选择的会员资格的其他详细信息等。在该数据库中创建的所有表中,会员 ID 用于区分不同的客户。因此,此字段将成为主键。
以下是包含客户个人详细信息的 CUSTOMERS 表的图表。我们可以看到,主键是在 CUST_ID 列上定义的。使用此主键,我们可以检索任何客户的唯一记录。
要点
以下是 PRIMARY KEY 的一些要点:
它只包含唯一值。
它不能为 null。
一个表只能有一个主键。
主键长度不能超过 900 字节。
创建 SQL 主键
使用CREATE TABLE 语句创建表时,只需通过指定列名以及关键字“PRIMARY KEY”即可在表的特定列上添加主键约束。
语法
以下是将表的列定义为主键的语法:
CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY(column_name) );
示例
在以下示例中,我们尝试在 SQL 数据库中创建一个名为 CUSTOMERS 的表,其中包含各种字段。在创建表时,我们将在名为 ID 的列上添加约束“PRIMARY KEY”。
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
输出
以下是上述 SQL 语句的输出:
Query OK, 0 rows affected (0.03 sec)
验证
我们知道主键值必须唯一,因此您不能插入具有相同 ID 的记录。在这里,我们将通过插入具有重复 ID 值的记录来验证在 ID 列上创建的约束。
首先,让我们向 CUSTOMERS 表中插入一条记录:
INSERT INTO CUSTOMERS VALUES (3, 'Kaushik', 23, 'Kota', 2000.00);
现在,让我们再插入一条具有相同 ID 的记录:
INSERT INTO CUSTOMERS VALUES (3, 'Chaitali', 25, 'Mumbai', 6500.00);
如上所述,如果数据库表中的任何字段/列被定义为主键,则两条记录不能在该列/字段中具有相同的值。因此,第二个插入语句会生成以下错误:
ERROR 1062 (23000): Duplicate entry '3' for key 'customers.PRIMARY'
类似地,主键列不能包含 null 值。在这里,我们使用 INSERT 语句将 NULL 值传递给主键列 (ID)。
INSERT INTO CUSTOMERS VALUES (NULL, 'Komal', 22, 'Hyderabad', 4500.00);
此语句会生成以下错误:
ERROR 1048 (23000): Column 'ID' cannot be null
在现有列上创建主键
我们还可以使用ALTER TABLE语句在表的现有列上添加 PRIMARY KEY 约束。
语法
以下是创建现有列上的主键约束的语法:
ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY (column_name);
示例
在此示例中,我们在现有 CUSTOMERS 表的 NAME 列上添加 PRIMARY KEY 约束:
ALTER TABLE CUSTOMERS ADD CONSTRAINT PRIMARY KEY(NAME);
输出
以下是上述语句的输出:
Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
删除 SQL 主键
如果可以在表的列中添加主键约束,则也可以删除它。这是通过使用 ALTER TABLE... DROP 语句完成的。
语法
以下是 ALTER TABLE 语句的语法,可用于从表的列中删除主键约束:
ALTER TABLE table_name DROP PRIMARY KEY;
示例
让我们考虑 CUSTOMERS 表,我们已在名为 ID 的列上创建了主键约束。您可以通过执行以下语句从列 ID 中删除此约束:
ALTER TABLE CUSTOMERS DROP PRIMARY KEY;
输出
上述 SQL 查询产生以下输出:
Query OK, 1 row affected (0.03 sec) Records: 1 Duplicates: 0 Warnings: 0
验证
由于我们已从名为 ID 的列中删除了主键,因此我们可以插入多条具有相同 ID 的记录。以下语句插入四条具有相同 ID 的记录:
INSERT INTO CUSTOMERS VALUES (3, 'Chaitali', 25, 'Mumbai', 6500.00 ), (3, 'Hardik', 27, 'Bhopal', 8500.00 ), (3, 'Komal', 22, 'Hyderabad', 4500.00 ), (3, 'Muffy', 24, 'Indore', 10000.00 );
如果您验证此表的内容,则可以找到多条具有相同 ID 的记录:
SELECT * FROM CUSTOMERS;
表将显示为:
| ID | 姓名 | 年龄 | 地址 | 薪资 |
|---|---|---|---|---|
| 3 | Kaushik | 23 | Kota | 2000.00 |
| 3 | Chaitali | 25 | 孟买 | 6500.00 |
| 3 | Hardik | 27 | 博帕尔 | 8500.00 |
| 3 | Komal | 22 | 海德拉巴 | 4500.00 |
| 3 | Muffy | 24 | 因多尔 | 10000.00 |