MySQL数据完整性约束:主键、唯一、非空与外键详解
版权申诉
135 浏览量
更新于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 上传
2024-10-12 上传
2023-06-01 上传
2023-12-05 上传
2023-07-09 上传
2023-05-01 上传
weixin_38718413
- 粉丝: 9
- 资源: 945
最新资源
- 掌握JSON:开源项目解读与使用
- Ruby嵌入V8:在Ruby中直接运行JavaScript代码
- ThinkErcise: 20项大脑训练练习增强记忆与专注力
- 深入解析COVID-19疫情对HTML领域的影响
- 实时体育更新管理应用程序:livegame
- APPRADIO PRO:跨平台内容创作的CRX插件
- Spring Boot数据库集成与用户代理分析工具
- DNIF简易安装程序快速入门指南
- ActiveMQ AMQP客户端库版本1.8.1功能与测试
- 基于UVM 1.1的I2C Wishbone主设备实现指南
- Node.js + Express + MySQL项目教程:测试数据库连接
- tumbasUpk在线商店应用的UPK技术与汉港打码机结合
- 掌握可控金字塔分解与STSIM图像指标技术
- 浏览器插件:QR码与短链接即时转换工具
- Vercel部署GraphQL服务的实践指南
- 使用jsInclude动态加载JavaScript文件的方法与实践