MySQL之数据完整性

数据的完整性约束可以分为三类: 实体完整性、域完整性和引用完整性。

说来说去(说主键,外键,以及⼀些约束)

1、实体完整性 (实体就是行)

什么是关系型数据库?

一个表代表一类事务,表中的一个数据表示一个具体的事务,比如代表一个人。Student

另一个表比如代表课程Course。多个表之间代表了万物之间的练习。

我们将表中的一行数据,称为一个“实体”,而所谓的实体完整性约束,就是保证这一行数据的唯一的,不会出现重复的行数据。

为了达到这样的目的,实体完整性约束有三种: 唯一约束、主键约束、自增约束。

1)唯一约束

关键字: unique

作用: 顾名思义,就是修饰某一个字段,这个字段的值在一张表内不能重复!

创建表的时候添加唯一约束:

``  该符号是esc 键下的那个符号
一个表名或者一个字段名添加 `` 可以防止表名和字段名跟关键字冲突
-- 创建表
create table `stu01` ( `phone` varchar(11) unique,		`sname` varchar(50)
);
-- 或者
create table `stu02` (`phone` varchar(11),`sname` varchar(50),unique(`phone`)
);开始插入数据:
insert into stu01 values('18638147931','张三');
insert into stu01 values('18638147931','张三2');

 2)主键约束

假如你有一个表 name  agezs     18zs     18
此时两条数据完全一样,如何区分,添加主键
一般主键的字段名  id

关键字: primary key

建表的时候,一个字段充当主键:
create table student (id int primary key,sname varchar(50)
)
建表的时候,多个字段充当主键:
create table sc (sid int,cid int,score int,primary key(sid, cid)	-- 如果有多个主键需要添加,不能在字段的后面直接写primary key。需要通过这样的方式来添加。
)

 

多了一个钥匙的图标。

联合主键:
  多个普通的字段,组合成了一个主键。主键是不能重复的。

真实的数据库中的表:都是有主键的。如果没有主键,直接报警!

创建了一个表,创建好了,忘记加主键了。
create table course (cid int,cname varchar(50)
)alter table course add primary key (cid);
删除主键:
alter table course drop primary key;
由于主键经常使用 int类型,1 开始不断增加的,不想手动维护,让其自增create table stu03(sid int primary key auto_increment,sname varchar(50)
)
primary key 主键
auto_increment 自增insert into stu03 values(null,'张三');
也可以
insert into stu03(sname) values('李四');

 

delete from stu03;
truncate table stu03;

其实还有另一个区别:
delete from  删除表中的数据,自增的数据不会重新计数。
truncate table  由于是将真个表都删除了,自动技术的数据也被清空了,所以新增的数据开始计数。

主键天然的是唯一的。

使用datagrip操作实体完整性约束。

添加唯一约束或者主键:

删除唯一约束或者主键:

自增约束的添加:

2 域完整性 (域就是列)

指的就是某个字段中间的值是否合理,比如性别 (1 0 或者 男 女 或者 male female)

1) 非空约束

关键字: not null

顾名思义,就是对某一个字段进行修饰,修饰这一个字段的值不能是NULL。

create table student2 (sid int primary key,sname varchar(30) not null
)如果一个字段不允许为null, 就在字段的后面加 约束

 

datagrip界面如下:

image.png


可以通过图形化的界面操作,也可以使用sql语句:

DDL语句:
-- 建表之后追加
alter table `student` change `sname` `sname` varchar(30) not null;
-- 建表之后移除
alter table `student` change `sname` `sname` varchar(30);

delete from stu06;

truncate table stu06;

再补充一个不同点:

delete from stu06; 再次添加数据的时候,id 不会重新从1开始自增。

truncate table stu06; 添加数据时,id 又开始从1 开始自增。

2)默认值约束

关键字: default

修饰某一个字段,在这个字段进行赋值的时候没有赋值的情况下,这个字段将会拥有一个默认的初始值。

create table stu04 (sid int primary key,sname varchar(20) default 'unkonwn'
)假如 插入数据的时候,没有给这个字段设置值,就使用默认值保存起来。
insert into stu04 values(1,null);mysql> insert into stu04(sid) values(2);
Query OK, 1 row affected (0.09 sec)mysql> select * from stu04;
+-----+---------+
| sid | sname   |
+-----+---------+
|   1 | NULL    |
|   2 | unkonwn |
+-----+---------+
2 rows in set (0.12 sec)一般是在gender 这个数据上设置 默认值 男

检查约束: 了解

插入数据的时候必须是指定的值中的一个,比如性别 f 或者 m

create table teacher( tid int, tname varchar(20), tgender char(1) check(tgender in('f','m'))	-- 约束这个字段的值只能是m或者f
); insert into teacher values (1001,'zs','a'); 
select * from teacher;
mysql 8.0 这个检查约束 不管用,不用管它了。

3 引用完整性(了解)

多个表之间有关联关系。

比如: emp 和 dept

这两个表示你猜测的关系,他们之间真的有关系吗?

navicat 的界面:

datagrip界面:

- RESTRICT: 默认的约束,不允许修改、删除被引用的字段的值
- CASCADE: 级联修改,在修改、删除被引用的字段的时候,引用方的一行数据也随之修改和删除
- SET NULL: 空值处理,在修改、删除被引用的字段的时候,引用方的引用字段的值会设置为NULL
- NO ACTION: 不处理,在修改、删除被引用的字段的时候,引用方的引用字段不作任何改变

image.png

假如现在我删除了张三 ,张三所在的部门信息 删还是不删?
        删除了 10号部门, 10部门的员工信息是否删除?

不要使用UUID做主键,特别是一个表数据特别多的时候:
UUID 全球唯一
select * from user where id = '89b45b04-3405-4a1c-b1d4-21713b73cff4';

select * from user where id = 1;

查询的时候,对比的次数要多很多倍!

 

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

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

相关文章

echarts的双X轴,父级居中的相关配置

前言:折腾了一个星期,在最后一天中午,都快要放弃了,后来坚持下来,才有下面结果。 这个效果就相当是复合表头,第一行是子级,第二行是父级。 子级是奇数个时,父级label居中很简单&…

配置宝塔php curl 支持http/2 发送苹果apns消息推送

由于宝塔面板默认的php编译的curl未加入http2的支持,如果服务需要使用apns推送等需要http2.0的访问就会失败,所以重新编译php让其支持http2.0 编译方法: 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…

记录一次网关异常

记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错,并且有时候就算什么都不操作,也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…

Spring Boot开发——整合MyBatis的几种SQL写法

文章目录 1. 批量操作优化• 批量插入• 批量更新• 批量删除2. 动态SQL• 动态查询3. 多条件分支查询• 多条件分支查询4. SQL语句优化• SQL语句优化5. 自动生成主键• 自动生成主键6. 注解方式使用MyBatis• 注解方式示例7. 高级映射• 一对多映射8. MyBatis-Plus集成• MyB…

关于望远镜偏振校准源的一些记录

确定主要的偏振校准模型: 你需要一个最好的源,稳定偏振明确的校准作为主要模型例如:3C286,3C138,3C48 偏振位置角的校准:3C286,3C138,3C48(3C48一般用在6cm及以下的波段使…

解决 Flutter Dio合并请求多个接口,如果一个接口500,那么导致其他请求不在执行

Flutter Dio如何自定义拦截异常 应用场景 我们一般会统一拦截DioExceptionType 如400,403,500 等错误 但有时候,有个地方合并请求多个接口,如果一个接口500,那么导致其他请求不在执行,因为统一拦截了500&…

动态艺术:用Python将文字融入GIF动画

文章内容: 在数字媒体的多样化发展中,GIF动画作为一种流行的表达形式,常被用于广告、社交媒体和娱乐。本文通过一个具体的Python编程示例,展示了如何将文字以动态形式融入到GIF动画中,创造出具有视觉冲击力的动态艺术…

@antv/x6 再vue中 ,自定义图形,画流程图、数据建模、er图等图形

X6 是基于 HTML 和 SVG 的图编辑引擎,提供低成本的定制能力和开箱即用的内置扩展,方便我们快速搭建 DAG 图、ER 图、流程图、血缘图等应用。 最终效果图 1.安装 npm install antv/x6 --save //x6主要包 npm install antv/x6-vue-shape //使用vue组…

【k8s】k8s 中X.509 客户端证书验证机制

Kubernetes 使用 X.509 客户端证书进行身份验证是一种常见的方法。这种机制通过客户端证书来验证用户或应用程序的身份。以下是 Kubernetes 中 X.509 客户端证书验证机制的详细说明: 1. 生成客户端证书 首先,你需要生成客户端证书和私钥。这通常使用 O…

2.4特征预处理(机器学习)

2.4特征预处理 2.4.1 什么是特征预处理 通过 一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。 1 包含内容 数值型数据的无量纲化: 归一化 标准化 2 特征预处理API sklearn.preprocessing 为什么要进行归一化/标准化? 特征的单…

前端、后端、测试?如何选择

目录 一、前端开发 (一)职业概述 (二)需学习的技术 二、后端开发 (一)职业概述 (二)需学习的技术 三、测试 (一)职业概述 (二&#xff0…

AI - 谈谈RAG中的查询分析(2)

AI - 谈谈RAG中的查询分析(2) 大家好,RAG中的查询分析是比较有趣的一个点,内容丰富,并不是一句话能聊的清楚的。今天接着上一篇,继续探讨RAG中的查询分析,并在功能层面和代码层面持续改进。 功…

hadoop环境配置-创建hadoop用户+更新apt+安装SSH+配置Java环境

一、创建hadoop用户(在vm安装的ubantu上打开控制台) 1、sudo useradd -m hadoop -s /bin/bash (创建hadoop用户) 2、sudo passwd hadoop (设置密码) 3、sudo adduser hadoop sudo(将新建的hadoop用户设置为管理员) 执行如下图 将…

大数据新视界 -- Hive 数据湖架构中的角色与应用(上)(25 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

SpringMVC:参数传递之日期类型参数传递

环境准备和参数传递请见:SpringMVC参数传递环境准备 日期类型比较特殊,因为对于日期的格式有N多中输入方式,比如: 2088-08-182088/08/1808/18/2088… 针对这么多日期格式,SpringMVC该如何接收,它能很好的处理日期类…

jmeter如何导出中文版的测试报告?

文章目录 0、初始步骤:把报告模板换成中文形式1、首先添加一份聚合报告2、然后点开【聚合报告】3,生成报告3.1 选择【工具】-【generate HTML report】3.2 【generate HTML report】参数详解3.3 、最后点击 【generate report】直接生成。 声明&#xff…

基于IPD双轮驱动, 打破产品同质化竞争魔咒

在当今竞争激烈的商业环境中,产品同质化现象愈发严重,企业面临着巨大的挑战。如何在众多相似产品中脱颖而出,赢得客户的青睐并获取持续的竞争优势,成为企业亟待解决的关键问题。基于 IPD 双轮驱动的产品开发模式,为企业…

2.mysql 中一条更新语句的执行流程是怎样的呢?

前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。 相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条更新语句的执行流程又…

es索引导致的数据导入缓慢问题

我是es小白中的小白,遇到个问题也不知道为啥,反正是解决了,各位路过的大哥,有知道原因的还望留言指教,在此感谢! 我先讲一下这个问题的背景,我们线上有一套es,版本是7&…

【LeetCode每日一题】——204.计数质数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 数组 二【题目难度】 中等 三【题目编号】 204.计数质数 四【题目描述】 给定整数 n &…