MySQL事务机制、导入导出、数据表设计案例(六)

news2024/11/27 3:42:05

目录

    • 一、数据库事务机制
      • 1.1 undo和redo日志
      • 1.2 开启事务、提交事务、回滚事务
      • 1.3 事务的ACID属性
      • 1.4 事务的并发性
        • 1.4.1 业务案例1:抢车票
        • 1.4.2 业务案例2:转账
        • 1.4.3 业务案例3 电商涨价
        • 1.4.4 事务的序列化
    • 二、数据导出与导入
      • 2.1 SQL文件的导出与导入
      • 2.2 TXT文档的导入与导出
    • 三、综合案列:新闻管理系统数据库设计(表结构)
      • 3.1 功能分析
      • 3.2 数据表字段分析
      • 3.3 密码的加解密
      • 3.4 数据表的实现

一、数据库事务机制

事务机制: 避免写入直接操作数据文件,如果数据的写入直接操作数据 文件是非常危险的事情。例如:给员工涨工资,如果UPDATE语句执行过程中,系统重启了,那么就分不清哪个已经修改了,哪个还没修改。

  • RDBMS = SQL语句 + 事务(ACID)
  • 事务是一个或者多个SQL语句组成的整体,要么全部执行成功,要么全都执行失败。

1.1 undo和redo日志

利用日志来实现间接写入: MySQL共有5种日志文件,其中只有redo日志和undo日志与事务有关

在这里插入图片描述

1.2 开启事务、提交事务、回滚事务

管理事务:

  1. 默认情况下,MySQL执行每条SQL语句都会自动开启和提交事务
  2. 为了让多条SQL语句纳入到一个事务之下,可以手动管理事务
# 开启事务
START TRANSACTION;
SQL语句
[COMMIT | ROLLBACK];
# COMMOT将操纵持久化到数据文件,提交事务;ROLLBACK事务回滚

例子:

# 开启事务
START TRANSACTION;

DELETE FROM t_emp;
DELETE FROM t_dept;

SELECT * FROM t_emp;
SELECT * FROM t_dept;

此时查询到的t_empt_dept都是空的,但是现在SELECT查询实际上是到redo日志文件中查询的。此时的表中的数据仍然存在,只要不提交事务,就不会和数据文件做同步。

# 提交事务,就会同步数据文件
# 将结果提交
COMMIT;
# 回滚,所有修改记录一起回滚。MySQL将日志文件打上标记
ROLLBACK;

1.3 事务的ACID属性

  1. 原子性

    一个事务中的所有操作要么全部完成,要么全部失败。事务执行后,不允许停留在中间某个状态。

  2. 一致性

    不管在任何给定的时间、并发事务有多少,事务必须保持运行结果的一致性。要求事务在并发的情况下不会数据的歧义。阻止事务之间相互读取临时数据。

    比如:A、B、C、D四人相互转账总和不变

  3. 隔离性

    隔离性要求事务不受其他并发事务的影响,如同在给定时间内,该事务是数据库唯一运行的事务。

    undo和redo日志中数据会被标记属于哪个事务

    默认情况下A事务,只能看到日志中该事务的相关数据。

  4. 持久性

    事务一旦提交,结果便是永久性的。即便发生宕机,仍然可以依靠事务日志完成数据的持久化。

1.4 事务的并发性

事务并发执行的情况下,由于事务的隔离性会给某些业务带来问题,因此要修改事务的隔离级别

事务的四个隔离级别

序号隔离级别功能
1read uncommitted读取未提交数据
2read committed读取已提交数据
3repeatable read重复读取
4serializable序列化

1.4.1 业务案例1:抢车票

在这里插入图片描述

A事务先购买G8047车次1车厢1A坐席,还未提交订单。此时B事务应该能够读取到A事务的状态,即读取未提交数据,才不会发生冲突和A事务争抢该坐席。

修改事务的隔离级别

READ UNCOMMITTED 代表可以读取其他事务未提交的数据

在这里插入图片描述

不设置隔离级别,默认读不到其他事务的临时数据。如下:

在这里插入图片描述

修改隔离级别,如下:

在这里插入图片描述

1.4.2 业务案例2:转账

只能读取其他业务提交以后的数据

在这里插入图片描述

A事务开启,还未操作。B事务将余额改为4900元,A事务转账在余额上加1000即可5900元,如果AB事务都COMMIT没问题。但如果B事务是错误的消费,需要退回,B事务执行ROLLBACK, 如果允许A事务读取B事务的临时数据,那就是4900+1000=5900,少了100块就不对了。

READ COMMITED 代表只能读取其他事务提交的数据

用法同上

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

1.4.3 业务案例3 电商涨价

在这里插入图片描述

A事务购买某商品,还未支付,B事务执行该商品涨价,所以客户下单购买应该是涨价之前的价格购买。因此当前的事务就不能受其他的事务影响。

事务执行之前会把数据拷贝到undo日志中,当repeatable read隔离级别只去读取undo日志中属于自己的那部分数据,因此不会收到其他事务的影响

REPEATABLE READ 代表事务在执行中反复读取数据,得到的结果是一致的,不会收到其他事务的影响。(默认的隔离级别)

用法同上

SET SESSION TRANSACTION  ISOLATION LEVEL REPEATABLE READ;

注意: 第一个session在commit之前,第二个session要启动事务设置,隔离并去查询才会将查询数据加载undo日志中,然后第一个session执行commit后在去第二个session查询数据,数据不受第一session的影响。

1.4.4 事务的序列化

由于事务并发执行所带来的各种问题,前三种隔离级别只适用在某些业务场景中,但是序列化的隔离性,让事务逐一执行,就不会产生上述问题。这种隔离级别使数据库的并发性极具下降,一般不用。

SET SESSION TRANSACTION  ISOLATION LEVEL SERIALIZABLE;

二、数据导出与导入

数据导出与备份的区别:

  • 数据导出,导出的纯粹是业务数据

  • 数据备份,备份的是数据文件、日志文件、索引文件等等

    备份第一次是全量备份,有了全量备份后以后的备份就是增量备份。

2.1 SQL文件的导出与导入

导出SQL文件:

导出sql文件,文件包含了表结构和业务数据

命令行方式:

# no-data可写可不写,表示是否要导出数据文件
# 逻辑库就是要导出的数据库,敲回车后然后输入密码,OK
mysqldump -uroot -p [no-data] 逻辑库 > 导出路径

图形化界面: 双击选中逻辑库—>右键存储SQL文件…

导入SQL文件:

命令行方式:

# 先进入要导入的逻辑库
USE demo;
# 然后导入,source后加路径和文件名
SOURCE 文件路径;

2.2 TXT文档的导入与导出

导出只有纯粹的文档,而不是SQL语句

等再次导入的时候,由于文本文档无SQL语句,MySQL执行导入的时候会跳过词法分析和语法优化,直接把文本文档里的数据写入到MySQL的数据文件中,导入的速度非常快,因此数据量大的时候很适合。

导出文本文件:

导出文本文档,把文本文档拿到其他的MySQL数据库上因不知道表结构没法还原,因此先备份表结构

图形化界面:

  1. 备份表结构: 选中某个表—>右键转储SQL文件—>仅结构
  2. 导出该表的数据: 选中该表—>右键导出向导—>.txt文本文件—> 选择要导出的数据表 …

导入文本文件:

图形化界面:

  1. 选中—>运行SQL文件—> 导入表结构(找到路径)

  2. 选中表—> 导入向导—> 选中.txt文档…跟着提示做。

    注意点: 第一个数据行 , 将txt文档的数据与表结构的映射关系选好

三、综合案列:新闻管理系统数据库设计(表结构)

3.1 功能分析

主要功能:

选择你要执行的操作

  1. 新闻列表
  2. 新建新闻
  3. 编辑新闻
  4. 退出

用例图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PCKcrFJ3-1690034255061)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\1690018319575.png)]

3.2 数据表字段分析

新闻的属性:

在这里插入图片描述

数据库的ER图:

🔑:主键

◇: 唯一性约束

在这里插入图片描述

3.3 密码的加解密

数据加密:

密码不能存储为明文,要进行加密

对称加密: 加密解密都是一个,加密速度快,可以短时间对大量数据加密,但是加密强度不如非对称加密,多用于文件加密。DES加密已被淘汰

非对称加密: 公钥和私钥,两把密钥都可以用来加密和解密,一个加密,另一个解密。加密强度高,加密的速度慢,主要用于互联网和电信领域。

在这里插入图片描述

MySQL数据库提供了AES加密和解密的函数,所以数据的加密解密很容易实现

AES加密解密用法:

AES_ENCRYPT(原始数据, 密钥字符串)

例子:

# HEX()将二进制转换为十六进制
SELECT HEX(AES_ENCRYPT("你好世界", "ABC123456"));
# 输出结果:E85A104B6142A7375E53C0545CAD48EE

AES解密函数用法:

AES_DECRYPT(加密结果, 密钥字符串)

例子:

# UNHEX()是将十六进制转换为二进制
SELECT AES_DECRYPT(UNHEX("E85A104B6142A7375E53C0545CAD48EE"),"ABC123456");

3.4 数据表的实现

类型表的创建:

CREATE DATABASE vaga;
USE vaga;
CREATE TABLE t_type(
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	type varchar(20) NOT NULL UNIQUE
);
INSERT INTO t_type(type) VALUES("要闻"), ("体育"), ("科技"), ("娱乐"), ("历史");

角色表的创建:

CREATE TABLE t_role(
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	role VARCHAR(20) NOT NULL UNIQUE
);
INSERT INTO t_role(role)  VALUES("管理员"), ("新闻编辑");

用户表的创建:

CREATE TABLE t_user(
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(20) NOT NULL UNIQUE,
	password VARCHAR(500) NOT NULL,
	email VARCHAR(100) NOT NULL,
	role_id INT UNSIGNED NOT NULL,
	INDEX (username)
);

插入两条数据:

INSERT INTO t_user(username, password, email, role_id) 
VALUES("admin", HEX(AES_ENCRYPT("123456","HelloWorld")), "admin@163.com", 1);

INSERT INTO t_user(username, password, email, role_id) 
VALUES("scott", HEX(AES_ENCRYPT("123456","HelloWorld")), "scott@163.com", 2);

新闻表的创建:

CREATE TABLE t_news(
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	title VARCHAR(40) NOT NULL,
	editor_id INT UNSIGNED NOT NULL,
	type_id INT UNSIGNED NOT NULL,
	content_id CHAR(12) NOT NULL,
	is_top TINYINT UNSIGNED NOT NULL,
	create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	state ENUM("草稿", "待审批", "已审批", "隐藏") NOT NULL,
	INDEX(editor_id),
	INDEX(type_id),
	INDEX(state),
	INDEX(create_time),
	INDEX(is_top)
);

新闻内容用MongoDB存,MongoDB用来存储大量低价值数据,速度快效率高

MongoDB中主键都是12个字符的字符串

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

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

相关文章

【操作教程】在EasyCVR平台实现播放MP4视频的两种方法

目前EasyCVR平台可支持国标GB28181、RTSP/Onvif、RTMP、海康Ehome、SDK等方式接入,这些接入方式主要是针对设备或视频流的接入。在有些项目现场也会遇到播放MP4视频文件的需求,今天我们来介绍下,如何在EasyCVR平台实现MP4视频文件的播放&…

vue-element-template管理模板(一)

模板下载 选择分支:https://github.com/PanJiaChen/vue-admin-template/tree/permission-control 端口修改、关闭Eslint 修改vue.config.js文件(用放大镜搜索“9528”定位文件) const port 9528 lintOnSave: false国际化设置 import lo…

PHP8知识详解:PHP是什么?

PHP是什么? 杨泽业从下面几点为你讲清楚什么是PHP。 1、PHP最开始是Personal Home Page(个人主页)的缩写,已经正式更名为 “PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写。 2、PHP是一种被广泛应用的、…

改进的减法优化器算法优化BP神经网络---回归+分类两种案例

今天采用前一阵改进最为成功的智能优化算法---融合黄金正弦的减法优化器算法(GSABO)优化BP神经网络。该算法不仅是2023年较新的算法,而且改进后的收敛速度和寻优精度都是极佳!点击链接跳转GSABO算法:融合黄金正弦,十种混沌映射&am…

【在英伟达nvidia的jetson-orin-nx-工控机入门了解-自我学习-资料记录-熟悉了解】

【在英伟达nvidia的jetson-orin-nx-工控机入门了解-自我学习-资料记录-熟悉了解】 1、概述2、实验环境3-1初次接触工控机版本-真的好多-新手一脸懵逼3-2 啥是载板和核心板3-3 查看资源资料3-4 了解外设资源3-5 查看博客论坛3-6 底层配置pinmux3-7 Linux驱动开发3-8 AI相关3-8 j…

【基于CentOS 7 的NFS服务】

目录 一、概述 二、应用场景 三、安装 四、启动服务 五、目录结构 1.nfs的主配置文件 2.存储配置文件 六、命令解析 1.共享存储管理命令 2.共享目录查看 七、配置 八、客户端访问 1.查看nfs服务器的共享目录 2.挂载 九、实际案例 一、概述 network filesystemt…

7.12 redis未授权访问漏洞

在1.txt添加存在redis未授权访问漏洞的IP redis.py输入脚本 redis-cli exe -h IP -p 端口号

SQL 常见函数整理 _ CONCAT() 和 CONCAT_WS()

CONCAT() 1. 用法: 用于将多个字符串连接在一起。 2. 基本语法: CONCAT(str1, str2, ...)其中,str1, str2, … 是要连接的字符串。可以指定任意数量的参数。 3. 应用示例 Address表: 如果想将城市、区、街道合并到一个字段中 …

uniapp 小程序如何从主包页面跳转到分包页面

在uniapp开发小程序的时候,“分包”概念一定要提前了解下,具体我就不多说了,自己看下关网的相关配置。 那么,如果从主包页面,跳转至分包的页面呢?如图所示 我的页面->详情页 在我的页面创建好自己的链…

面试之JVM类的生命周期

按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 加载: 类的加载指的是将类的.class文件中的二进制数据读取到内存中,存放在运行时数据区的方法去中。 在加…

java版本Spring Cloud + Spring Boot +二次开发+企业电子招标采购系统

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…

2.css公共样式、LOGO SEO优化、常用模块和注册页类名命名、tab栏布局原理、Web服务器

2.1 css公共样式 模块开发: ●有些样式和结构在很多页面都会出现, 比如页面头部和底部, 大部分页面都有。此时, 可以把这些结构和样式单独作为一个模块, 然后重复使用 ●这里最典型的应用就是common.css公共样式。写好一个样式, 其余的页面用到这些相同的样式 ●模…

基于php+mysql日志审计管理系统

基于phpmysql日志审计管理系统 一、系统介绍二、系统展示1.用户登陆2.监控日志3.监控规则4.用户管理 三、代码展示四.其它系统五、获取源码 一、系统介绍 本系统实现了:用户登陆、日志审计、监控规则、用户管理。 二、系统展示 1.用户登陆 2.监控日志 3.监控规则…

Postman接口测试实战-接口断言/newman执行集成(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口测试用例 接…

2023年项目管理系统排名:客观分析+推荐解决方案

一个高效的项目管理系统可以帮助企业提高生产力、降低成本并确保按时交付高质量的产品或服务。然而,市场上有众多的项目管理系统供选择,使得消费者在做出决策时可能会感到困惑。本文将对当前市场上最受欢迎的项目管理系统进行客观分析,并提供…

原型和原型链条、ES6、前后端交互Ajax

一、原型和原型链条 1.原型<script>/*原型 解决问题> 当你需要给实例对象添加方法> 直接书写在构造函数体内> 这个行为并不好> 我们的原型就是解决了这个问题 不好的原因> 当我把方法书写在构造函数体内> 每次创建实例的时候, 都会创建一个函数数据类…

21matlab数据分析牛顿插值(matlab程序)

1.简述 一、牛顿插值法原理 1.牛顿插值多项式   定义牛顿插值多项式为&#xff1a; N n ( x ) a 0 a 1 ( x − x 0 ) a 2 ( x − x 0 ) ( x − x 1 ) ⋯ a n ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) N_n\left(x\right)a_0a_1\left(x-x_0\right)a_2\left(x-x_0\…

SpringCloud【负载均衡策略、OpenFeign概述、入门案列、日志增强 、超时机制 】(三)

目录 客户端负载均衡_负载均衡策略 服务接口调用_OpenFeign概述 服务接口调用OpenFeign_入门案列 服务接口调用OpenFeign_日志增强 服务接口调用OpenFeign_超时机制 客户端负载均衡_负载均衡策略 以前的Ribbon有多种负载均衡策略 RandomRule - 随性而为 解释&#xff…

物联网如何为智慧城市提供动力

智慧城市可以创造一个基础设施顺畅、效率提升的乌托邦&#xff0c;改善城市地区的生活质量&#xff0c;促进当地经济发展。 其影响意义重大&#xff0c;预计到 2024 年智慧城市基础设施的收入将超过 1000 亿美元。 从改善公共交通到解决犯罪问题和提高能源效率——应有尽有&am…

2023年杭电多校第一场-E.Cyclically Isomorphic题解

样例&#xff1a; 输入&#xff1a; 2 2 2 ab ba 1 1 2 4 3 aab baa bba bab 6 1 2 1 3 1 4 2 3 2 4 3 4 输出&#xff1a; Yes Yes No No No No Yes 题目大意&#xff1a; 给定一个字符串数组&#xff0c;每次查询两个字符串是否可以通过一个字符串循环右移可以变成另一个字…