Mysql数据库--删除和备份、约束类型

目录

1.删除操作

1.1表的删除操作

1.2数据库备份

2.约束

2.1基本概况

2.2not null约束演示

2.3unique约束演示

2.4default约束演示

2.5primary key约束演示

2.6foreign key约束演示

2.7check约束演示


1.删除操作

1.1表的删除操作

delete  from  表名   where   条件(可以搭配order by,delete)

会把符合条件的行从这个表里面删除掉

drop tabel---删除表操作;

drop操作就是直接把这个表删除了,这个表根本就不会存在于这个数据库里面了,但是我们的delete是把表里面的记录删除掉,但是这个表还是存在的;

delete table(名字)--可以进行表的记录删除,但是这个表还是存在的;

delete和update都是持久化的操作,会影响到我们的数据库服务器的磁盘里面的数据,因此这个草最一定要谨慎,但是像这个insert之类的这个操作只是临时的,不会影响到我们的数据库磁盘上面的数据;

1.2数据库备份

数据库的备份:这个我们使用mysqldump进行演示,这个mysqldump实际上就在我们的这个mysql的安装包的这个bin目录的下面,小伙伴可以自己去找一下,这个就是一个mysql自带的程序,这个就是可以把我们的SQL雨具导出为一个.sql文件;

这个备份的这个命令里面是有这个我们登录进入数据库的这个指令的,因此我们的备份是在最原始的这个窗口执行------而不是在mysql->这个情况下执行的;

我们的这个hsp_db02和db03就是我们想要备份的数据库的名字,后面的这个类似于重定向的符号就是我们要备份到的位置,这个位置到时候就会生成我们的这个.sql文件,这个文件里面的内容就是我们的创建修改数据库里面的这个表的相关的这个sql语句;

我们使用下面的这个进行数据库的恢复: 

source  路径---------------恢复的语句

我们的这个备份是在dos下面执行的,不是mysql->的这个情况下,这个时候我们还没有进入我们的数据库;

但是我们的这个source进行数据库恢复的时候,就需要先进行登录,在mysql->下使用这个source语句进行数据库的恢复; 

2.约束

2.1基本概况

数据库对于数据进行校验和检查的工作机制-------------保证数据库里面不被插入非法的数据;下面的这个就是Mysql里面的一些约束:

not null----不可以是空的;

unique--------不可以重复;

primary key----------主键,不可以是空的,而且不可以是重复的;


2.2not null约束演示

我们首先创建一个简单的数据库里面的表:stu2;我们创建的这个表有两列,一列表示这个表的id,一列表示的就是我们的学生表的名字;

我们的这个创建的时候指出来这个id不可以是空的,具体的写法如图所示:

这个not  null就是对于这个表的一个约束,这样的话,我们如果对于这个表进行一些不正当的操作,就会报出错误信息;下面的就是我们插入一个空值,这个时候的id就是null,这个时候触发我们的约束,这个时候就会报错;

我们的这个表里面有一个姓名为张三的同学的信息,我们把这个同学的id修改为null,这个时候也是会触发我们的约束,因此这个时候也会报错;


2.3unique约束演示

uniuqe就是表示的不可以重复,我们可以进行测试的:
就是我们先不加任何约束进行一个表的创建,这个时候连续向这个表里面插入相同的元素,这个操作是不会报错的;

但是如果我们创建表的时候加上这个unique的约束,这个时候如果我们还是连续两次插入相同的数据,这个时候就会报错,如下图所示:

unique进行约束的时候,首先会进行查询的操作,看看我们插入的这个数据是不是和这个表里面的已知的数据是重复的,因此这个数据库里面的约束的引入,增加了我们数据插入的时候的查找校验时间,某种程度上也降低了我们的执行效率;

2.4default约束演示

我们首先看一下这个一般情况下我们的这个表的相关的属性的信息,这个是使用

desc  表名----------------查询这个表的相关的属性的信息;

我们可以看到这个查询结果里面的这个default这一列就是null,这个default就是默认的意思;

我们的这个desc表示的是describe就是描述的意思,和我们的英文单词的意思一样;

但是之前的那个对于这个表进行查询的时候,这个里面有一个对于这个表数据进行排序,我们的这个desc表示的就是降序排列,两个虽然写法一样,但是这个实际含义不一样,这个降序排列里面的这个desc表示的就是descend这个单词,因此这个提示我们为了避免引起歧义,我们尽量不要使用所写的方式,如果使用,尽量不要出现相同名字的现象;

上面的这个现实的效果是我们的这个default这一列的默认的结果都是null,其实这一列的内容我们是可以进行修改的,例如我们把这个名字的默认值修改为‘未命名’,修改时候对应的SQL语句如下

然后我们使用这个desc语句对于这个表的属性信息进行查询,发现这个时候的默认的内容已经被修改过来了;


2.5primary key约束演示

这个primary就是主要的意思,key就是键的意思,因此这个合起来就是主键的意思;

主键兼顾了我们的上面的not null和这个unique的功能,就是这个主键既不可以是空的,也不可以是一个重复的数值,就是unique和not null需要满足的条件,这个primary  key都必须满足,因此可见这个主键的限制性比较强;

按照上面的这个SQL语句,我们把这个id设置为主键,这个时候我们使用这个desc对于这个逐渐的相关的信息进行查询,使用的就是我们上面的这个desc,这个时候发现id这个属性里面的key对应位置有了一个pri的表示,这个pri就是primary的意思,可见这个时候我们的主键的设置已经生效了

我们编写SQL语句对于这个表进行内容的插入,第一个参数写成这个null表示的就是把这个id让数据库服务器自己给我们的这个插入的内容进行自行分配,并不是null的真正的含义(不要误解,反正这样写不会报错,按理讲这个primary key需要满足这个not null的要求,但是这个地方没有报错)~~

我们下面介绍一下这个自增主键,然后再向这个表里面插入数据,这个自增逐渐的单词就是auto_increment,这个表示的就是自动增长;

我们第一次插入lisi,id让这个数据库服务器自动分配,第二次插入wangwu,第三次插入tom,第三次插入的时候指定了这个对应的id,我们使用这个select语句显示这个表的相关的信息,我们就可以看到,如果我们没有指定这个id,在这个自增主键约束之下,我们的这个id就是按照1234的这个顺序增加的,但是这个如果我们自己进行了指定,这个时候就会显示我们指定的内容作为id;

这个时候我,如果我们再次去插入数据,这个时候的id会从11开始增加,而不是原来的3,因为我们的这个id的自增,看的是这个数据库的表里面的最小的id,然后以这个作为基准进行增加;

但是,这个并不意味着我们的4-10这个下标就全部浪费了,如果我们进行手动的这个id的指定,这个效果还是可以实现的,但是如果我们呢让这个数据库服务器进行分配,这个时候的id就无法利用4-9这个范围的下标了;

下面的是一个拓展的知识:我们想要向这个数据库的表里面插入id,这个id作为我们的主键,肯定是不能重复的,但是我们实际的服务器是多个主机,分库分表,这个时候每一个表都是相互独立的,互相看不到彼此,这个时候我们的id只会插入到一个表里面去,怎么保证这个插入的id不和另外的两个表里面的这个id重复呢?

这个就不得不说一下我们的分布式系统的生成唯一id的算法:时间戳+主机编号+随机因子;

如果添加新的商品的速度很慢,这个时候时间戳就可以解决问题,但是如果速度很快,这个时候可以通过不同的主机编号进行区分,再多的话就是是生成随机因子,这样三者的组合大部分情况下就可以生成唯一的id了;

2.6foreign key约束演示

foreign表示的就是外国的意思,因此这个foreign key就是外键的意思,外键约束就是这个已知的表和这个数据库里面的其他的表建立联系的过程;下面的这个就是一个数据库里面的两个表,一个是class表,一个是student学生表,这个class表里面包含的信息就是我们的这个classid和我们的班级的名字,student学生表里面的信息就是我们的学生的id和学生姓名,学生班级的id信息;

这个里面,我们的class这个表就是一个父亲表,student就是一个儿子表,因为这个里面的student的这个classid这个内容必须来自于我们的这个class这个里面的classid这一列,否则这个是不合理的,而我们的这个外键约束就是用来形容的这个过程;

按照上面的这个过程,我们首先创建一个class表,这个里面包含了我们的classid和我们的name(班级的名字),下面的这个就是使用的insert进行这个数据的插入的过程;

翻车说明

刚刚实操了一下,上面的这个设置是有问题的,我们想要把这个classid和student这个表里面的classid相互连接,这个class表里面的这个class必须设置为主键,否则我们在这个student这个表里面进行外键设置的时候就会报错(这个我当时弄了好久,在博客上面找,发现其他的这个博主给出来的答案或者是解决方案都是这个编码方式的问题,但是我重新设置这个utf8编码方式之后,这个依然还是会报错,后来才了解到这个class表里面需要进行这个主键的设置,因此这个告诉我们,当我们想要两个表里面的某一类进行外检约束的时候,两个表里面的这个进行外键约束的列必须要自己所在的这个表里面的主键,两个表里面都需要进行设置,否则就会报错!!!!!!!!!)

下面的这个是我们对于这个class里面的这个主键进行设置的情况演示:我们把这个classid设置为主键primary key;

下面的这个就是在进行主键的设置:我们的这个student这个表里面,一共是有三列的,分别是这个学生的id,学生的姓名name,学生的classid,其中这个classid就是外键,和其他的这个约束不一样的是,我们的foreign是需要使用逗号和前面的分隔开,其他上面的约束是直接添加在了后面

references表示的就是外键约束,后面跟的这个就是我们的这个受到class这个表里面的classid这一列的内容的约束(儿子表在前面,父亲表在后面!!)

这个时候如果我们插入了106班,这个classid在我们的这个class这个表里面显然是不存在的,因此这个时候就会报错;如果我们把这个class这个表里面的内容删除掉,这个时候,可能也会影响我们的这个外键约束,例如我们的这个class里面的102被删除了,但是我们的这个student里面的这个classid=102就没有对应的了,但是我们的这个student里面的这个是我们的class表存在102的时候创建的,这个删除之后我们的儿子表里面就没有参考了;

正确做法是:我们可以先去删除这个儿子表,再去删除这个父亲表,这样才会被允许操作;


下面的这个是一个电商网站的情景,这个里面就有用到我们的这个外键约束,因为我们下单的这个商品的id需要是在这个数据库的商品表里面存在的,因此这个就构成了外键约束,但是如果的这个商家下架了这个商品,我们的购买记录里面还是可以看到这个商品的信息,但是这个时候商品表里面已经没有了;

这个实际上就是我们的这个表里面新增加了单独的一列,表示这个商品在线或者是不在线,如果是下架这个商品,这个时候就是把这个列对应的内容从1->0就可以了,查询商品的时候,我们就查询不到了,但是这个就是间接的隐藏,实际上这个商品的信息还是存在的,只不过我们看不到了;

2.7check约束演示

mysql里面使用这个check语句可以进行检查,但是这个约束会被忽略,了解即可;

create table test1(id int name varchar(20),sex varchar(1),check (sex='男' or sex=‘女’));

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

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

相关文章

kubeadm部署k8s

1.1 安装Docker [rootk8s-all ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo [rootk8s-all ~]# sed -i sdownload.docker.commirrors.huaweicloud.com/docker-ce /etc/yum.repos.d/docker-ce.repo [ro…

数据结构双向链表和循环链表

目录 一、循环链表二、双向链表三、循环双向链表 一、循环链表 循环链表就是首尾相接的的链表,就是尾节点的指针域指向头节点使整个链表形成一个循环,这就弥补了以前单链表无法在后面某个节点找到前面的节点,可以从任意一个节点找到目标节点…

用HTML5+CSS+JavaScript庆祝国庆

用HTML5CSSJavaScript庆祝国庆 中华人民共和国的国庆日是每年的10月1日。 1949年10月1日,中华人民共和国中央人民政府成立,在首都北京天安门广场举行了开国大典,中央人民政府主席毛泽东庄严宣告中华人民共和国成立,并亲手升起了…

[单master节点k8s部署]31.ceph分布式存储(二)

Ceph配置 Ceph集群通常是一个独立的存储集群,可以部署在 Kubernetes 集群之外。Ceph 提供分布式存储服务,能够通过 RADOS、CephFS、RBD(块存储)、和 RGW(对象存储)等方式与 Kubernetes 集成。即使 Ceph 部…

王者农药更新版

一、启动文件配置 二、GPIO使用 2.1基本步骤 1.配置GPIO,所以RCC开启APB2时钟 2.GPIO初始化(结构体) 3.给GPIO引脚设置高/低电平(WriteBit) 2.2Led循环点亮(GPIO输出) 1.RCC开启APB2时钟。…

CSS | 响应式布局之媒体查询(media-query)详解

media type(媒体类型)是CSS 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强,是CSS 3的重要内容之一。随着移动互联网的发展,m…

如何在算家云搭建CosyVoice(文生音频)

一、CosyVoice简介 CosyVoice 是一个开源的超强 TTS(‌文本转语音)‌模型,‌它支持多种生成模式,‌具有极强的语音自然可控性。‌ 具有以下特点: 语音合成 :能够将文本转换为自然流畅的语音输出。多语种…

CSS 盒子属性

1. 盒子模型组成 1.1 边框属性 1.1.1 四边分开写 1.1.2 合并线框 1.1.3 边框影响盒子大小 1.2 内边距 注意: 1.3 外边距 1.3.1 嵌套块元素垂直外边距的塌陷 1.4 清除内外边距 1.5 总结

k8s-集群部署1

k8s-集群部署1 一、基础环境准备二、docker环境准备三、k8s集群部署1.kubeadm创建集群2.使用kubeadm引导集群 总结 一、基础环境准备 首先,需要准备三个服务器实例,这里我使用了阿里云创建了三个实例,如果不想花钱,也可以在VM上创…

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab) 目录 多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介…

SCUC博客摘录「 储能参与电能市场联合出清:SCUC和SCED模型应用于辅助服务调频市场(IEEE39节点系统)」2024年10月6日

2.1 SCUC模型在本方法中,首先利用SCUC模型确定机组出力计划和储能充放电计划。SCUC模型是电力系统经济调度的重要工具,通过优化发电机组出力计划和调度,实现电力系统的经济性和可靠性。在考虑储能的情况下,SCUC模型需要考虑储能的…

一个真实可用的登录界面!

需要工具: MySQL数据库、vscode上的php插件PHP Server等 项目结构: login | --backend | --database.sql |--login.php |--welcome.php |--index.html |--script.js |--style.css 项目开展 index.html: 首先需要一个静态网页&#x…

机器学习(5):机器学习项目步骤(二)——收集数据与预处理

1. 数据收集与预处理的任务? 为机器学习模型提供好的“燃料” 2. 数据收集与预处理的分步骤? 收集数据-->数据可视化-->数据清洗-->特征工程-->构建特征集和数据集-->拆分数据集、验证集和测试集 3. 数据可视化工作? a. 作用&…

基于SpringBoot+Vue的在线投票系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

JDBC 概述

JDBC 概述 JDBC的基本概念与功能JDBC的工作原理JDBC的组件与类JDBC的类型与特性JDBC的应用场景 JDBC(Java Database Connectivity)即Java数据库连接,是Java编程语言用于与数据库进行连接和操作的API(应用程序编程接口)…

C++面试速通宝典——7

150. 数据库连接池的作用 数据库连接池的作用包括以下几个方面: 资源重用:连接池允许多个客户端共享有限的数据库连接,减少频繁创建和销毁连接的开销,从而提高资源的利用率。 统一的连接管理:连接池集中管理数据库连…

python交互式命令时如何清除

在交互模式中使用Python,如果要清屏,可以import os,通过os.system()来调用系统命令clear或者cls来实现清屏。 [python] view plain copy print? >>> import os >>> os.system(clear) 但是此时shell中的状态是:…

Java 面向对象设计一口气讲完![]~( ̄▽ ̄)~*(上)

目录 Java 类实例 Java面向对象设计 - Java类实例 null引用类型 访问类的字段的点表示法 字段的默认初始化 Java 访问级别 Java面向对象设计 - Java访问级别 Java 导入 Java面向对象设计 - Java导入 单类型导入声明 按需导入声明 静态导入声明 例子 Java 方法 J…

msvcp140.dll丢失的解决方法,详细解读6种解决方法

在使用电脑时,我们可能会遇到提示缺少msvcp140.dll的错误信息。这个提示意味着我们的电脑中缺少MSVCP140.dll这个文件,它是某些程序运行所必需的。如果我们遇到这个问题,应该如何解决呢?本文将详细解析如何解决msvcp140.dll丢失的…

Study-Oracle-10-ORALCE19C-RAC集群搭建

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 ORACLE --RAC 搭建理念:准备工作要仔细,每个参数及配置都到仔细核对。环境准备完成后,剩下的就是图像化操作,没啥难度,所以图形化操作偷懒不续写了。 一、硬件信息及配套软件 1、硬件设置 RAC…