MySQL之约束

本文详细解析了数据库中的主键约束、唯一性约束、非空约束和外键约束,包括单列和复合主键、字段不可重复、允许null值的规定,以及外键在维护表间数据一致性的应用。通过实例演示了如何在SQL中创建和操作这些约束。

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

1.主键约束

PRIMARY KEY:用于唯一的标识表中的每条记录。
被标识为主键的数据在表中是唯一的且其值不能为空。
字段默认添加索引。

单一主键:一个字段添加主键

create table student(
id int primary key,
name varchar(20)
);

或者

create table student2(
id int,
name varchar(20),
primary key(id)
);

在这里插入图片描述
复合主键:多个字段添加主键

create table student3(
id int,
name varchar(20),
primary key(id, name)
);

在这里插入图片描述
复合主键,单列主键字段可以重复,但组合在一起时必须唯一性

insert into student3 values(1,'yzm');
insert into student3 values(1,'yzm');
insert into student3 values(1,'yzm2');
insert into student3 values(2,'yzm');

在这里插入图片描述

2.唯一性约束

UNIQUE:约束的字段,具有唯一性,不可重复,但可以为null

create table student4(
id int,
name varchar(20) unique
);
create table student5(
id int,
name varchar(20),
unique(name)
);

在这里插入图片描述
多字段约束

create table student6(
id int,
name varchar(20),
email varchar(50),
unique(name,email)
);

约束命名

create table student7(
id int,
name varchar(20),
email varchar(50),
constraint uq_name_email unique(name,email)
);

在这里插入图片描述
约束的字段可以为null,但不能重复

insert into student7 values(0, null, null);
insert into student7 values(0, "yzm", "qq.com");

在这里插入图片描述

3.非空约束

NOT NULL:约束的字段不能为null值,必须给定具体的数据

create table student8(
id int,
name varchar(20) not null,
email varchar(50)
);
insert into student8(id, email) values(1, "qq.com");

在这里插入图片描述

4.默认值约束

DEFAULT:给约束的字段设置默认值,若插入数据时该字段没有赋值,那么系统会给该字段插入默认值

create table student9(
id int,
name varchar(20) default '默认值',
email varchar(50)
);
insert into student9(id, email) values(1, "qq.com");

在这里插入图片描述

5.外键约束

FOREIGN KEY:用来维护两个表之间数据一致性。

两张表:
class作为主表
student作为从表

CREATE TABLE class(
 cid int PRIMARY KEY,
 cname varchar(20)
);
DROP TABLE student;
CREATE TABLE student (
  sid int PRIMARY KEY,
  sname varchar(20),
  cno int,
  foreign key(cno) references class(cid)
);

在这里插入图片描述
给外键约束命名

DROP TABLE if exists student;
CREATE TABLE student (
  sid int PRIMARY KEY,
  sname varchar(20),
  cno int,
  constraint fk_student_class_cid foreign key(cno) references class(cid)
);

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

insert into class values(103, "一年三班"), (305, "三年五班");
insert into student values(1, "小明", 103), (2, "小强", 103), (3, "小王", 305);

在这里插入图片描述
查找学生所在班级名称

select s.sname, c.cname from student s left join class c on s.cno = c.cid;

在这里插入图片描述
注意:
1.创建:先主表再从表
2.插入:先主表再从表
3.删除:先从表再主表
4.修改:需要注意数据一致性
5.从表里的外键通常为主表的主键

6.约束追加、删除

追加主键约束

alter table student4 add PRIMARY KEY(id);

在这里插入图片描述
删除主键约束

alter table student4 drop PRIMARY KEY;

在这里插入图片描述
主键约束命名是无效的,主键名称永远是:PRIMARY KEY

alter table student4 add CONSTRAINT pk_id PRIMARY KEY(id);

在这里插入图片描述
删除唯一性约束

alter table student4 drop KEY name;

在这里插入图片描述
添加唯一性约束

alter table student4 add UNIQUE (name);

在这里插入图片描述
添加唯一性约束并命名

alter table student4 add UNIQUE uq_name(name);

在这里插入图片描述
删除外键约束

alter table student drop FOREIGN KEY fk_student_class_cid;

在这里插入图片描述
追加外键约束

alter table student add constraint fk_student_class_cid foreign key(cno) references class(cid);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值