在创建表时遇到1005约束错误

时间:2018-11-21 10:52:51

标签: mysql mysql-error-1005

我正在编写一个脚本,读取一些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;结束

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

我认为问题在于查询的顺序,请查看此行:

user

在这里您引用的表user尚未创建,只要要创建的查询user在下面,该表将在第一次查询后运行。

因此,首先创建tag表,然后再创建background-size: 100% 100% 表。

答案 1 :(得分:2)

如所说,首先创建user表,或者如果有问题,创建没有外键约束的所有表,并在所有创建表之后更新它们