2017-03-19 31 views
2

我目前正在使用一些數據庫,我正在嘗試爲它們手動創建錯誤,以便我可以解決它們。我不確定我是否會遇到修復這些錯誤的任何問題,但我並不確定如何在第一時間創建錯誤。在MySQL中創建超時和死鎖錯誤

而不是終端我正在使用MySQL Workbench,我試圖創建一個場景,我會遇到超時錯誤和死鎖錯誤。

我知道如果我在終端中發生超時錯誤,我會登錄兩次以創建兩個實例,然後對兩個人下的同一個數據庫進行修改並嘗試提交。

你已經可以用MySQL Workbench做這麼多事了我想知道是否有任何可行的方式讓我只用工作臺中的代碼複製這個動作,而不是經常打開終端的兩個實例。

回答

1

只有連接到MySQL的連接打開時,無法生成鎖定超時或死鎖。

但是您可以在MySQL Workbench中兩次打開相同的連接配置文件。您可以打開兩個(或更多)選項卡,並且每個都有自己的連接。然後,您可以在每個選項卡中啓動事務並嘗試鎖定超時和死鎖。

我證明了這一點通過創建一個表test.emp1

CREATE TABLE `emp1` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` text, 
    `date` date DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 
INSERT INTO `emp1` SET `name`='me', `date`=CURRENT_DATE(); 
INSERT INTO `emp1` SET `name`='you', `date`=CURRENT_DATE(); 

然後我開了兩個標籤,以便在工作臺我的本地MySQL實例。

在標籤中選擇一個,我跑:

begin; 
update emp1 set name='me2' where id=1; 
select sleep(10); 
update emp1 set name='you2' where id=2; 

在第二個選項卡,我跑:在第一個選項卡,然後在睡眠(10)完成之前

begin; 
update emp1 set name='you2' where id=2; 
select sleep(10); 
update emp1 set name='me2' where id=1; 

點擊執行,點擊在第二個選項卡中執行。

enter image description here

瞧!第二個選項卡上的死鎖。第一個選項卡上的事務成功。

就我個人而言,我覺得用終端窗口做這個更好,因爲我可以並排排列它們,而不是一次一個查看標籤。

+0

謝謝你的幫助!我會試試看看它是否有效。 –

+0

@SmilodonFatalis我很樂意提供幫助。提醒一下,堆棧溢出習慣性地給出幫助你的答案的贊成,並檢查最有幫助的答案的「接受」複選標記。 –

+0

我確實讓你高興,但我的聲望不到15。因此,無法公開看待upvote。 –