zoukankan      html  css  js  c++  java
  • 事务的管理

    事务的基本流程:

    开启事务:start transaction;

    创建一个保存点:savepoint 保存点名

    回到保存点(根据具体情况):rollback to保存点名

    在MySQL上具体演示:

    mysql> start transaction; --开启事务
    
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> savepoint aa; --设置保存点aa
    
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into account values(1, '张三', 10); --添加一条记录
    
    Query OK, 1 row affected (0.00 sec)
    
    mysql> savepoint bb; -- 设置保存点bb
    
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into account values(2, '李四', 10000); --再添加一条记录
    
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from account; --两条记录都在了
    
    +----+--------+----------+
    
    | id | name | balance |
    
    +----+--------+----------+
    
    | 1 | 张三 | 10.00 |
    
    | 2 | 李四 | 10000.00 |
    
    +----+--------+----------+
    
    2 rows in set (0.00 sec)
    
    mysql> rollback to bb; -- 发现后来添加这一条记录是误操作。所以回滚到bb状态
    
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select * from account; -- 第二条记录没有了
    
    +----+--------+---------+
    
    | id | name | balance |
    
    +----+--------+---------+
    
    | 1 | 张三 | 10.00 |
    
    +----+--------+---------+
    
    1 row in set (0.03 sec)

    实务操作的注意事项:

    1、如果没有设置事务保存点,也可以回滚,只能回滚到事务的开始,直接使用rollback(前提是事务并没有被提交)

    2、如果一个事务被提交了(commit),则不能被回滚(rollback)

    3、刻意选择回退到哪个保存节点

    4、InnoDB支持事务,MyISAM不支持事务

    5、开始事务用 start transaction

    事务的隔离级别:

    当我们有多个客户端同时操作数据库中的某张表的时候,如何进行隔离操作?MySQL提供了隔离级别

    当这种情况发生的时候,MySQL提供了一种机制,可以让不同的事务在操作数据时候,具有隔离性,从而保证数据的一致性

    先来了解一下什么叫做“脏读”

    “脏读”是指当一个事务正在访问数据,并且对数据进行了修改,这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据

    举例:

    • 1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务)
    • 2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!
    • 3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000 像这样,Mary记取的工资数8000是一个脏数据

     

    添加版本号
    乐观锁 无锁,客户端A读到v1,修改后将其置为v2,客户端B读到v2,与之前v1不一样(因为本来要将其改为v2的是客户端B),以此来区分
    只加不减,只要更新的时候发现比原来的版本号大,就需慎重

     

    事务的ACID特性

    原子性(Atomicity):

    事务是应用中最小的执行单位,就如原子是自然界的最小颗粒,具有不可再分的特征一样,事务是应用中不可再分 的最小逻辑执行体。

    一致性(Consistency):

    事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库只包含事务成功提交的结果 时,数据库处于一致性状态。如果系统运行发生中断,某个事务尚未完成而被迫中断,而改未完成的事务对数据库 所做的修改已被写入数据库,此时数据库就处于一种不正确(不一致)的状态。因此一致性是通过原子性来保证 的。

    隔离性(Isolation):

    各个事务的执行互不干扰,任意一个事务的内部操作对其他并发事务都是隔离的。也就是说,并发执行的事务之间 不能看到对方的中间状态,并发执行的事务之间不能互相影响。

    持久性(Durability):

    持久性是指一个事务一旦被提交,它对数据库所做的改变都要记录到永久存储其中(如:磁盘)。

  • 相关阅读:
    html_Dom
    html_javascript
    html_之css
    协程
    进程和线程的总结
    html_基础标签
    html_头部<meta>设置
    Python_queue单项队列
    Python_paramiko模块
    Python_多进程multiprocessing
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/11404450.html
Copyright © 2011-2022 走看看