首页 > 技术文章 > 数据库之锁

liuyongbo 2017-12-25 19:51 原文

  数据库其实很小,只有表和数据。我们可以锁表,还可以单独锁某一行。这就是表锁和行锁。那到底什么是锁呢,为什么要锁呢。数据库只有两个操作,读写。锁就是来控制是否可以读写数据的。锁是一个标记,比如读某张表的时候,会在表上加读锁的标记,告诉其他的操作,这张表我正在读,同理,写也会有写锁。存储引擎要么支持表锁,要么支持行锁。

  表锁:比如论坛的用户表包括有用户发帖的内容,如果用的是MYISAM引擎,支持表锁,当有一个用户A想要写帖子,会在表上加写锁,B也要发帖,然而表用写锁标记了,这时就不能写了,也不能读这个表了,B就要等了,这样用户就很不开心了。表的读锁:A的帖子写好了,希望看看自己的帖子怎么样,会给表加读锁,B是可以读的,但是不能写。

  行锁:INNODB引擎,A写帖子的时候只写自己的行,其他人是可以写自己的行的,就是精细到某一行,不会影响其他用户的使用。我们看到别人的帖子不可能是别人写一个字我们就看到一个字的,所以说,写行锁,别人是不能读,也不能写的。读行锁,可以读,但同时不能写。

  可见,MYISAM引擎适合多读,少写的数据库。比较快,且不支持事务。INNODB适合多写少读的金钱的应用,事务性,且支持行锁。这样即安全,同时在多用户操作同一张表的时候不会出现其他人要排队的状况。各自写各自的就好了。

推荐阅读