Получение 1005 ошибки ограничения при создании таблицы - PullRequest
0 голосов
/ 21 ноября 2018

Я делаю скрипт, который при чтении некоторых файлов 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 голосов
/ 21 ноября 2018

Как указано, сначала создайте таблицу user или, если это проблема, создайте все таблицы без ограничений внешнего ключа и обновите их после всех созданных таблиц

0 голосов
/ 21 ноября 2018

Я думаю, что проблема заключается в упорядочении запроса, посмотрите на эту строку:

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;

здесь вы ссылаетесь на таблицу user, которая не создана так, как запрос на создание user ниже и работает после первого запроса.

Итак, сначала создайте таблицу user, а затем таблицу tag.

...