我必须在MySQL中创建一个包含两个表的数据库,但是该脚本因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;
我已经在Windows和Ubuntu中使用不同版本的MySQL进行了尝试,但无法正常工作。
有任何想法吗?
table1.field1 没有定义索引。
table1.field1
需要对施加FOREIGN KEY约束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;
然后一切都将按预期工作。