- 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主键是唯一标识数据库表中每条记录的列(或列的组合)。主键还可以加快数据访问速度并用于建立表之间的关系。
尽管一张表只能有一个主键,但它可以在一个或多个字段上定义。当在表的多个字段上创建主键时,它称为复合键。
假设您正在开发一个名为“客户管理系统”的应用程序来处理会员度假村的所有客户数据。这些数据可以包括他们的个人详细信息、分配的会员 ID、他们选择的会员资格的其他详细信息等。并且在此数据库中创建的所有表中,会员 ID 用于区分客户。因此,该字段将成为主键。
下图是保存客户个人详细信息的 CUSTOMERS 表的图表。正如我们所观察到的,主键是在 CUST_ID 列上定义的。使用这个主键,我们可以检索任何客户的唯一记录。
需要记住的要点
以下是主键的一些要点 -
它仅包含唯一值。
它不能为空。
一张表只能有一个主键。
主键长度不能超过 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 语句将 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 | 考希克 | 23 | 科塔 | 2000.00 |
3 | 柴塔利 | 25 | 孟买 | 6500.00 |
3 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
3 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
3 | 莫菲 | 24 | 印多尔 | 10000.00 |