"""
支付10
充值10 失败了
目标:
深圳-万州
中转方案:
1.深圳-广州
2.广州-武汉
3.武汉-万州
某一步出错了回滚,回退到原来的状态.
回滚-->滚回来的意思
事务:transaction
是一系列的sql语句操作
保证所有操作完全执行,如果成功一半,完全不执行,什么都不执行.全部执行成功了.
如果某一步失败了,会将前面成功的操作进行回滚,回到什么都不执行的状态.
原则:要么都执行成功,要么什么也不做
特性:ACID
A:原子性<atomicity>,不允许成功一半,失败一半的情况 回滚操作保证的
C:一致性<consistency>,数据库中不存在不一致状态,总是从一个一致性状态切换到另一个一致性状态.
I:隔离性<Isolation>,事务与事务,事务与外界是相互隔离的,隔离的意思是不可见的.外界不知道事务的状态,除非提交数据之后才能看到结果.
中间状态外界不可见
D:持久性<durability 耐久性,坚固,耐用>,一旦把数据提交之后,数据库将会永久保存,一旦提交之后就不允许回滚.但是并不包括硬件的概念.硬件原因导致的数据丢失,
这种情况并不包括.
两种状态:
rollback:回滚,回退
commit:提交
"""
# --------------------------开启操作/撤销/提交---------------------->
"""
开启事务:begin;或者 start transaction;
提交事务:commit;
回滚事务:rollback; --> 也叫撤销
开两个终端进行测试验证即可.
1.>begin;
2.>先在一个终端中A进行了insert,查询可以看到操作效果
3.>在另外一个终端中B却看不到操作效果
4.>重复1-3,然后在A终端中commit;B中也可以看到操作效果
事务只是适用于表数据的增删改.
注意:mysql的命令行中自动开启,自动提交
但是在pymysql模块中编程的时候是自动开启,手动提交<所以需要加commit()操作>
一旦执行了更新表数据的操作的时候会自动开启事务 update/delete/insert
1.>查看是否开启自动提交:
select @@autocommit;
@@--->系统变量
查看是否自动提交: 1 ---> 开启了自动提交 0 ---> 不是自动提交
select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
set autocommit=0,就关闭了自动提交.就需要我们自己去手动提交.
"""
# ------------------------------------------注意:----------------------------->
"""
删除库drop database 库; ,删除表 drop table 表; , alter table等操作是无法进行事务回滚的,事务回滚等操作只支持表中数据的增,删,改
"""