MySQL数据库约束

目录

数据库约束

1.NULL约束

2.UNIQUE:唯一约束

3.DEFAULT:默认值约束

4.PRIMARY KEY:主键约束

5.FOREIGN KEY:外键约束


数据库约束

以下为本篇文章会介绍的约束

 (1)NOT NULL - 指示某列不能存储 NULL 值。  

(2)UNIQUE - 保证某列的每行必须有唯一的值。

(3)DEFAULT - 规定没有给列赋值时的默认值。
(4)PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
(5)FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
约束能够引入更多的检查操作,但也会增加系统的开销, 属于牺牲了执行效率,换来了开发效率。

1.NULL约束

创建表时,可以指定某列不为空:

设置学生表结构1-1
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT,name VARCHAR(20),qq_mail VARCHAR(20)
);
比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;
演示效果:
若想正常插入id不能为空

 


2.UNIQUE:唯一约束

设置学生表结构2-1

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT UNIQUE,name VARCHAR(20),qq_mail VARCHAR(20)
);

这里我们重新设置一下表结构,对sn进行约束为唯一约束

演示效果:

补充:

加上unique约束之后,当后续进行插入或修改操作时,系统都会进行查询,看看操作值是否存在。


3.DEFAULT:默认值约束

指定插入数据时,若列为空,则为默认值

设置学生表结构3-1

指定插入数据时, name 列为空,默认值 unkown
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);

演示:

4.PRIMARY KEY:主键约束

可以理解为:主键是 NOT NULL 和 UNIQUE 的结合

非空&唯一
注意:
  • 每个表只能定义一个主键。

  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

指定 id 列为主键:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
对于整数类型的主键,常配搭自增长 auto_increment 来使用。
插入数据对应字段不给值时, 数据库会按照自增的方式分配, 使用最大值+1。
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment 

(1)一般演示: 

 

 

(2)演示:
插入数据对应字段不给值时, 数据库会按照自增的方式分配, 使用最大值+1。
(3)此时你也可以手动加入符合条件的任意值。
(4)递增不重复利用之前的值

注意:

(1)自增的数据必须是整形。

(2)上述自增,只能在单个数据库中生效。如果数据库是由多个mysql服务器构成的集群,自增主键就会失效。


5.FOREIGN KEY:外键约束

外键用于关联其他表的主键或唯一键

语法如下:

foreign key (字段名) references 主表(列)

本表的某列引用另一个表的对应列,此时就要求,本表中个这个列的数据与另一个表的类型对应。

接下来我们设计一个案例如下:

  • 创建班级表classes,id为主键
    DROP TABLE IF EXISTS classes;
    CREATE TABLE classes (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR(20),
    desc1 VARCHAR(100)
    );
    

  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);
  • 必须为主表定义主键。

MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

简单理解:

班级表约束了学生表。我们把班级表这种约束别人的表称为父表,把学生表这种被约束的表称为子表。

演示:

(1)父表对字表的约束。外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

如果输入不存在的classes_id.

(2)外键为空值:

补充:字表对父表也有约束

如果尝试修改或删除父表的记录,也会先查看一下子表,看看这个结果是否在子表中被引用,如果被引用则无法删改。


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/175551.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝牙特征值示例1-迈金L308自行车尾灯夜骑智能表情尾灯的

了解商品级蓝牙特征值 1 服务器(设备)描述 0x02-01-06 05-03-0F180A18 09-FF-FFFF166B001C0101 0A-09-4C3330385F37393937 01设备标识 03服务UUID FF厂商自定义数据(厂家编号:FFFF-166B001C0101) 完整设备名称: L308-7997 2 服…

(论文阅读31/100)Stacked hourglass networks for human pose estimation

31.文献阅读笔记 简介 题目 Stacked hourglass networks for human pose estimation 作者 Alejandro Newell, Kaiyu Yang, and Jia Deng, ECCV, 2016. 原文链接 https://arxiv.org/pdf/1603.06937.pdf 关键词 Human Pose Estimation 研究问题 CNN运用于Human Pose E…

HelloWorld - 从Houdini导出HDA到UE5

1.配置插件 在Houdini安装目录下找到对应版本引擎的插件,例如这里是Houdini19对应UE5.2的版本,我们就要保证先下载好UE5.2: 将Houdini插件粘贴到UE安装目录的Plugins文件夹下: 目前插件配置完成,打开UE会自动启用插…

python数据处理作业11:建一个5*3的随机数组和一个3*2的数组,其元素为1,2,3,4,5,6,求两矩阵的积

每日小语 打碎的杯子,烫伤的手,对菩萨是堪忍,因为他在里面得悟甚深之法,心生欢喜。 可是对一般人来说,一生何止打破千百个杯子?何止烫伤过千百次手?他只是痛苦地忍受,只记得下次要…

FPGA UDP RGMII 千兆以太网(4)ARP ICMP UDP

1 以太网帧 1.1 1以太网帧格式 下图为以太网的帧格式: 前导码(Preamble):8 字节,连续 7 个 8’h55 加 1 个 8’hd5,表示一个帧的开始,用于双方 设备数据的同步。 目的 MAC 地址:6 字节,存放目的设备的物理地址,即 MAC 地址 源 MAC 地址:6 字节,存放发送端设备的…

Xilinx Kintex7中端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…

AK F.*ing leetcode 流浪计划之半平面求交

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 本期话题:半平面求交 背景知识 学习资料 视频讲解 https://www.bilibili.com/video/BV1jL411C7Ct/?spm_id_from333.1007.top_right_bar_window_history…

【万字长文】Python 日志记录器logging 百科全书 之 日志过滤

Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中,日志过滤器(Filter)用于提供更细粒度的日志控制。通过过滤器,我们可以决定哪些日志记录应该被输出,哪些应该被忽略。这对于复杂的应用…

c语言从入门到实战——基于指针的数组与指针数组

基于指针的数组与指针数组 前言1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 前言 指针的数组是指数组中的元素都是指针类型,它们指向某种数据类型的变量。 1. 数组名的理解 我们在使用指针…

ArkUI实战,深入浅出OpenHarmony应用开发

前言 | 《ArkUI实战》《ArkUI实战》深入浅出的介绍了OpenHarmony开发框架ArkUI组件的使用和应用开发流程,是OpenHarmony应用开发的必备电子书。https://www.arkui.club/ OpenHarmony开发资料归档__南先森-Laval社区OpenHarmony入门看这里 _南先森 Laval社区https:/…

DAY54 392.判断子序列 + 115.不同的子序列

392.判断子序列 题目要求:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是…

【开发工具】gitee还不用会?我直接拿捏 >_>

🌈键盘敲烂,年薪30万🌈 目录 git的一些前置操作 如何获取本地仓库 本地仓库的操作 远程仓库操作 合并两个仓库(通用方法) 从远程仓库拉取文件报错 fatal:refusing to merge unrelated histories 分支操作 注意&…