【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

相关文章

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

MYSQL事务死锁问题排查及解决方案

《MYSQL事务死锁问题排查及解决方案》:本文主要介绍Java服务报错日志的情况,并通过一系列排查和优化措施,最终发现并解决了服务假死的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录问题现象推测 1 - 客户端无错误重试配置推测 2 - 客户端超时时间过短推测 3 - mysql 版本问

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.