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: 图形化操作

image-20230505151431421

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;
-- 再插入,自增顺序是不会回退,继续递增

image-20230505152517711

1.4 唯一约束

唯一(unique)约束,设置了唯一约束的列,的值不能重复

-- ================= 唯一自增 =================
create table tb_d (
 id int,
 name varchar(20) unique -- 唯一约束
);
-- 插入name列,重复值会报错
insert into tb_d (id,name) values (1,"d");
​
-- 唯一约束也是唯一索引(索引,数据库高级知识常用于优化sql,提高查询速度)

image-20240320100513080

1.5 非空约束

非空(not 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)
​

image-20230808100218641

1.6 默认值

默认值(default),给列设置默认值约束后,如果该列在插入数据时没有给值,就自动赋值默认值

-- ================= 默认值 =================
create table tb_f(
 id int,
 sex char(1) default "男" -- 默认值
);
-- 插入数据,不指定性别,填充默认值
insert into tb_f (id) value (1)

image-20230505160616175

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;

image-20230505165521214

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值