mysql事务的通信机制_MySQL-事务机制

用户直接修改数据库是非常危险的,数据库将拷贝的数据放到undo日志,undo日志将修改的数据记录到redo日志,再同步到数据库。

RDBMS=SQL语句+事务(ACID)

事务是一个或者多个SQL语句组成的整体,要么全部执行成功,要么全部执行失败。.

默认情况下,MySQL执行每条SQL语句都会自动开启和提交事务,为了让多条SQL语句纳入到一个事务之下,可以手动管理事务:

START TRANSACTION;

SQL 语句[COMMIT(提交事务)| ROLLBACK (事务回滚,SQL语句无效)]

在手动开启事务的情况下,删除和修改的数据都在redo文件中,不是直接操作数据库的数据,需要commit才能和数据库文件进行同步。

事务的ACID属性:

1.原子性 2.一致性 3.隔离性 4.持久性

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

一致性:不管在任何给定的时间,并发事务有多少,事务必须保证运行结果的一致性。

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

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

事务的四个隔离级别:

1. read uncommitted 读取未提交数据    2.read committed 读取已提交数据

3.repeatable 重复读取            4.serializable 序列化

1. read uncommitted 代表可以读取其他事务未提交的数据(买票)

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

2.read committed 代表只能读取其他事务提交的数据(银行存取款)

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

3.repeatable 代表事务在执行中反复读取数据,得到的结果是一致的,不会受其他事务影响(下单修改价格)

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

4.serializable 由于事务并发执行所带来的各种问题,前三种隔离级别只适用在某些业务场景中,但是序列化的隔离性,让事务逐一执行,就不会产生上述问题了。(牺牲数据库的并发性,少用)

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

数据导出的分类:

SQL文档/文本文档

导出SQL文件,使用mysqldump把业务数据导出成SQL文件,其中也包括了表结构

cmd: Mysqldump -uroot -p [no-data 表示只导出表结构] 逻辑库>路径

导入SQL文件:

sql > usedemo;

sql> source backup.sql;

Navicat图形界面操作:

转储表结构,导出表数据,运行SQL文件,导入表数据。当数据库字段值和数据很多的时候,跳过词法分析和语法优化,这样子效率高一点

AES加密函数:

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

AES_ENCRYPT(原始数据,密钥字符串)SELECTAES_ENCRYPT("你好世界","ABC123456");SELECT HEX(AES_ENCRYPT("你好世界","ABC123456"));#HEX函数用于转16进制

AES解密函数:

AES解密要使用与加密相同的密钥,才能解密出原始数据

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

UNHEX("这里是16进制的加密结果"),

"和加密相同的密钥"

);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值