MySql innodb 出错: Error Code: 1005 Can't create table

发布时间:2013-11-11 07:25:03

Error Code: 1005 Can't create table (errno: 121)
这个是Innodb 创建外键的时候出现的问题


MySQL官方Error code解释:
原文链接:http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html
1005 (ER_CANT_CREATE_TABLE) 
多半是外键的 DataType 不匹配
Reference: http://blog.mclaughlinsoftware.com/2010/01/30/decoding-1005-on-mysql/
http://sql-info.de/mysql/referential-integrity.html

可以通过  mysql> SHOW engine innodb STATUS;
来查看innodb的警告信息。
对于errno: 121
Reference: http://stackoverflow.com/questions/4412693/sql-error-code-1005-with-error-number-121
根据里面的解释,有以下几种原因 
1、各个表的外键约束名有同名(Constraint/foreign key names are global to a database, so they cannot be reused in different tables)
2、以该名字命名的表之前创建过后来删除了,但是对应的.frm文件还留在磁盘上
3、主键名字在全数据库范围内不是唯一的
解决方法:检查外键约束名是否有重名的;各个表使用不同的外键约束名
 还有一种文件就是 把外键约束 set null 然后删掉啦,可是没有把对应的数据删掉;这个时候又想重新添上外键约束;解决方法是把之前外键约束的数据删掉,然后再添加,如:
    ALTER TABLE `pa`.`sl_tl_relation`
    
      ADD CONSTRAINT `correlation2trade_level`
    
      FOREIGN KEY (`TradeLevel` )
    
      REFERENCES `pa`.`trade_level` (`TradeLevelId` )
    
      ON DELETE NO ACTION
    
      ON UPDATE NO ACTION;