Dav*_*art 68 mysql mysql-error-1005
我必须在mysql中创建一个包含2个表的数据库,但是脚本因errno 150而失败(外键问题).我仔细检查了两个表上的外键字段是否相同,我找不到任何错误.
这是脚本:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
DROP SCHEMA IF EXISTS `testdb`;
CREATE SCHEMA IF NOT EXISTS `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
USE `testdb`;
DROP TABLE IF EXISTS `testdb`.`table1` ;
CREATE TABLE IF NOT EXISTS `testdb`.`table1` (
`id` INT UNSIGNED NOT NULL ,
`field1` VARCHAR(50) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
DROP TABLE IF EXISTS `testdb`.`table2` ;
CREATE TABLE IF NOT EXISTS `testdb`.`table2` (
`id` INT NOT NULL AUTO_INCREMENT ,
`field1` VARCHAR(50) NULL ,
`date` DATE NULL ,
`cnt` INT NULL ,
PRIMARY KEY (`id`) ,
INDEX `FK_table2_table1` (`field1` ASC) ,
CONSTRAINT `FK_table2_table1`
FOREIGN KEY (`field1`)
REFERENCES `testdb`.`table1` (`field1` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Run Code Online (Sandbox Code Playgroud)
我已经在Windows和Ubuntu中尝试了不同版本的Mysql并且无法正常工作.
有任何想法吗?非常感谢.
Qua*_*noi 54
table1.field1 没有定义索引.
需要对其进行FOREIGN KEY约束field1.
有了这个:
CREATE TABLE IF NOT EXISTS `testdb`.`table1` (
`id` INT UNSIGNED NOT NULL ,
`field1` VARCHAR(50) NULL ,
KEY ix_table1_field1 (field1),
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
然后一切都应该按预期工作.
小智 49
在使用MySQL Workbench和MySQL 5.5.27时,我遇到了类似的问题.在我的情况下,问题是INT类型字段.错误地在一个表中它是INT UNSIGNED并且在引用表中它是INT.
如果您错误地引用了引用表的名称,MySQL也会抛出此错误.我把头发拉了一会儿,直到我意识到我错过了一封信foreign key (column1) references mistyped_table(column1)