2010-08-11 91 views
2

更新數據庫中的某一行時,會出現鎖定超時。其他行更新沒關係。MySQL InnoDB解鎖一行

#1205 - Lock wait timeout exceeded; try restarting transaction 

我該如何解鎖這個特定的行?

以下是兩個相關的表格。我正在嘗試更新用戶的電子郵件。我不認爲租客應該引起任何問題。

CREATE TABLE IF NOT EXISTS `mydb`.`user` (
    `username` VARCHAR(45) NOT NULL , 
    `email` VARCHAR(60) NOT NULL , 
    `password` VARCHAR(45) NOT NULL , 
    `created` TIMESTAMP NULL DEFAULT NULL , 
    `last_login` TIMESTAMP NULL , 
    PRIMARY KEY (`username`)) 

ENGINE = InnoDB; 


CREATE TABLE IF NOT EXISTS `mydb`.`tenant` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `username` VARCHAR(45) NOT NULL , 
    `address` VARCHAR(90) NULL , 
    `company` VARCHAR(45) NULL , 
    `phone` VARCHAR(25) NOT NULL , 
    `fax` VARCHAR(25) NULL , 
    `notes` TEXT NULL , 
    `contacts` TEXT NULL , 
    PRIMARY KEY (`id`) , 
    INDEX `fk_tenant_user1` (`username` ASC) , 
    CONSTRAINT `fk_tenant_user1` 
    FOREIGN KEY (`username`) 
    REFERENCES `mydb`.`user` (`username`) 
    ON DELETE CASCADE 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

回答

5

我結束了剛剛運行FLUSH TABLE user現在看起來很好。

+0

救生員,謝謝,我在生產中遇到同樣的問題! – 2013-12-13 19:00:05

2

嘗試運行在交互式MySQL客戶端執行以下操作:

SHOW ENGINE INNODB STATUS\G 

,並期待在當前打開的事務。看看他們中的一個是否導致該行被鎖定。

+0

我在phpmyadmin中發現了一個名爲flush的操作。行不再鎖定。 – Keyo 2010-08-11 04:38:55

0

在我的情況下,MySql在6-7小時後自行修復。 (當我醒來解決這個問題,它已經沒了)