Heim > Datenbank > MySQL-Tutorial > 使用mysql遇到的问题_MySQL

使用mysql遇到的问题_MySQL

WBOY
Freigeben: 2016-06-01 13:26:47
Original
925 Leute haben es durchsucht

bitsCN.com

1. 幻读。很多书和blog都提到mysql 的 tx_isolate (事务隔离)为repeatable read. 并且Mysql做了next-key lock的事情防止幻读。但是如果你直接在事务中使用

SELECT * from [table]; 
Nach dem Login kopieren
SELECT * from [table] for update;SELECT * from [table] lock in share mode;
Nach dem Login kopieren

另外介绍一下幻读:

幻读就是当一个事务进行查询时没有发现该记录,或者没有发现该记录被更改。结果在正在插入该记录或者真正要改该记录时,发现这条记录已经被其他事务改过了。

例如

事务1, select * from [table];

这时进行事务2, insert into [table] select xx; commit;

事务1 再执行 select * from [table]; 这里是没有 事务2 的数据的。

这里只要事务1再次执行 insert into [table] select xx; 这样就发现这个行已经存在了;这就是幻读。

2. 另外发现update的一个问题。如果使用事务, 首先select 数据然后再使用该数据进行update,有可能会有问题。一般使用 update [table] set col = col + value where ...这种形式进行更新,比select col from [table]; 取到col然后再进行update [table] set col = 刚才select 出的col value + value; 这样更加正确,因为update自身可以加写锁。保证了不会幻读。

3. 另外一个问题涉及到 limit. 例如 select * from [table] limit [len] offset [offset]; 如果这里offset比较小,那么这样做是可以的。如果这里offset很大,那么这样做类似于扫表。这里需要使用where子句来加速。

bitsCN.com
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage