锁有三种 页级锁 表级锁 行级锁  从字面上面 可以理解表锁和行锁
 页面锁是什么意思. 
不理解 还有什么时候需要用到锁. 
要用的时候怎么使用。自己在做项目的时候没用过 
还有一点
我的意思是说每当我select insert的时候 mysql会自动隐式加锁
last_insert_id() 很安全 多少人同时插入都能取出你自己插入那个id
那为什么有时候要显式加锁了 都用默认的不就好了吗 
LOCKE TABLE

解决方案 »

  1.   

    有没锁取决于你使用的表类型.
    其他的我复制一些给你参考Mysql行级锁可以在很多线程请求不同记录时减少冲突锁,有着诸多的优点,下面就让我们来一起了解一下Mysql行级锁和页级所的优缺点。如果想要在一个表上做大量的 INSERT 和 SELECT 操作,但是并行的插入却不可能时,可以将记录插入到临时表中,然后定期将临时表中的数据更新到实际的表里。可以用以下命令实现:    mysql> LOCK TABLES real_table WRITE, insert_table WRITE;  
         
        mysql> INSERT INTO real_table SELECT * FROM insert_table;  
         
        mysql> TRUNCATE TABLE insert_table;  
         
        mysql> UNLOCK TABLES;  InnoDB 使用Mysql行级锁锁,BDB 使用页级锁。对于 InnoDB 和 BDB 存储引擎来说,是可能产生死锁的。这是因为 InnoDB 会自动捕获行锁,BDB 会在执行 SQL 语句时捕获页锁的,而不是在事务的开始就这么做。Mysql行级锁锁的优点有:在很多线程请求不同记录时减少冲突锁。事务回滚时减少改变数据。使长时间对单独的一行记录加锁成为可能。Mysql行级锁锁的缺点有:比页级锁和表级锁消耗更多的内存。当在大量表中使用时,比页级锁和表级锁更慢,因为他需要请求更多的所资源。当需要频繁对大部分数据做 GROUP BY 操作或者需要频繁扫描整个表时,就明显的比其它锁更糟糕。使用更高层的锁的话,就能更方便的支持各种不同的类型应用程序,因为这种锁的开销比行级锁小多了。表级锁在下列几种情况下比页级锁和行级锁更优越:很多操作都是读表。在严格条件的索引上读取和更新,当更新或者删除可以用单独的索引来读取得到时:    UPDATE tbl_name SET column=value WHERE unique_key_col=key_value;  
         
        DELETE FROM tbl_name WHERE unique_key_col=key_value;  SELECT 和 INSERT 语句并发的执行,但是只有很少的 UPDATE 和 DELETE 语句。很多的扫描表和对全表的 GROUP BY 操作,但是没有任何写表。表级锁和行级锁或页级锁之间的不同之处还在于:将同时有一个写和多个读的地方做版本(例如在MySQL中的并发插入)。也就是说,数据库/表支持根据开始访问数据时间点的不同支持各种不同的试图。其它名有:时间行程,写复制,或者是按需复制。
      

  2.   

    myisam 表锁 innodb 行锁 dbd 页锁  不要复制的 要自己的见解