1. 程式人生 > >事務中的鎖,行鎖與表鎖

事務中的鎖,行鎖與表鎖

當執行事務時,相當於執行了鎖,來保持資料的一致性,但是鎖分多種,有行鎖,表鎖。行鎖就是隻鎖定那一行,那一條記錄,別的連線下的操作還可以操作這張表。表鎖就是鎖定整張表,只有當前連線執行完事務,才可以解鎖。

就效率而然,當然是行鎖好,適用與多執行緒和高併發的情況,不過行鎖對資料庫會帶來額外的開銷。表鎖高併發就差一點了,但單個的話快一點。

mysql為例,有索引並且使用了該索引當條件的時候就是行鎖沒有索引的時候就是表鎖innodb 的行鎖是在有索引的情況下,沒有索引的表是鎖定全表的.

鎖是對於別的連線來說,不是對於當前連線,即當前連可以一直不加rollbackcommit,一路更新,但是別的連線就不行,必須等加了鎖的連線釋放(

rollbackcommit)後才能更新,插入

建議:對於插入操作,一般加表鎖,但是對於修改和刪除操作,最好加行鎖,這樣在高併發時,不用等太久

加鎖方式:

select * from testlock where id=1 for update;——查詢加鎖,查詢時不允許更改,該語句在自動提交為off或事務中生效,相當於更改操作,模擬加鎖

update testlock name=name;——列=同一個列

更新操作,插入,刪除操作,在事務中均屬於加鎖