1.全局锁 全库逻辑备份
    set global read_only=1 只读(show global variables like “%read_only%”)
    flush table with read lock (FTWRL) 连接断开自动恢复
    拓展:—single—transaction 有事务引擎才可用 MVCC的支持 设置隔离级别为RR 并启动事务
    2.表级锁
    表锁 table lock 语法是
    lock table think_form read(能读不能写)
    lock table think_form write(不能读不能写)
    元数据锁MDL meta data lock 读锁不互斥 读写、写锁之间互斥
    对表增删改查 加MDL读锁
    对表做结构变更 加MDL写锁

    事务中的 MDL 锁,在语句执行开始时申请,但是语句结束后并不会马上释放,而会等到整个事务提交后再释放。

    3.行锁 各个引擎自己实现

    在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。尽量将可能造成锁冲突、影响并发度的锁往后放。

    1. 减少访问相同资源的并发量来减少死锁,可以临时把死锁检测关掉、在客户端/数据库服务端/mysql控制并发度、将一行改为逻辑上的多行