SQL 主键
SQL主键
SQL 主键 是一个列(或列的组合),它在数据库表中唯一标识每个记录。主键还加速数据访问,并用于建立表之间的关系。
即使一个表只能有一个主键,它可以在一个或多个字段上定义。当一个主键在一个表的多个字段上创建时,它被称为复合键。
假设您正在开发一个名为”客户管理系统”的应用程序,用于处理会员度假村的全部客户数据。这些数据可以包括他们的个人详细信息、分配的会员ID、他们选择的其他会员信息等。在此数据库中创建的所有表中,会员ID用于区分客户。因此,该字段将成为主键。
下面是一个包含客户个人详细信息的CUSTOMERS表的图表。我们可以看到,主键在CUST_ID列上定义。使用这个主键,我们可以检索任何客户的唯一记录。
要记住的要点
以下是PRIMARY KEY的一些关键要点:
- 它只包含一个唯一值。
-
它不能为空。
-
一个表只能有一个主键。
-
主键的长度不能超过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'
同样地,主键列不能包含空值。在这里,我们使用INSERT语句向主键列(ID)传递了一个空值(NULL)。
INSERT INTO CUSTOMERS VALUES (null, 'Komal', 22, 'MP', 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 | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
3 | Kaushik | 23 | Kota | 2000.00 |
3 | Chaitali | 25 | Mumbai | 6500.00 |
3 | Hardik | 27 | Bhopal | 8500.00 |
3 | Komal | 22 | Hyderabad | 4500.00 |
3 | Muffy | 24 | Indore | 10000.00 |