当前位置: 首页 > news >正文

MySql数据库约束

概述、目的

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性、有效性和完整性。

分类:

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY
自动增加默认情况下,该字段的值是从1开始自增的AUTO_ INCREMENT
检查约束(8.0.16版本之后)保证字段值满足某一个条件CHECK

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

主键约束

字段名 数据类型 primary key;--基本语法
#第一种方式
CREATE TABLE student(id int primary key,name varchar(50)
);
--方式二
CREATE TABLE student(id int,name varchar(50),primary key(id)
);
--联合主键
CREATE TABLE student(classid int,studentid int,name varchar(50),primary key(classid,studentid)
);

约束演示

上面我们介绍了数据库中常见的约束,以及约束涉及到的关键字,那这些约束我们到底如何在创建表、修改表的时候来指定呢,接下来我们就通过一个案例,来演示一下。

案例需求: 根据需求,完成表结构的创建。需求如下:
在这里插入图片描述
对应的建表语句为:

CREATE TABLE tb_user(id int AUTO_INCREMENT PRIMARY KEY COMMENT 'ID唯一标识',name varchar(10) NOT NULL UNIQUE COMMENT '姓名' ,age int check (age > 0 && age <= 120) COMMENT '年龄' ,status char(1) default '1' COMMENT '状态',gender char(1) COMMENT '性别'
);

在为字段添加约束时,我们只需要在字段之后加上约束的关键字即可,需要关注其语法。我们执行上面的SQL把表结构创建完成,然后接下来,就可以通过一组数据进行测试,从而验证一下,约束是否可以生效。

insert into tb_user(name,age,status,gender) values ('Tom1',19,'1','男'),
('Tom2',25,'0','男');
insert into tb_user(name,age,status,gender) values ('Tom3',19,'1','男');
insert into tb_user(name,age,status,gender) values (null,19,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom3',19,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom4',80,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom5',-1,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom5',121,'1','男');
insert into tb_user(name,age,gender) values ('Tom5',120,'男');

在这里插入图片描述
上面,我们是通过编写SQL语句的形式来完成约束的指定,那加入我们是通过图形化界面来创建表结构时,又该如何来指定约束呢? 只需要在创建表的时候,根据我们的需要选择对应的约束即可。
在这里插入图片描述

外键约束

外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

--方式一
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);
ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);

外键名常用命名方式:

fk_从表名_从表外键字段

外键

外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约 束。外键用于建立和加强两个表数据之间的连接。为了更好地理解外键的定义及其作用,我们来看如下两张表:

CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,gender VARCHAR(10) DEFAULT '男'
);
CREATE TABLE score(scoreid INT PRIMARY KEY,studentid INT , scoreresult INT
);

score表中的studentid学生编号表示成绩是属于哪个学生,该值必须是student表中id列里的值。这种情况下:学生表student被称为主表,分数表score被称为从表。所以,我们可利用外键FOREIGN KEY将score中的studentid与student表中id建立起联系;代码如下:

CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,gender VARCHAR(10) DEFAULT '男'
);
CREATE TABLE score(scoreid INT PRIMARY KEY,studentid INT , scoreresult INT,CONSTRAINT fk_score_studentid FOREIGN KEY (studentid) REFERENCES student(id)
);

当然,也可利用SQL语句设置外键,代码如下:

ALTER TABLE score ADD CONSTRAINT fk_score_studentid FOREIGN KEY(studentid) REFERENCES student(id);

现在,我们再来执行:

show create table score;

数据一致性

大家知道:建立外键是为了保证数据的完整和统一性。但是,如果主表中的数据被删除或修改从表中对应的数据该怎么办呢?很明显,从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。

删除外键

alter table 从表名 drop foreign key 外键名;

外键约束小结

  • 从表里的外键通常为主表的主键
  • 从表里外键的数据类型必须与主表中主键的数据类型一致
  • 主表发生变化时应注意主表与从表的数据一致性问题
http://www.lryc.cn/news/7858.html

相关文章:

  • TripleCross:一款功能强大的Linux eBPF安全研究工具
  • 2023最牛教程,手把手教你成为年薪30W的测试开发
  • “深度学习”学习日记。--ImageNet、VGG、ResNet
  • 关于APP下载量提升的技巧
  • 以“大数据”赋能产业链精准招商
  • 内存泄漏检测组件 -- hook
  • Diffusion model(三): 公式结论
  • Angular笔记(二)组件
  • 微信小程序|基于小程序+C#制作一个超酷的个人简历
  • 华为OD机试 - 最快到达医院的方法(Java JS Python)
  • 92.【SpringCloud NetFilx】
  • [ahk]如何载入Scite的会话Session文件
  • MyISAM和InnoDb的区别
  • K8s管理应用生命周期-Deployment篇
  • 类和对象(下)(二)
  • MapBox-draw绘制插件的使用教程(含修改样式和方法封装)
  • 使用 ONLYOFFICE 转换 API 构建在线文档转换器
  • Kubernetes的负载均衡方案:MetalLB
  • 【项目】Vue3+TS CMS 基本搭建相关配置
  • ros2 dds
  • chain33架构介绍
  • Lucene学习笔记
  • 动态规划【Day01】| 669 · 换硬币、114 · 不同的路径、116 · 跳跃游戏
  • 1.Hello Python
  • C语言实例|编写C程序在控制台打印余弦曲线
  • 《Hadoop篇》------大数据及Hadoop入门
  • TCP核心机制详解(三)
  • 最易上手的爬虫请求库:Requests核心功能速览(下)
  • 生产故障|Kafka ISR频繁伸缩引发性能急剧下降
  • c++终极螺旋丸:₍˄·͈༝·͈˄*₎◞ ̑̑“类与对象的结束“是结束也是开始