目录
- MySQL约束
- 1.1 约束
- 1.1 数据类型
- 1.2 主键约束[`重要`]
- 1.3 自增约束
- 1.4 唯一约束
- 1.5 非空约束
- 1.6 默认值
- 代码演示
- 1.7 外键约束[了解]
- 思维导图
- 最后
MySQL约束
- MySQL作为广泛使用的开源关系型数据库管理系统,其强大的数据约束功能对于维护数据的一致性和准确性至关重要。
本文将深入探讨MySQL中的几种主要约束类型,以及如何在创建表时应用它们来确保数据的完整性。
1.1 约束
是什么? 约束,即限制,就是通过设置约束,可以限制对数据表数据的
插入,删除,更新
怎么做?
约束设置的语法,大部分是
create table 表名( 字段 数据类型(长度) 约束, 字段 数据类型(长度) 约束 );
另外一种是建表后,使用alter语句修改表添加约束
1.1 数据类型
其实数据类型也是一种约束,例如设置id列为int类型,那就不能乱给id设置字符串或者日期等数据
1.2 主键约束[重要
]
主键(
primary key
)约束非常重要,以后开发中基本上每张表都要有主键约束
,作用是设置了主键约束的列,有以下效果
- 不能为空
- 不能重复
一般主键是给id设置的
设置主键方式有四种:
- 在建表时给列直接指定
- 在建表语句的最后指定某一列是主键
- 给以建好的表修改设置主键
- 图形化操作
-- ============= 演示主键约束 =============
-- 方式1:建表时指定主键
create table tb_a(
id int primary key,-- 主键
name varchar(20)
)
-- 不插入主键会报错(主键不能为空)
insert into tb_a (name) value ("aaa");
-- 插入2遍也报错(主键不能重复)
insert into tb_a (id,name) value (1,"aaa");
-- 方式2:建表时指定主键(放在下面指定主键)
create table tb_b(
uid int,
oid int,
name varchar(20),
primary key(uid,oid) -- 一般用于联合主键
)
-- 联合主键是两个列都重复才算重复
-- 方式3: 建表后通过修改设置主键
alter table stu add primary key (sid);
-- 方式4: 图形化操作
1.3 自增约束
自增(
auto_increment
)约束,主要是配合主键
使用,防止主键为空,重复
-- ================= 主键自增 =================
create table tb_c(
id int primary key auto_increment,-- 主键自增
name varchar(20)
)
-- 插入时不插入主键,主键为自动赋值
-- 多插入几次,主键会自增
insert into tb_c (name) values ("cccc");
-- 删除一个
delete from tb_c where id = 4;
-- 再插入,自增顺序是不会回退,继续递增
1.4 唯一约束
- 定义:确保该列中的所有值都是唯一的,但允许有一个NULL值。
- 应用场景:用于需要唯一标识符但不作为主键的场景,如用户的电子邮件地址。
- 示例:
-- ================= 唯一自增 =================
create table tb_d (
id int,
name varchar(20) unique -- 唯一约束
);
-- 插入name列,重复值会报错
insert into tb_d (id,name) values (1,"d");
-- 唯一约束也是唯一索引(索引,数据库高级知识常用于优化sql,提高查询速度)
1.5 非空约束
- 定义:非空约束要求被标记的列不能包含NULL值。
- 应用场景:适用于那些必须有值的字段,如用户姓名、电子邮件地址等。
- 示例:
-- ================= 非空 =================
create table tb_e(
id int,
name varchar(20) not null -- 非空
);
-- 正常插入可以
insert into tb_e values (1,"eee")
-- 不插入name列,name为空会报错,因为约束为非空
insert into tb_e (id) values (2)
1.6 默认值
默认值(
default
),给列设置默认值约束后,如果该列在插入数据时没有给值,就自动赋值默认值
-- ================= 默认值 =================
create table tb_f(
id int,
sex char(1) default "男" -- 默认值
);
-- 插入数据,不指定性别,填充默认值
insert into tb_f (id) value (1)
代码演示
/*
设计表,添加约束
1.数据类型也属于一种约束
2.主键约束 primary key
设置主键的字段:
不能为空
不能重复
四种方式:
1建表时在字段(列)后面直接添加
2建表时在最后添加
3建表完成后,利用update设置
4利用软件图形化设置
3.自增约束 auto_increment
语法:字段(列)后设置
主要配合主键使用(防止主键为空,重复)
4.唯一约束 unique
语法:字段(列)后设置
作用:字段值不能重复,唯一性
5.非空约束 not null
语法:字段(列)后设置
作用:字段值不能为空
6.默认约束 default
语法:default 默认值
作用:没有主动设置字段值时,系统默认赋值默认值
*/
-- 创建学生表 student
create table student(
-- 设置主键约束,配合自增约束使用
sid int primary key auto_increment,
sname varchar(10),
-- 设置默认值
age int default 18
);
insert into student(sname) values ("王五");
insert into student(sname) values ("李四");
-- 建表时在最后添加主键
create table student2(
sid int,
oid int,
-- 设置唯一约束
sname varchar(10) unique,
sage int default 18,
-- 一般用于联合主键
primary key(sid,oid)
);
insert into student2(sname) values ("张三");
-- 插入相同名字
insert into student2(sname) values ("张三");
-- 错误代码:1364 Field 'sid' doesn't have a default value
1.7 外键约束[了解]
外键,是多表之间接的一种关联关系的一种限制.
语法
constraint 外键名 foreign key (当前表中的列名) references 表(主键);
设计订单表和商品表,订单表的数据要关联商品表数据
-- 商品表
create table tb_goods(
gid int primary key,
gname varchar(20),
descr varchar(20)
);
-- 订单表 (订单表关联了商品表)
create table tb_order(
oid int primary key,
order_time datetime,
gid int,
-- 设置外键
constraint fk_order_goods foreign key(gid) references tb_goods(gid)
);
/*
被引用的表称为父表 parent , tb_goods
引用别人的表称为子表 child , tb_order
*/
-- 给父表随便插入数据
insert into tb_goods values (2,'键盘','敲代码没有bug');
-- 给子表随便插入数据不行!! 这个数据得是父表中有的才行
insert into tb_order values (1,'2022-11-11',1);
-- 子表可以删除数据
delete from tb_order where oid = 1;
-- 父表被引用的数据不能删除
delete from tb_goods where gid = 2;
delete from tb_goods where gid = 1;
思维导图
最后
如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍