回覆列表
-
1 # 使用者1601357187913038
-
2 # 無要囉嗦啦
如果使用的是myisam儲存引擎,用的是表級鎖,但是不支援事務。如果用的是innodb,則用的是行級鎖,如果要鎖表,一可以在該表刪掉所有的索引,二把事務等級改成序列化,三select * from table for update,或者在有讀該表的業務層程式碼加鎖。
-
3 # 愛可生雲資料庫
加鎖情況與死鎖原因分析
為方便大家復現,完整表結構和資料如下:
CREATE TABLE `t3` (`c1` int(11) NOT NULL AUTO_INCREMENT,`c2` int(11) DEFAULT NULL,PRIMARY KEY (`c1`),UNIQUE KEY `c2` (`c2`)) ENGINE=InnoDBinsert into t3 values(1,1),(15,15),(20,20);
在 session1 執行 commit 的瞬間,我們會看到 session2、session3 的其中一個報死鎖。這個死鎖是這樣產生的:
你說的鎖定是什麼意思,禁止修改,禁止刪除,禁止更新,是麼,如果是的話,你可以在mysql裡面建立一個觸發器來禁止刪除,下面一個示例,直接在mysql命令列執行一次就好了,永久性的,不需要重複執行 DROP TRIGGER IF EXISTS m; CREATE TRIGGER 觸發器名字 AFTER DELETE ON 表名 FOR EACH ROW BEGIN DECLARE msg VARCHAR (255); IF old.count = 1 THEN -- old為偽記錄 SET msg = "超級管理員不能被刪除"; SIGNAL SQLSTATE 'HY000' SET mysql_errno = 22, message_text = msg;-- HY000為系統內部錯誤號,22為自定義的顯示錯誤號,msg為錯誤文字 END IF; END;