MariaDB/MySQL中使用表級鎖的存儲引擎(例如MyISAM、Aria(MariaDB對MyISAM引擎的改進,前身是MyISAM))在讀(select)、寫操作(insert、delete、update、replace)上有優先級的概念。默認情況下,寫操作的優先級高於讀操作。注:不適用於InnoDB存儲引擎。
以MyISAM為例。當有進程正在寫MyISAM表的時候,又有新的讀操作、寫操作出現,則會先執行完所有的寫操作,等寫完后才會讀表。實際上並非總是先執行完所有寫操作,因為有系統變量max_write_lock_count控制最大寫鎖數量,當這些數量的寫操作完成后會轉為執行讀操作。
所以,INSERT、LOAD DATA INFILE、UPDATE、REPLACE、DELETE語句都有LOW_PRIORITY關鍵字,用來降低對MyISAM存儲引擎的寫操作優先級,使得MariaDB先執行完所有的讀操作后再執行寫操作。而SELECT語句有HIGH_PRIORITY關鍵字,用來提高讀操作的優先級。除了這兩個關鍵字,還可以設置系統變量low_priority_updates=on來降低寫操作優先級。
唯一需要注意的是,INSERT語句不僅有LOW_PRIORITY,也有HIGH_PRIORITY。當使用INSERT HIGH_PRIORITY語句時,表示禁用INSERT的並發插入行為。