MYSQL————数据库的约束

1.约束类型

1.not null:指示某列不能存储null值

2.unique:保证某列的每行必须有唯一值

3.default:规定没有给列赋值时的默认值

4.primary key:not null和unique的结合。确保某列(或两个或多个列的结合)有唯一标识,有助于更容易更快捷的找到表中的一个特定记录。

5.foreign key:保证一个表中的数据匹配另一个表中的值的参照完整性。

6.check:保证列中的值符合指定的条件。对于MYSQL数据库,对check子句进行分析,但是忽略check子句

1.1 not null约束

not null:指示某列不能存储null值

创建表时,指定字段添加约束 

NO表示不能写入null

YES表示可以写入null


 1.当字段指定约束not null时,写入数据时,未写该字段,会报错,报Field '字段' doesn't have a default value,该字段没有默认值,你必须写上一个值

2.not null约束的字段,在写入数据时,不能对该字段写入null,数据库帮我们做了一次校验

3.只有当非空列有值时可以写入

1.2 unique (唯一约束)

指定某列为唯一的,不重复的:

 create table test(-> id int unique,-> name varchar(20)-> );

约束id字段为唯一的,不重复的


当test表中有了一条id为1,name为张三的数据,再插入一条id为1,name为李四的数据时,会报id重复的警告


当指定字段被unique约束时,插入的数据可以为null,当再次插入null的数据时,不会报错null可以重复插入

1.3default (默认约束)

规定没有给列赋值时的默认值

指定插入数据时,name为空,默认为无名氏

create table test(-> id int,-> name varchar(10) default'无名氏'-> );

当为某列设置了默认约束的时候,如果不给这个列指定值才会使用默认约束

虽然指定了默认约束,但是当我们手动指定这一列的值为null时,插入的值依然为null,因为这个null是我们手动指定的,可以理解为我们想要的值

用户指定的优先级要高于默认约束

1.4primary key(主键约束)

指定id列为主键

 create table test(-> id int primary key,-> name varchar(20)-> );

primary key是not null与unique的结合,确保某列(或两列或多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定记录

主键约束的列即使非空的,也是唯一的

列被标识为PRI,表示他是一个主键

1.写入数据时,两个约束同时生效

2.主键约束帮我们校验了非空和唯一,这两个校验在写入数据时对效率有一定影响,比起不做校验,这个性能消耗是可以承担的

3.建议为每一张表定义一个主键


auto_increment

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。

 create table test(-> id int primary key auto_increment,-> name varchar(20)-> );

 让数据库帮我们去维护主键的增长,不用程序员自己去计算了,在插入的时候先找到最大的值,然后在这个基础上加1,生成一个新的值,作为新一个数据行主键id列的值


 全列插入

设置了自增主键之后,发现写入null时,也可以成功的插入数据

这里并不是说把null写入数据库了,而是说让数据库帮我们处理这个列的值(自增操作) 


指定列插入

 当删除前两条数据后,再插入数据,id列会在删除的最后一条数据上加一作为新的数据的id值,以上现象是有delete造成的

delete:delete即使删除全部数据,他并不会改变表的结构,可以回滚,所以你主键记录到的值是从之前的开始往下记录的

主键值可以自己添加,只要和之前的不同就行,所以主键值在数据1表有可能是不连续的

当再次添加数据时

 对于我们插入的数据,数据库会自动帮我们进行排序(在自增操作下)


一个表中不允许有两个主键

但是一个主键可以包含多个列(复合主键) 

在唯一校验时,只有复合主键中所有的列都相同才会被判定为相同 

主键的值时定义主键时,多个列值的组合

 1.5 foreign key 

保证一个表中的数据匹配另一个表中的值的参照完整性

 表中某个列的值,必须是另一张表中的主键列,或是唯一约束列的值,也就是当前表中的值必须在另一张表中存在,且满足主键或唯一约束


创建班级表和学生表

CREATE TABLE class(
id int PRIMARY KEY auto_increment,
name varchar(20)
);CREATE TABLE student(
id int PRIMARY KEY auto_increment,
name VARCHAR(20) not NULL,
class_id int 
);

当前表没有设置主外键关系


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

语法:

foreign key (字段名)references 主表(列)
 create table student(-> id int primary key auto_increment,-> name varchar(20) not null,-> class_id int,-> foreign key(class_id)references class(id)-> );

1.foreign key:创建外键的关键字

2.class_id:表示当前表中class_id这个字段要与主表建立主外键关系

3.references:关键字,表示后面要引用哪个表中的哪个列

4.class(id):指定主表和相应的列


 通过外键约束,保证数据的完整性和关系的正确性


删除主表的数据

1.删除主表数据,会报一个主外键关系的错误

2.如果要删除主表中的记录,子表中不能有对该条记录的依赖,也就意味着要先删除子表中的记录,再去删除主表中的记录

 

1.5 check

保证列中的值符合指定的条件。对于MYSQL数据库,对check子句进行分析,但是忽略check子句

 1.check关键字是用来检查这个值是否符合check后面的条件的

2.但是mysql8.0.16之前的版本不支持这个约束,所以写了也没什么效果

3.只有从8.0.16开始,check约束才被正式支持可以使用生效

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

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

相关文章

游戏开发设计模式之命令模式

目录 命令模式的定义和工作原理 应用场景 实现方式 优点 缺点 结论 命令模式在游戏开发中的具体实现案例是什么? 如何在Unity3D中有效地实现和管理命令模式以提高游戏性能? 命令模式与其他设计模式(如观察者模式、状态模式&#xff…

2024前端面试题-js篇

1.js有哪些数据类型 基础数据类型:string,number,boolean,null,undefined,bigInt,symbol 引用数据类型:Object 2.js检测数据类型的方式 typeof:其中数组、对象、null都会被判断为object&…

多动症的孩子有哪些症状表现?

在星启帆自闭症儿童康复机构,我们不仅关注自闭症儿童的成长与康复,也深刻认识到多动症对儿童日常生活、学习和社交的深远影响。多动症,全称注意缺陷多动障碍,是一种常见于儿童时期的神经发育性疾病,其症状表现多种多样…

Python酷库之旅-第三方库Pandas(097)

目录 一、用法精讲 416、pandas.DataFrame.memory_usage方法 416-1、语法 416-2、参数 416-3、功能 416-4、返回值 416-5、说明 416-6、用法 416-6-1、数据准备 416-6-2、代码示例 416-6-3、结果输出 417、pandas.DataFrame.empty属性 417-1、语法 417-2、参数 …

FTP协议-匿名用户登录 从0到1

前言 日常大家可能接触web漏洞比较多而对其他端口及协议不那么了解,其实其他协议漏洞在渗透中也同样重要只是平时可能接触得不多。本文将介绍FTP协议、FTP匿名用户登录及其具体流程分析和自动化利用demo。 FTP简介 FTP是File Transfer Protocol(文件传…

google浏览器chrome用户数据(拓展程序,书签等)丢失问题

一、问题背景 我出现这个情况的问题背景是:因为C盘块满了想清理一部分空间(具体看这:windows -- C盘清理_c盘softwaredistribution-CSDN博客),于是找到了更改AppDatta这个方法,但因为,当时做迁移…

opencv-python图像增强十五:高级滤镜实现

文章目录 前言二、鲜食滤镜三、巧克力滤镜三,冷艳滤镜: 前言 在之前两个滤镜文章中介绍了六种简单的滤镜实现,它们大多都是由一个单独函数实现的接下来介绍五种结合了之前图像增强文章提的的算法的复合滤镜。本案例中的算法来自于文章一&…

qt-PLC可视化编辑器

qt-PLC可视化编辑器 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "diagramitem.h" #include "arrow.h"#include <QDebug> #include <QGraphicsScene> #include <QGraphicsSceneContextMenuEvent> #includ…

[000-01-018].第3节:Linux环境下ElasticSearch环境搭建

我的后端学习笔记大纲 我的ElasticSearch学习大纲 1.Linux系统搭建ES环境&#xff1a; 1.1.单机版&#xff1a; a.安装ES-7.8版本 1.下载ES: 2.上传与解压&#xff1a;将下载的tar包上传到服务器software目录下&#xff0c;然后解压缩&#xff1a;tar -zxvf elasticsearch-7…

人工智能算法工程师(中级)课程21-深度学习中各种优化器算法的应用与实践、代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程21-深度学习中各种优化器算法的应用与实践、代码详解。本文将介绍PyTorch框架下的几种优化器&#xff0c;展示如何使用PyTorch中的优化器&#xff0c;我们将使用MNIST数据集和一个简单…

增材制造(3D打印):为何备受制造业瞩目?

在科技浪潮的推动下&#xff0c;增材制造——即3D打印技术&#xff0c;正逐步成为制造业领域的璀璨新星&#xff0c;吸引了航空航天、汽车、家电、电子等众多行业的目光。那么&#xff0c;是什么让3D打印技术如此引人注目并广泛应用于制造领域&#xff1f;其背后的核心优势又是…

Unity-可分组折叠的Editor

Unity-可分组折叠的Editor &#x1f957;功能介绍&#x1f36d;用法 &#x1f957;功能介绍 在序列化的字段上标记特性:[FoldoutGroup(“xxx”)]&#xff0c;inspector上就会被分组折叠显示。 &#xff08;没有被指定的字段自动放到Default组中&#xff09; 传送门&#x1f30…

【Python】1.基础语法(1)

文章目录 1.变量的语法1.1定义变量1.1.1硬性规则(务必遵守)1.1.2软性规则&#xff08;建议遵守&#xff09; 1.2使用变量 2.变量的类型2.1整型2.2浮点型2.3 字符串类型2.4布尔类型2.5其他类型2.6 动态类型特性 3.注释3.1 注释行3.2 文档字符串 3.3 如何批量注释3.4注释的规范 4…

深信服上半年亏损5.92亿,营收同比降低2.3亿

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

如何使用ssm实现网络安全宣传网站设计

TOC ssm177网络安全宣传网站设计jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管…

【SQL】指定日期的产品价格

目录 题目 分析 代码 题目 产品数据表: Products ------------------------ | Column Name | Type | ------------------------ | product_id | int | | new_price | int | | change_date | date | ------------------------ (product_id, chang…

九、前端中的异步方法Promise,Promise详解

文章目录 1.Promise简介什么是promise为什么使用Promisepromise中的状态 2.Promis的用法 1.Promise简介 什么是promise Promise是异步编程的一种解决方案&#xff0c;它的构造函数是同步执行的&#xff0c;then 方法是异步执行的。 为什么使用Promise 在JavaScript的世界中…

Java 入门指南:List 接口

Collection 接口提供了一系列用于操作和管理集合的方法&#xff0c;包括添加、删除、查询、遍历等。它是所有集合类的根接口&#xff0c;包括 List、Set、Queue 等。 Collection 接口常见方法 add(E element)&#xff1a;向集合中添加元素。 addAll(Collection col)&#xff1…

洛谷 P2569 [SCOI2010] 股票交易

题目来源于&#xff1a;洛谷 题目本质&#xff1a;动态规划&#xff0c;单调队列 解题思路&#xff1a; 方程f[i][j]表示第 i 天结束后&#xff0c;手里剩下 j 股的最大利润&#xff0c;则不买不卖&#xff1a;f[i][j]f[i-1][j]。 买入&#xff1a;f[i][j]max{f[i-w-1][k]k*…

vue3+ts+Go使用百度地图路书实现历史轨迹回放、轨迹回放进度、聚合点、自定义弹框和实时监控视频、多路视频轮巡播放

前言 分享一个刚做完项目集成技术&#xff0c;一个车辆行驶轨迹监控、行车视频监控、对特种车辆安全监管平台&#xff0c;今年政府单位有很多监管平台项目&#xff0c;例如&#xff1a;渣土车监控、租出车监管、危害气体运输车监管等平台&#xff0c;这些平台都有车辆行驶轨迹…