1
CryMeatel 2017-07-30 13:38:58 +08:00 via Android
读的话,为啥要加锁
|
2
ihuotui OP @CryMeatel java 要同步数据,mysql 中复杂一些,并发中的事务 保证 acid 又性能最好,mysql 建议看看书或者手册。
|
3
RLib 2017-07-30 15:31:04 +08:00
本来就是这么回事,有人在读你就不能写但能读,有人在写大家都不能读也不能写,以往普通锁就是不分青红皂白都锁起来
|
4
mikulch 2017-07-30 16:08:11 +08:00
mysql 的排他锁和共享锁和读锁和写锁可不是一样的东西。和 java 的读写锁也不太一样。共享锁和排他锁针对的是 innoDB 的行级锁。读锁和表锁针对的是 myisam 的表级锁。
不是一个东西无法比较。 另外,mysql 中数据被加上排他锁以后,会阻止该数据被获取独占锁和共享锁。但是允许该数据被读取。 所以数据被读取和获取共享锁不是一个概念。共享锁排他锁也不是读写分离的思想。只是一种并发访问安全性的解决方案而已。 |
5
RLib 2017-07-30 16:44:45 +08:00
@mikulch 既然题主说的站在高层看待问题,又为何要扯回具体锁上去。简单来看,一切锁不过是为了保证读和写的安全,为了保证性能,'读'和'写'这两个基本操作的锁肯定是要分开的,那么说共享锁、排他锁(独占锁)有读写分离的思想也无可厚非。另外,我对 mysql 了解不深,但是对你说的“ mysql 中数据被加上排他锁以后...但是允许该数据被读取”存在怀疑,你这里的所谓允许读取,大概是因为 select 时不会去尝试获取和检查锁,所以锁对它根本不起作用,不妨换个角度想,如果那样的话这里读取的安全该由什么保证呢?
|
6
ihuotui OP @mikulch 在说 mysql 我是指 innodb 引擎,在可重复读事务条件下,事务 a 对某行用了独占锁,其他事务(对同样一行,共享锁和排他锁)都会被阻塞,跟 java 的读写锁差不多就是写的时候变为串行,读并行。
|
7
mikulch 2017-07-31 00:29:00 +08:00
|