并发导致的问题

    脏读 读取其他事务未提交数据
    不可重复读 前后多次读取,数据内容不一致(针对update操作)
    幻读 前后多次读取,数据总量不一致(针对insert和delete操作)

    四种隔离级别:用的最多的是RC和RR

    READ UNCOMMITTED 一个事务还没提交时,它做的变更就能被别的事务看到。
    READ COMMITTED 一个事务提交之后,它做的变更才会被其他事务看到。
    REPEATABLE READ 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。
    SERIALIZABLE “写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

    是否可以解决这些问题

    隔离级别 脏读 不可重复读 幻读
    read uncommitted 可能 可能 可能
    read committed 不可能 可能 可能
    repeatable read 不可能 不可能 可能
    serializable 不可能 不可能 可能

    知识点:

    1. 有些客户端,自动设置set autocommit=0,导致长事务,建议显示启动事务
    2. 使用commit work and chain提交,然后自动进入下一事务,不需要再显示启动事务
    3. 监控超过60秒的长事务:

    select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60;

    1. SET MAX_EXECUTION_TIME=xxxx; 单位毫秒,用来控制select的最大执行时间(5.7)

    5.6 是max_statement_time

    1. 使用pt-kill 快速杀会话
    2. 在测试阶段,尽量开启general_log, 及时发现问题