- 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 的复合主键是在表中两个或多个列上定义的键,用于唯一标识任何记录。它也可以被描述为主键在多个列上创建。
在数据库表中没有单个列可以唯一标识表中每一行的场景下,复合键是必要的。在这种情况下,我们可能需要使用列的组合来确保表中的每个记录都是不同的和可识别的。
让我们用一个例子来理解复合键。假设我们有一个名为 CUSTOMERS 的表,其中包含各种字段,如 ID、NAME、AGE、AADHAAR_ID、MOBILE_NO 和 SALARY,如下所示:
我们可以选择 AADHAAR_ID 和 MOBILE_NO 两个列,并在它们上面定义一个复合键,它可以用来唯一地获取 CUSTOMERS 表的记录。
复合键的特征
以下是 SQL 复合键的一些重要特征:
- 可以通过组合多个候选键来创建复合键。
- 构成复合键的每个候选键(或列)可以是也可以不是外键。但是,如果复合键的所有列本身都是外键,则该复合键称为组合键。
- 复合键不能为 NULL;即复合键的任何列都不能包含 NULL 值。
- 构成复合键的各个列可以包含重复值,但是这些列的组合在整个数据库表中必须是唯一的。
语法
以下是创建表时创建 SQL 复合键的语法:
CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, CONSTRAINT composite_key_name, PRIMARY KEY(column_name) );
这里,composite_key_name 是可选占位符,它保存表中复合键的名称。它用于在某些数据库中从表中删除约束时使用。
示例
在以下示例中,我们正在创建一个名为 CUSTOMERS 的表,其中包含多个列。当在 ID 和 NAME 列上一起定义 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), CONSTRAINT ck_customers PRIMARY KEY (ID, NAME) );
其中,ck_customers 是该表的复合键的名称。
输出
以下是上述语句的输出:
Query OK, 0 rows affected (0.02 sec)
验证
由于我们在 CUSTOMERS 表的 ID 和 NAME 列上创建了一个复合键,因此这些列中值的组合不能重复。为了验证它,让我们在 CUSTOMERS 表中插入两条具有相同值的记录:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (1, 'Ramesh', 25, 'Delhi', 1500.00 );
您可以观察到第二个 INSERT 语句生成一条错误消息,提示“Duplicate entry”(重复条目),如下所示:
ERROR 1062 (23000): Duplicate entry '1-Ramesh' for key 'customers.PRIMARY'
在 MySQL 中删除复合主键
您可以使用ALTER TABLE... DROP 语句从 MySQL 数据库中的表中删除复合键。
语法
以下是 MySQL 中删除复合键的语法:
ALTER TABLE table_name DROP PRIMARY KEY;
示例
使用以下 SQL 语句,我们可以从 CUSTOMERS 表中删除复合键约束:
ALTER TABLE CUSTOMERS DROP PRIMARY KEY;
输出
上述 SQL 语句产生以下输出:
Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0
验证
由于我们已从 CUSTOMERS 表中删除了复合键,因此现在您可以在 ID 和 NAME 列中插入重复值。
让我们在 CUSTOMERS 表中插入两条具有相同 ID 和 NAME 的记录:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 25, 'Delhi', 1500.00 ), (1, 'Ramesh', 23, 'Kota', 2000.00 );
如果您检索 CUSTOMERS 表的内容,您可以找到具有相同 ID 和 NAME 的记录,如下所示:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
1 | Ramesh | 25 | Delhi | 1500.00 |
1 | Ramesh | 23 | Kota | 2000.00 |
在 SQL Server 中删除复合主键
在 SQL Server 中,我们有不同的语法来删除表的复合键。语法几乎相同,但我们只需要指定复合键名称才能删除它,而不是关键字 PRIMARY KEY。
语法
以下是 SQL Server 中删除复合键的语法:
ALTER TABLE table_name DROP composite_key_name;
示例
假设在 CUSTOMERS 表的 ID 和 NAME 列上创建了一个复合键“ck_customers”,我们将使用以下查询来删除它:
ALTER TABLE CUSTOMERS DROP ck_customers;
输出
当我们执行上述查询时,复合键将被删除。
Commands completed successfully.
验证
要验证我们是否已从 CUSTOMERS 表中删除了复合键,请使用以下查询在 ID 和 NAME 列中插入重复值:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 25, 'Delhi', 1500.00 ), (1, 'Ramesh', 23, 'Kota', 2000.00 );
正如我们在下表中看到的,这两个客户都具有相同的 ID 和 NAME:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
1 | Ramesh | 25 | Delhi | 1500.00 |
1 | Ramesh | 23 | Kota | 2000.00 |