text: 锁机制，可以更好的保证数据的一致性（特别是高并发访问中），可以简单理解为，为需要的资源加一把锁，减少因多进程访问中操作（比如写入）冲突的概率。
  举个例子，某列有unique（唯一性）索引，但在高并发的写入操作下，可能会出现有相同值的情况。
  任何数据库都需要锁机制，MySQL也不例外。
  举个例子，假设有1和2两个进程，同时都需要a和b两个资源，那么a和b此时就是锁定争议资源。
  一次性封锁：在sql语句的开始执行的时候，已经预先知道要涉及到那些数据，然后全部锁住，在执行完毕之后，再全部解锁！（MyISAM引擎就是采用这样的方式）
  两段锁：是指每个事务的执行可以分为两个阶段：生长阶段（加锁阶段）和衰退阶段（解锁阶段）。（InnoDB引擎采用这样的方式）
  加锁阶段：在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁，在进行写操作之前要申请并获得X锁。加锁不成功，则事务进入等待状态，直到加锁成功才继续执行；
  解锁阶段：当事务释放了一个封锁以后，事务进入解锁阶段，在该阶段只能进行解锁操作不能再进行加锁操作。
  死锁是出现锁定争议资源时，可能出现的一种问题。
  p1进程此时持有a资源并且需要b资源，而匹配p2进程此时持有b资源并且需要a资源，那么就可能会出现，p1和p2都不肯释放手上的资源，并且互相等待对方释放资源的情况，此时如果没有外力作用，就会一直僵持下去。
  有p1、p2、p3共3个进程，p1向p2发送信息并接收p3的信息，p2向p3发送消息并接收p1的信息，p3向p1发送信息并接收p2的信息。
  如果设置为，每个进程先接收到消息再进行发送，那么所有的信息都无法发送（因为是无效的逻辑）。
  对整个表进行锁定，是最大颗粒度的锁定级别。
  获取锁和释放锁的速度快，占用系统资源少（配合后面理解）。
  出现死锁概率小（配合后面理解）。
  适用性上，表级锁更适合于以查询为主，只有少量按索引条件更新数据的应用。
  对MyISAM表的读操作，不会阻塞其他用户的对该表的读操作，但会阻塞对该表的写操作。
  对MyISAM表的写操作，会阻塞其他用户对该表的读和写操作。
  MyISAM引擎在执行查询语句（SELECT）前，会自动给涉及的所有表加读锁，在执行更新操作（UPDATE、DELETE、INSERT等）前，会自动给涉及的表加写锁。
  对行记录的锁定，是目前实现最小颗粒度的锁定级别。
  获取锁和释放锁的速度慢，占用系统资源较多（一个表有多个行，行级锁定加锁的数量会比表级锁定多）
  并发性能相对强（锁定记录[行]，同表其他行可以访问））。
  容易发生死锁（感觉上应该是加锁数量多，操作时接触锁的概率多，所以出现死锁的可能性多）。
  使用行级锁定的主要是InnoDB等事务性存储引擎。
  InnoDB引擎的行级锁是通过给索引上的索引项加锁来实现的，只有通过索引条件检索数据，InnoDB才使用行级锁，否则，InnoDB将使用表锁。
  并且为了实现表级锁和行级锁共存，InnoDB使用了意向锁（表级锁）的概念。
  MySQL中比较独特的一种锁定级别，锁定颗粒度>行级锁定，<表级锁定，并发性能和死锁的情况也介于两者之间。
  主要是BOB这类引擎在用。
  隐式锁：由系统自动控制加锁的时机和类型，用户无需操作，如MyISAM引擎中，操作都会使用表级锁。
  显式锁：开发人员手动添加的锁，需要控制加锁时机、锁粒度、解锁条件等。