MYSQL 事务与锁

Mysql 参考手册

https://dev.mysql.com/doc/refman/5.7/en/load-data.html  

导读:

         什么是数据库事务?

         事务并发会带来哪些问题?

         事务隔离性与锁的关系?

         行锁原理与算法详解?

   什么是数据库事务?

       事务:

                数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;事务是一组不可再分割的操作集合(工作逻辑单元)。

       事务场景:

               典型事务场景:(转账)

               update user_account set balance =balance -100 where user=1;

    update user_account set balance =balance +100 where user=1;

      哪些引擎支持事务?

             MYSAM 不支持事务       innodb 支持事务

      事务:数据库默认情况是自动提交事务

               例如:update student set sname= '' where id = 1;

      手动提交事务的两种方式:

           方式一:

                    begin;

                        update student set sname= '' where id = 1;

                   commit;

          方式二:

    show variables like 'autocommit';

      set session autocommit = on  //on 自动提交   off 关闭自动提交

         update student set sname= '' where id = 1;

    commit;

 结束事务的两种方式:rollback;commit;

   事务的四大特性:ACRD

     原子性 :

    一致性:

    隔离性:

    持久性:

事务并发会带来哪些问题?

  事务并发的三大问题:

    脏读:一个事务读取到其他事务未提交的修改

    不可重复读:一个事务读取到其他事务已提交的更新删除

 

    幻读:一个事务读取到其他事务已提交的新增

 

事务并发的三大问题其实都是数据库读一致性问题,必须有数据库提供一定的事务隔离机制来解决。 

事务隔离级别

Mysql可以通过下诉API操作事务隔离级别:

查看系统隔离级别:
select @@global.tx_isolation;
查看当前会话隔离级别
select @@tx_isolation;
设置当前会话隔离级别
SET session TRANSACTION ISOLATION LEVEL serializable;
设置全局系统隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

 

myisam 表锁 innodb 表锁行锁

 

 

 意向锁相当于flag,不用查询表中是否有行锁。节省时间,提供效率

 

主键索引是特殊的唯一索引。主键不能未空,唯一可以有一个null

 

 

原文地址:https://www.cnblogs.com/hzxy-blog/p/11258850.html