数据库03——MySQL中约束

本文详细介绍了MySQL中的各种数据表约束,包括主键约束、联合主键、自增约束、唯一约束、非空约束、默认约束及外键约束等,并提供了丰富的SQL示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统:win7 64位

接上一篇数据库02——MySQL中改密码、创建数据库数据表、数据记录的查增删改

1. 主键约束

能唯一确定一张表中的一条记录(行数据)。通过给某个字段(项名)添加约束就可以使得该字段不重复且不能为空。这样就能避免插入两个完全一样的记录。

create table user (id int primary key,name VARCHAR(20),age TINYINT);

在这里插入图片描述
尝试往里面插入一样的记录,就会出现如下的错误
在这里插入图片描述

2. 联合主键

只要联合的主键值加起来不重复就可以,要保证每一个主键值不为空

create table user2 (id int,name VARCHAR(20),age TINYINT,primary key(id,name));

在这里插入图片描述

3. 自增约束

create table user3 (id int primary key auto_increment,name VARCHAR(20),age TINYINT);
insert into user3 (name) VALUES ('xiao');//name下添加数据xiao

在这里插入图片描述
在这里插入图片描述
重复添加数据,主键值会从1开始逐渐增加

4. 添加主键

创建数据表时没有指定主键,后面又想加上

alter table user4 add primary key(id);
alter table user4 modify id int primary key;//使用modify修改字段,添加约束

在这里插入图片描述
在这里插入图片描述

5. 删除主键

alter table user4 drop primary key;

在这里插入图片描述

6. 唯一约束

约束的字段不可以重复,但是可以为空

//第一种方式
create table user5(id int,name VARCHAR(20),unique(name));

//第二种方式
create table user5(id int,name VARCHAR(20)unique);

//第三种方式
create table user5(id int,name VARCHAR(20),unique(id,name));//如果约束两个字段,以逗号分隔,不同时重复即可

//第四种方式
create table user5(id int,name VARCHAR(20));
alter table user5 add unique(name);

//第五种方式
create table user5(id int,name VARCHAR(20));
alter table user5 modify name VARCHAR(20) unique;

desc user5;

在这里插入图片描述
在这里插入图片描述

7. 删除唯一约束

alter table user5 drop index name;//name是唯一约束

在这里插入图片描述

8. 非空约束

约束的字段不能为空

create table user6(id int,name VARCHAR(20) not null);

在这里插入图片描述

9. 默认约束

当插入字段时,会有默认值,传了新值就不会使用默认值

create table user7(id int,name VARCHAR(20),age int default 20);

10. 外键约束

涉及到父表和子表/主表和副表

create table classes(id int primary key,name VARCHAR(20));//班级表
create table students(id int primary key,name VARCHAR(20),class_id int,foreign key(class_id) references classes(id));//学生表
//有三个班
insert into classes value(1,'class1');
insert into classes value(2,'class2');
insert into classes value(3,'class3');
//插入学生
insert into students value(1001,'Lily',1);
insert into students value(1002,'Ony',2);
insert into students value(1003,'Poy',3);

在这里插入图片描述
最后一个参数class_id是与classes表中的id绑定了的,所以
insert into students value(1004,‘xiao’,4);就会报错
在这里插入图片描述

主表(父表)中没有的数据值,在副表(子表)中是不可以使用的。
主表的记录被副表引用,是不能被删除的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值