MySQL是一個開源的關系型數據庫管理系統, 它有一個非常重要的特性——鎖。鎖主要用于控制并發訪問數據庫對象的情況,比如表、行和頁面等。當多個用戶同時向同一個表中寫入,并發訪問同一行時,MySQL會自動給表加鎖,以防止數據沖突。
MySQL在什么時候會給表加鎖呢?下面是MySQL表鎖的發生情況:
// 當執行ALTER TABLE、OPTIMIZE TABLE、RENAME TABLE、TRUNCATE TABLE、DROP TABLE等DDL操作時,MySQL會自動給表加鎖。 ALTER TABLE my_table ADD COLUMN my_column varchar(32); // 當執行INSERT、UPDATE、DELETE等DML操作時,MySQL會自動給表加鎖。 INSERT INTO my_table (my_column) VALUES ("hello world"); // 當執行SELECT ... FOR UPDATE語句時,MySQL會給查詢結果加鎖,保證不會被其他會話修改,直到當前事務結束。 START TRANSACTION; SELECT * FROM my_table WHERE id = 1 FOR UPDATE; UPDATE my_table SET my_column = "hi" WHERE id = 1; COMMIT;
因此,需要注意的是在并發高的情況下, MySQL的表鎖將會是一個性能瓶頸,因此在設計數據庫的時候要避免頻繁的DDL操作,以及在高并發情況下盡可能使用行級鎖。
上一篇css中兩塊之間高度
下一篇css中代碼hover