MySQL学习笔记-MySQL事物

  1. MySQL事物
    1. ACID指出每个事物型RDBMS必须遵守4个属性,及原子性、一致性、孤立性和持久性。通过InnoDB和BDB类型表,MySQL事物能够完全满足事物安全的ACID测试,但不是所有类型都支持事物,如MyISAM类型表就不能支持事物,只能通过伪事物对表实现事物处理。
      默认情况下InnoDB表持久性最长,MyISAM表提供部分持久。
  2. MySQL事物的创建与存在周期
    1. 如果用户想让数据表支持事物处理能力,必须将当前操作数据表的类型设置为InnoDB或BDB。创建InnoDB或BDB类型的数据表,基本命令结构:
      CREATE TABLE table_name(field-defintions) TYPE = INNODEB/BDB;
      更改数据表类型:
      ALTER TABLE table_name TYPE = INNODB/BDB;
      注意:应用ALTER TABLE操作肯能会导致数据库中数据丢失,因此为了避免非预期结果出现,在使用该命令之前,用户需要创建一个表备份。
    2. 创建事物的一般过程:
      1. 初始化事物
        START TRANSACTION;
      2. 创建事物
      3. 应用SELECT语句查看数据是否被正确输入
      4. 提交事物
        COMMIT
      5. 撤销事物ROLLBACK1
        如果执行一个回滚操作,则在START TRANSACTION命令后的所有SQL语句都将执行回滚操作。如果开启事物后,没有提交事物,则事物默认为自动回滚状态,即不保存用户之前的任何操作。
      6. 事物的存在周期
        事物不支持嵌套功能,当用户第一个事物未结束又开始第二个事物时,则前一个事物会自动提交,同样MySQL中很多命令都会隐藏执行COMMIT 命令。
    3. MySQL行为
      1. 自动提交控制MySQL自动提交参数,可以通过AUTOCOMMIT变量更改提交模式
        SET AUTOCOMMIT=0;
        只有当用户输入COMMIT命令后,MySQL才将数据表中的资料提交到数据库中,如果不提交事物,而终止MySQL会话,数据库将会自动执行回滚操作。
        通过 select @@autocommit; 变量来查看当前自动提交状态
      2. 事物的孤立级
        SERIALIZABLE(序列化)
        REPEATABLE READ (可重读性)
        READ COMMITTED (提交后读)
        READ UNCOMMITTED(未提交读)

        1. 获取当前事物孤立级别的命令:
          SELECT @@tx_isolation;
        2. 修改事物的孤立级
          set global transaction isolation level 孤立级;
          如果用户要想修改事物的孤立级,必须首先获取SUPER优先权,以便用户可以顺利执行修改操作。
    4. 事物和性能
      1. 应用小事物
      2. 选择合适的孤立级
      3. 避免死锁
    5. MySQL伪事物
      1. 用表锁定代替事物
        • 为指定数据表添加锁定
          LOCK TABLES table_name lock_type,…
        • 用户执行数据表的操作,可以添加、删除或者更新部分数据。
        • 解锁
          UNLOCK TALBES;
      2. 应用表锁实现伪事物

标签