- 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 - 选择进入
- SQL - 插入选择
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果进行排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL-Where 子句
- SQL - 顶部子句
- SQL - 不同子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL-Having 子句
- SQL - 与与或
- SQL - 布尔(位)运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY、ALL 运算符
- SQL - EXISTS 运算符
- SQL-案例
- SQL - NOT 运算符
- SQL - 不等于
- SQL - 为空
- SQL - 不为空
- SQL - 非空
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - 相交运算符
- SQL - EXCEPT 运算符
- 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 - 非聚集索引
- 高级SQL
- SQL - 通配符
- SQL - 注释
- SQL-注入
- SQL-托管
- SQL - 最小值和最大值
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL-存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL-自动递增
- SQL - 日期和时间
- SQL-游标
- SQL - 公用表表达式
- SQL - 分组依据与排序依据
- 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 列上同时定义主键时,将创建复合键。看下面的查询 -
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 语句生成一条错误消息,指出“重复条目”,如下所示 -
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 列中插入重复值。
让我们将具有相同 ID 和 NAME 的两条记录插入 CUSTOMERS 表中 -
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 25, 'Delhi', 1500.00 ), (1, 'Ramesh', 23, 'Kota', 2000.00 );
如果您检索 CUSTOMERS 表的内容,您可以找到具有相同 ID 和 NAME 的记录:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
1 | 拉梅什 | 25 | 德里 | 1500.00 |
1 | 拉梅什 | 23 | 科塔 | 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 和名称 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
1 | 拉梅什 | 25 | 德里 | 1500.00 |
1 | 拉梅什 | 23 | 科塔 | 2000.00 |