用户直接修改数据库是非常危险的,数据库将拷贝的数据放到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 > use demo;
sql > source backup.sql;

Navicat图形界面操作:

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

AES加密函数:

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

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

 AES解密函数:

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

AES_DECRYPT(加密结果,密钥字符串)
SELECT
    AES_DECRYPT(
        UNHEX("这里是16进制的加密结果"),
"和加密相同的密钥"
);

 

Posted on 2020-06-27 12:55  Schrodinger'sdoris  阅读(163)  评论(0编辑  收藏  举报