- MySQL事务
- 只有DML语句才支持事务
- 事务的原理
- 事务的四大特征ACID
- 事物的隔离性
- 自动提交
- 一个事务的流程
- MySQL远程登录
事务(Transaction):一个事务是一个完整的业务逻辑单元,不可再分;
只有DML语句才支持事务例:银行账户转账,A账户转给B账户10000,需要执行两条update语句
update 表名 set 字段=字段-10000 where 账户id=A;
update 表名 set 字段=字段+10000 where 账户id=B;
以上两条语句必须同时成功或者同时失败,不允许一条成功一条失败
要想保证以上语句同时成功或失败,必须使用数据库的"事务机制"
DML数据操作语言,操作表中的数据,和业务相连(insert/delete/update);
事物的存在是为了保证数据完整性和安全性;
事务的原理假设所有的业务能使用一条DML语句完成就不需要事务机制;
假设一个事儿,需要先执行一条insert,再执行一条update,最后执行delete
事务的四大特征ACID开启事务机制(开始)
执行insert语句—>执行成功后,执行记录到数据库的操作历史当中,并不会向文件中保存数据,不会真正的保存到硬盘上;
执行update语句–>…;
执行delete语句—>…;
提交事务commit或者回滚事务rollback(两者其一,事务都会结束)
A:原子性:事物的最小单元,不可再分;
C:一致性:事务必须保证多条DML语句同时成功或者失败;
I:隔离性:事务A与事务B之间具有隔离性;
D:持久性:最终数据必须持久化到硬盘文件上,事务才算结束;
事物的隔离性事物的隔离性可以分为4个:
| 第一级别 | 读未提交(read uncommitted) | 对方事务还没提交,当前事务可读取对方没提交的数据;存在脏读(Dirty Read)现象:表示读到了脏的数据(不稳定的数据) |
|---|---|---|
| 第二级别 | 读已提交(read committed) | 只能读取到对方事务提交后的数据,不可重复读,解决了脏读现象; |
| 第三级别 | 可重复读(repeatable read) | 解决了不可重复读问题,读取到的数据都是幻想; |
| 第四级别 | 序列化/串行化 | 解决了所有问题,效率低,需要事务排队; |
Oracle数据库默认隔离级别是:读已提交;
MySQL数据库默认隔离级别是:可重复读;
//设置事务的隔离级别 set global transaction isolation level read uncommitted;//读未提交 set global transaction isolation level read committed;//读已提交 set global transaction isolation level repeatable read;//可重复读 set global transaction isolation level serializable;//序列化或串行化 //查看事务隔离级别 select @@global.tx_isolation;自动提交
MySQL事务默认是自动提交的(执行任意一条DML语句提交一次)
一个事务的流程关闭自动提交开启事务:start transaction;
保存点:savepoint 自定义地点名;
回滚到指定位置:rollback 保存点;
//1.登录数据库; //2.打开数据库; //3.设置事务隔离级别; set global transaction isolation level 级别类型; //4.查询事务级别 select @@global.tx_isolation; //5.关闭自动提交 start transaction; //6.DML语句操作 //7.rollback回滚或commit提交MySQL远程登录
命令:mysql -hhost -uusername -ppassword
host:远程主机地址
username:用户名
password:密码



