1-事务机制(Transaction)
- 事务:是一个或者多个sql语句组成的整体,要么全部执行成功,要么全部执行失败
- 事务机制:就是避免写入直接操作文件,利用日志空间来写实现间接写入
- mysql总共有5种日志:redo日志和undo日志与事务有关
- 对数据库进行操作---拷贝数据--->undo日志----记录修改------>redo日志-------->同步数据到数据库
2-管理事
- 默认情况下,mysql执行每条sql语句都会自动开启和提交事务
- 多条sql就需要我们手动管理事务
- 手动事务整个过程:
-
-
-
-
- 开启事务:start transaction
- sql语句(一条或者多条)
- 提交事务commit | 回滚事务rollback
-
-
-
3-事务的特性
- 原子性:一个事务中要么所有的操作全部成功,要不全部失败,不可能停留在某一个状态。(原子不可分割)
- 一致性:事务的结果都必须保持一致,不管在任何的给定时间、并发多少事务。(要求并发的时候,并发就是比如大家同时在对数据库进行操作,不会出现歧义,比如大家都在各种转账,A转给B,B转给C,C转给A,无论怎么操作,银行(数据库)的钱的总和不会变多,或者变少)
- 隔离性:要求事务不受其他并发事务的影响。(比如我对数据库的操作,其他人也在操作,但是就好像就我一个人在操作,别人是看不到我在操作的)
- 持久性:事务一旦提交,结果是永久的。(如果有突然电脑关机,我们的可以依靠查看日志来完成数据的持久化)
4-事务的四个隔离级别
- 读取未提交的数据:read uncommitted
- 读取已提交的数据:read committed
- 重复读取(mysql默认):repeatable read
- 序列化:serializable
5-修改事务的级别
- session:会话,比如你打开一个浏览器的页面就是一个会话
- 读取其他事务未提交的数据:set session tranction isolation level read uncommitted;
(适合在购票系统,如果你和其他人同时抢购一张票,你看到的时候还有票,但是进行购买的时候,却提醒你没有票了,这样的情况就令人很烦,这时候就可以改变事务的级别,改变后就可以看到其他事务(用户)对将要进行购买,只是停留在支付的阶段,这时你就可以看到票没有了,你就不会去购买了)
- 读取其他事务提交的数据:set session tranction isolation level read commited;
(比如你在某平台购买了一个东西,价格99,但是你还没有支付,但是再刷新页面,商家把价格改成了110,但是没关系,如果将事务修改为这个,你读取的数据就是商家以前提交的99,不会是现在的)
- 事务在执行中反复读取数据,得到的结果是一致的,不会受其他事务影响(mysql默认):set session tranction isolation level repeatable read;
- 序列化,就是让事务逐一执行,只有一个事务结束后,下一个事务才能开始:set session tranction isolation serilalizable;
6-数据导出与备份
- 数据导出:就是单纯的数据(包含sql文件,文本文件)
- 数据备份:就是包含了数据文件,日志文件,索引文件...
- 导出sql文件命令:mysqldump -uroot -p 你的库名 > 你要保存到文件的地方
(mysqldump -uroot -p demo > D:/data/demo.sql)