创建时出现 1005 约束错误 table
Getting 1005 constraint error on create table
我正在制作一个脚本,读取一些 php 文件创建一个 SQL 文件。我快完成了,但是我收到一个 MySQL 错误,我无法弄明白:(
这是 SQL 代码:
CREATE TABLE `tag` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Id único de cada tag',
`name` VARCHAR(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'Nombre de la tag',
`id_user` INT(11) NOT NULL COMMENT 'Id del usuario',
`created_at` DATETIME NOT NULL COMMENT 'Fecha de creación del registro',
`updated_at` DATETIME NULL COMMENT 'Fecha de última modificación del registro',
PRIMARY KEY (`id`),
KEY `fk_tag_user_idx` (`id_user`),
CONSTRAINT `fk_tag_user` FOREIGN KEY (`id_user`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Id único de un usuario',
`user` VARCHAR(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'Nombre de usuario',
`pass` VARCHAR(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'Contraseña del usuario',
`num_photos` INT(11) NOT NULL DEFAULT '0' COMMENT 'Número de fotos de un usuario',
`score` FLOAT NOT NULL DEFAULT '0' COMMENT 'Puntuación del usuario',
`active` TINYINT(1) NOT NULL DEFAULT '1' COMMENT 'Usuario activo 1 o no 0',
`last_login` DATETIME NOT NULL COMMENT 'Fecha de la última vez que inició sesión',
`notes` TEXT NOT NULL DEFAULT '' COMMENT 'Notas sobre el usuario',
`created_at` DATETIME NOT NULL COMMENT 'Fecha de creación del registro',
`updated_at` DATETIME NULL COMMENT 'Fecha de última modificación del registro',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
还有更多的表,但这是前两个,它已经崩溃了:
#1005: Can't create table `tag` (Error: 150)
脚本以SET FOREIGN_KEY_CHECKS = 0;
开始,以SET FOREIGN_KEY_CHECKS = 1;
结束
任何帮助将不胜感激,谢谢!!
我认为问题出在查询的顺序上,查看这一行:
KEY `fk_tag_user_idx` (`id_user`),
CONSTRAINT `fk_tag_user` FOREIGN KEY (`id_user`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
此处您指的是 table user
,它不会被创建,因为创建 user
的查询在下面并且在第一次查询之后运行。
所以先创建 user
table 然后 tag
table.
如前所述,首先创建 user
table,或者,如果有问题,创建所有没有外键约束的 table 并在所有创建 [= 之后更新它们13=]s
我正在制作一个脚本,读取一些 php 文件创建一个 SQL 文件。我快完成了,但是我收到一个 MySQL 错误,我无法弄明白:(
这是 SQL 代码:
CREATE TABLE `tag` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Id único de cada tag',
`name` VARCHAR(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'Nombre de la tag',
`id_user` INT(11) NOT NULL COMMENT 'Id del usuario',
`created_at` DATETIME NOT NULL COMMENT 'Fecha de creación del registro',
`updated_at` DATETIME NULL COMMENT 'Fecha de última modificación del registro',
PRIMARY KEY (`id`),
KEY `fk_tag_user_idx` (`id_user`),
CONSTRAINT `fk_tag_user` FOREIGN KEY (`id_user`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Id único de un usuario',
`user` VARCHAR(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'Nombre de usuario',
`pass` VARCHAR(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'Contraseña del usuario',
`num_photos` INT(11) NOT NULL DEFAULT '0' COMMENT 'Número de fotos de un usuario',
`score` FLOAT NOT NULL DEFAULT '0' COMMENT 'Puntuación del usuario',
`active` TINYINT(1) NOT NULL DEFAULT '1' COMMENT 'Usuario activo 1 o no 0',
`last_login` DATETIME NOT NULL COMMENT 'Fecha de la última vez que inició sesión',
`notes` TEXT NOT NULL DEFAULT '' COMMENT 'Notas sobre el usuario',
`created_at` DATETIME NOT NULL COMMENT 'Fecha de creación del registro',
`updated_at` DATETIME NULL COMMENT 'Fecha de última modificación del registro',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
还有更多的表,但这是前两个,它已经崩溃了:
#1005: Can't create table `tag` (Error: 150)
脚本以SET FOREIGN_KEY_CHECKS = 0;
开始,以SET FOREIGN_KEY_CHECKS = 1;
结束
任何帮助将不胜感激,谢谢!!
我认为问题出在查询的顺序上,查看这一行:
KEY `fk_tag_user_idx` (`id_user`),
CONSTRAINT `fk_tag_user` FOREIGN KEY (`id_user`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
此处您指的是 table user
,它不会被创建,因为创建 user
的查询在下面并且在第一次查询之后运行。
所以先创建 user
table 然后 tag
table.
如前所述,首先创建 user
table,或者,如果有问题,创建所有没有外键约束的 table 并在所有创建 [= 之后更新它们13=]s