表级锁:开销小,加锁快;不会出现死锁;锁力度大,发生锁冲突的几率最高,并发度最低。
    行级锁:开销大,加锁慢;会出现死锁,锁力度最小,发生锁冲突的几率最低,并发度最高。
    页面锁:开销和加锁时间介于表锁和行锁之间,会出现死锁,锁力度介于表锁和行锁之间,并发度一般。

    MyISAM引擎的锁
    1、表共享读锁
    添加共享读锁的语法:lock table 表名 read;
    开启session1 和session2,
    session1:中给表A添加共享读锁 lock table A read;
    session2:执行update A set id1=2 where id=1;(等待) insert语句同样等待
    session2:执行select from A;(正常)
    session2:执行select
    from B(正常)
    session1:执行select from A;(正常)
    session1:执行insert into A values(2,2);(报错)
    session1:执行update A set id1=2 where id=1;(报错)
    session1:执行A表添加别名select也会报错如:select aa.
    from A as aa(报错)
    session1:执行其他表的select update insert (报错)
    2、表独占写锁
    添加独占写锁语句:lock table 表名 write;
    开启session1和session2
    session1:中给表A添加独占写锁 lock table A WRITE;
    session1: insert into A values(4,3,3);(成功)
    session1: update A set id1=4 where id=4;(成功)
    session1: select from A;(成功)
    session2: select
    from A;(等待)
    session2:insert into A values(4,3,3);(等待)
    session2: update A set id1=4 where id=4;(等待)
    session2: update B set id1=4 where id=4;(成功)
    session1:update B set id1=4 where id=4;(失败)
    session1: select from B;(失败)
    *session2:
    select update 非被加锁表都可以执行成功
    总结
    1、Myisam的读锁操作不会堵塞其他用户对当前表的读操作,但会堵塞同一张表的写操作;
    2、Myisam的读操作,不会堵塞当前session对表的读,当对表进行修改会报错。
    3、一个session使用 lock table 命令给表A添加了读锁,这个sessionk可以查询锁定表的记录,更新和访问其他表提示错误
    4、另一个sessoin可以查询表中记录但是更新和修改出现等待。
    5、Myisam的写操作,则会阻塞其他用户对同一表进行查询和修改。
    6、Myisam的写操作,当前session可以对表做CRUD操作,对其他表进行操作会报错。

    Innodb
    1、行锁
    共享锁,读锁。当一个事务对某几行上读锁,允许其他事务对这几行数据进行读操作,但是不可进行写操作及不可以添加写锁,但是可以添加读锁。
    上共享锁的语法:lock in share mode
    例如:select from 表 where 条件 lock in share mode
    排它锁,写锁。当一个事务对某几行上写锁,不允许其他事务写,但允许读,更不允许其他事务对这几行数据上任何锁。
    上排它锁的语法 for update
    例如:select
    from 表 where 条件 for update

    注意:
    1、两个事务不能同时锁一个索引
    2、insert delete update 操作时会自动添加上排它锁
    3、必须有索引才能实现行锁,否则自动全表扫描。
    2、表锁
    与myisam差别不大