美文网首页
mysql 数据库事务

mysql 数据库事务

作者: 逍遥的石头 | 来源:发表于2023-06-17 15:19 被阅读0次

    一、sql语句类型

    1、DML(Data Manipulate Language):数据操作语言。对表中的数据进行增加INSERT、删除DELETE、修改UPDATE。

     2、DDL(Data Define Languge):数据定义语言。对数据库和表进行管理,例如创建、修改、删除等。

    二、事务定义

    事务(Transaction):一个最的不可分的工作单元,通常一个事务对应一个完整的业务。一个完整的业务需要批量DML语句共同联合完成。事务只和DML语句相关,或者说DML语句才有事务。这个和业务逻辑相关,有业务逻辑不同,DML语句的个数也不同。

    三、事务的四大特性(ACID)

    ACID是关系型数据库系统采纳的原则,其代表的含义分别是:

             (1) 原子性(Atomicity):原子性意味着数据库中的事务执行是作为原子,即不可再分。整个语句要么执行,要么不执行,不会有中间状态。

             (2) 一致性(Consistency): 事务在开始和结束时,应该始终满足一致性约束。比如系统要求A+B=100,那么事务如果改变了A的数值,则B的数值也要相应修改来满足这样一致性要求;

             (3) 隔离性(Isolation):如果有多个事务同时执行,彼此之间不需要知晓对方的存在,而且执行时互不影响,事务之间需要序列化执行,有时间顺序。数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时,由于交叉执行而导致数据的不一致;

             (4) 持久性(Durability):事务的持久性是指事务运行成功以后,对系统状态的更新是永久的,不会无缘无故回滚撤销。即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中.

    四、如何定义事务的开始和结束

    START TRANSACTION 

     [transaction_characteristic [, transaction_characteristic] ...]    

     transaction_characteristic: {

        WITH CONSISTENT SNAPSHOT  

    | READ WRITE  

    | READ ONLY

    }

    BEGIN [WORK]

    COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]

    ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]

    SET autocommit = {0 | 1}

    START TRANSACTION or BEGIN :开始一个新事务

    COMMIT :提交事务,将执行结果写入到数据库

    ROLLBACK:回滚事务, 回滚所有已经执行成功的sql语句。

    SET autocommit :设置自动提交模式。

    autocommit  设置为on  为自动提交事务模式。在自动提交模式下,如果没有start transaction显式地开始一个事务,那么每个sql语句都会被当做一个事务执行提交操作。

    五、事务实现底层技术和示意图

    undo日志:记录数据表修改前的状态,rollback基于undo日志实现。

    redo日志:记录数据表修改后的状态,commit基于redo日志实现。

    相关文章

      网友评论

          本文标题:mysql 数据库事务

          本文链接:https://www.haomeiwen.com/subject/mmbdydtx.html