InnoDB表與MyISAM表的最大不同,一是支持事務(TRANCSACTION),二是可以有條件的使用行鎖。
InnoDB行鎖是通過給索引加鎖來實現的,也就是,只有通過索引條件檢索數據時,InnoDB才能使用行級鎖,否則使用表鎖。
InnoDB有兩種模式的行鎖:
1. 共享讀鎖(S鎖),獲得鎖的事務可以讀被加鎖的數據行,其他事務也可以讀這些數據行,但阻止其他事務獲得相同數據集的排他寫鎖
select * from table_name where ... lock in share mode;
2. 排他寫鎖(X鎖),獲得鎖的事務可以讀寫被加鎖的數據行,其他事務對這些數據行不可讀也不可寫,即阻止其他事務取得相同數據集的共享讀鎖和排他寫鎖
select * from table_name where ... for update;