【WEEK6】 【DAY7】MD5加密事务【中文版】

2024-04-07 19:28

本文主要是介绍【WEEK6】 【DAY7】MD5加密事务【中文版】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2024.4.7 Sunday
接上文【WEEK6】 【DAY3】MySQL函数【中文版】

目录

    • 5.3.MD5加密
      • 5.3.1.简介
      • 5.3.2.测试MD5加密
        • 5.3.2.1.明文密码
        • 5.3.2.2.实现数据加密
        • 5.3.2.3.Id为1的加密
        • 5.3.2.4.全部密码加密
        • 5.3.2.5.插入时加密
        • 5.3.2.6.校验加密后的语句
    • 5.4.小结
  • 6.事务和索引
    • 6.1.什么是事务
    • 6.2.事务的ACID原则
      • 6.2.1.原子性(atomicity,或称不可分割性)
      • 6.2.2.一致性(consistency):最终一致性(能量守恒)
      • 6.2.3.隔离性(isolation,又称独立性)
      • 6.2.4.持久性(durability)
      • 6.2.5.隔离导致的问题
    • 6.3.基本语法
    • 6.4.模拟场景
      • 6.4.1.建表、插入数据
      • 6.4.2.模拟转账

5.3.MD5加密

5.3.1.简介

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
不可逆

5.3.2.测试MD5加密

(先创建一个表)

-- MD5 --
-- 测试MD5加密
CREATE TABLE `testmd5`(`id` INT(4) NOT NULL,`name` VARCHAR(20) NOT NULL,`pwd` VARCHAR(50) NOT NULL,PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8

在这里插入图片描述

5.3.2.1.明文密码
-- 明文密码
INSERT INTO testmd5 VALUES (1, 'ZHANGSAN', '123456'),(2, 'LISI', '123456'),(3, 'WANGWU', '123456')

在这里插入图片描述

5.3.2.2.实现数据加密
5.3.2.3.Id为1的加密
-- 加密
UPDATE testmd5 SET pwd = MD5(pwd) WHERE id = 1

在这里插入图片描述

5.3.2.4.全部密码加密
-- 全部密码加密
UPDATE testmd5 SET pwd = MD5(pwd)

在这里插入图片描述

5.3.2.5.插入时加密
-- 插入时加密
INSERT INTO testmd5 VALUES (4, 'xiaoming', MD5('123456'))

在这里插入图片描述

5.3.2.6.校验加密后的语句
-- 如何校验:将用户传递进来的密码进行MD5加密,然后进行对比加密后的值(相同的值加密次数又一样时,得出的加密结果就完全相同)
SELECT * FROM testmd5 WHERE `name` = 'xiaoming' AND pwd = MD5('123456')

在这里插入图片描述

5.4.小结

在这里插入图片描述

 -- ================ 内置函数 ================-- 数值函数abs(x)            -- 绝对值 abs(-10.9) = 10format(x, d)    -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46ceil(x)            -- 向上取整 ceil(10.1) = 11floor(x)        -- 向下取整 floor (10.1) = 10round(x)        -- 四舍五入去整mod(m, n)        -- m%n m mod n 求余 10%3=1pi()            -- 获得圆周率pow(m, n)        -- m^nsqrt(x)            -- 算术平方根rand()            -- 随机数truncate(x, d)    -- 截取d位小数-- 时间日期函数now(), current_timestamp();     -- 当前日期时间current_date();                    -- 当前日期current_time();                    -- 当前时间date('yyyy-mm-dd hh:ii:ss');    -- 获取日期部分time('yyyy-mm-dd hh:ii:ss');    -- 获取时间部分date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j');    -- 格式化时间unix_timestamp();                -- 获得unix时间戳from_unixtime();                -- 从时间戳获得时间-- 字符串函数length(string)            -- string长度,字节char_length(string)        -- string的字符个数substring(str, position [,length])        -- 从str的position开始,取length个字符replace(str ,search_str ,replace_str)    -- 在str中用replace_str替换search_strinstr(string ,substring)    -- 返回substring首次在string中出现的位置concat(string [,...])    -- 连接字串charset(str)            -- 返回字串字符集lcase(string)            -- 转换成小写left(string, length)    -- 从string2中的左边起取length个字符load_file(file_name)    -- 从文件读取内容locate(substring, string [,start_position])    -- 同instr,但可指定开始位置lpad(string, length, pad)    -- 重复用pad加在string开头,直到字串长度为lengthltrim(string)            -- 去除前端空格repeat(string, count)    -- 重复count次rpad(string, length, pad)    --在str后用pad补充,直到长度为lengthrtrim(string)            -- 去除后端空格strcmp(string1 ,string2)    -- 逐字符比较两字串大小-- 聚合函数count()sum();max();min();avg();group_concat()-- 其他常用函数md5();default();

6.事务和索引

6.1.什么是事务

6.1.1.事务就是将一组SQL语句放在同一批次内去执行
6.1.2.如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
6.1.3.MySQL事务处理只支持InnoDB和BDB数据表类型

6.2.事务的ACID原则

https://www.jianshu.com/p/133d8b798271

6.2.1.原子性(atomicity,或称不可分割性)

整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态,就像这个事务从来没有执行过一样。

6.2.2.一致性(consistency):最终一致性(能量守恒)

一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。

6.2.3.隔离性(isolation,又称独立性)

隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据

6.2.4.持久性(durability)

事务完成(提交)以后,该事务对数据库所作的更改便持久地保存在数据库之中,并不会被回滚。

6.2.5.隔离导致的问题

脏读:指一个事务读取了另外一个事务未提交的数据。
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)
虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。(一般是行影响,eg多了一行)

6.3.基本语法

-- 事务 --
-- MySQL是默认开启事务自动提交的
SET autocommit = 0	-- 关闭
SET autocommit = 1	-- 开启(默认的)-- 手动处理事务(先关闭自动提交)
SET autocommit = 0-- 事务开始
START TRANSACTION	-- 标记一个事务的开始,从这行之后的sql都在同一个事务内
INSERT XX
INSERT XX-- (成功则)提交:持久化
COMMIT-- (失败则)回滚:回到原来的样子
ROLLBACK-- 事务结束(再开启自动提交)
SET autocommit = 1-- 保存点
SAVEPOINT 保存点名称	-- 设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点名称	-- 提供一个回滚到前一个保存点的机会
RELEASE SAVEPOINT 保存点名称	-- 撤销已保存的保存点

在这里插入图片描述

6.4.模拟场景

/*
课堂测试题目A在线买一款价格为500元商品,网上银行转账.
A的银行卡余额为2000,然后给商家B支付500.
商家B一开始的银行卡余额为10000创建数据库shop和创建表account并插入2条数据
*/

6.4.1.建表、插入数据

#模拟场景
-- 转账
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shopCREATE TABLE `account`(`id` INT(3) NOT NULL AUTO_INCREMENT,`name` VARCHAR(30) NOT NULL,`money` DECIMAL(9,2) NOT NULL,PRIMARY KEY (`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8-- 初始化(插入)相关数据
INSERT INTO account(`name`, `money`)
VALUES ('A', 2000.00),('B', 1000.00)

6.4.2.模拟转账

-- 模拟转账:事务(用空行隔开的要分批执行)
SET autocommit = 0;	-- 关闭自动提交START TRANSACTION	-- 开启一个事务UPDATE account SET money = money-500 WHERE `name` = 'A';	-- A减500
UPDATE account SET money = money+500 WHERE `name` = 'B';	-- B加500COMMIT;	-- 提交事务
ROLLBACK;	-- 回滚(只有在没有运行‘提交事务’之前才能够回滚成功)SET autocommit = 1; -- 恢复默认值

这篇关于【WEEK6】 【DAY7】MD5加密事务【中文版】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883454

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

MySQL中的事务隔离级别详解

《MySQL中的事务隔离级别详解》在MySQL中,事务(Transaction)是一个执行单元,它要么完全执行,要么完全回滚,以保证数据的完整性和一致性,下面给大家介绍MySQL中的事务隔离级别详解,... 目录一、事务并发问题二、mysql 事务隔离级别1. READ UNCOMMITTED(读未提交)2

Java如何将文件内容转换为MD5哈希值

《Java如何将文件内容转换为MD5哈希值》:本文主要介绍Java如何将文件内容转换为MD5哈希值的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java文件内容转换为MD5哈希值一个完整的Java示例代码代码解释注意事项总结Java文件内容转换为MD5

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti