SQL 组合键
SQL组合键
一个 组合键 是在表中可以定义在两个或多个列上的键,用于唯一标识任何记录。也可以将其描述为在多个列上创建的主键。
在数据库表中没有单个列可以唯一标识每一行的情况下,需要使用组合键。在这种情况下,我们可能需要使用多个列的组合来确保表中的每个记录都是唯一和可识别的。
让我们通过一个例子来了解组合键。假设我们有一个名为CUSTOMERS的表,其中包含ID、名称、年龄、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语句生成了一个错误消息, “重复条目” 如下所示 –
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表中删除了composite,在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。
Syntax
以下是在SQL Server中删除复合键的语法 –
ALTER TABLE table_name DROP composite_key_name;
示例
假设在CUSTOMERS表的ID和NAME列上创建了一个复合键”ck_customers”,我们将使用以下查询来删除它:
ALTER TABLE table_name 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 | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
1 | Ramesh | 25 | Delhi | 1500.00 |
1 | Ramesh | 23 | Kota | 2000.00 |