MySQL数据完整性约束:主键、唯一、非空与外键详解
版权申诉
49 浏览量
更新于2024-09-11
1
收藏 64KB PDF 举报
本文主要介绍了MySQL数据库中四种重要的约束类型:主键约束、唯一约束、非空约束和外键约束,以及如何在创建和修改表结构时应用这些约束。
1. 非空约束 (Not Null)
非空约束用于确保数据库表中的某个字段不允许存储NULL值,以保证数据的完整性。在创建表时,可以通过`NOT NULL`关键字来指定某字段为非空约束。例如:
```sql
CREATE TABLE stu (
id INT,
NAME VARCHAR(20) NOT NULL -- name字段为非空
);
```
如果需要在表创建后添加或移除非空约束,可以使用`ALTER TABLE`语句:
```sql
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL; -- 添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20); -- 移除非空约束
```
2. 唯一约束 (Unique)
唯一约束保证字段的每个值在表中都是唯一的,但允许出现NULL值。在创建表时,可以使用`UNIQUE`关键字来设置唯一约束:
```sql
CREATE TABLE stu (
id INT,
phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
);
```
若要删除唯一约束,可以使用`ALTER TABLE`配合`DROP INDEX`:
```sql
ALTER TABLE stu DROP INDEX phone_number; -- 删除唯一约束
```
在表创建后,可以使用`MODIFY`来添加唯一约束:
```sql
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
```
3. 主键约束 (Primary Key)
主键约束是同时具备唯一性和非空性的约束,它是表中记录的唯一标识。创建表时,使用`PRIMARY KEY`来指定主键:
```sql
CREATE TABLE stu (
id INT PRIMARY KEY, -- 给id添加主键约束
name VARCHAR(20)
);
```
删除主键约束需要使用`ALTER TABLE`和`DROP PRIMARY KEY`:
```sql
ALTER TABLE stu DROP PRIMARY KEY; -- 删除主键约束
```
若需在表创建后添加主键,可以修改字段定义:
```sql
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
```
4. 外键约束 (Foreign Key)
外键约束用于关联两个表,确保数据的一致性和参照完整性。它将一个表的字段与另一个表的主键关联。创建外键约束通常在创建表时进行,语法如下:
```sql
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
```
这里,`orders`表的`customer_id`字段引用了`customers`表的`customer_id`主键。若要在创建表后添加外键约束,需要先创建索引,然后添加外键:
```sql
ALTER TABLE orders ADD INDEX idx_customer_id (customer_id);
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
```
删除外键约束使用`ALTER TABLE`和`DROP FOREIGN KEY`:
```sql
ALTER TABLE orders DROP FOREIGN KEY fk_customer;
```
总结来说,这些约束在数据库设计中扮演着关键角色,它们帮助维护数据的准确性和一致性,是数据库管理系统的重要组成部分。正确使用这些约束能够提升数据库的性能和数据质量。
2018-09-13 上传
2023-07-27 上传
2023-06-01 上传
2023-12-05 上传
2023-07-09 上传
2023-05-01 上传
2023-07-09 上传
weixin_38718413
- 粉丝: 9
- 资源: 946
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦