数据库-事务

"""
支付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等操作是无法进行事务回滚的,事务回滚等操作只支持表中数据的增,删,改
"""
原文地址:https://www.cnblogs.com/huaibin/p/12100610.html