2010-08-11 89 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小时后自行修复。 (当我醒来解决这个问题,它已经没了)