""" 支付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等操作是无法进行事务回滚的,事务回滚等操作只支持表中数据的增,删,改 """