本文主要是介绍【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加密事务【中文版】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!