Ошибка SQL-запроса - не видите почему? - PullRequest
0 голосов
/ 21 июня 2011

В настоящее время я читаю эту электронную книгу приложения Yii: http://www.packtpub.com/agile-web-application-development-yii11-and-php5/book - и у меня возникла проблема с вводом инструкций DDL / SQL из учебников в PHPMyAdmin без появления ошибок.

Будет ли кто-то достаточно любезен, чтобы пролить свет на то, почему следующий синтаксис недействителен? Это может быть что-то простое, но я не вижу этого:

Оператор SQL:

ALTER TABLE tbl_issue
ADD CONSTRAINT FK_issue_project FOREIGN KEY (`project_id`)
REFERENCES tbl_project(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

ALTER TABLE tbl_issue
ADD CONSTRAINT `FK_issue_owner` FOREIGN KEY (`owner_id`)
REFERENCES tbl_user(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

ALTER TABLE tbl_issue
ADD CONSTRAINT `FK_issue_requester` FOREIGN KEY (`requester_id`)
REFERENCES tbl_user(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

ALTER TABLE tbl_project_user_assignment
ADD CONSTRAINT `FK_project_user` FOREIGN KEY (`project_id`)
REFERENCES tbl_project(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

ALTER TABLE tbl_project_user_assignment 
ADD CONSTRAINT `FK_user_project` FOREIGN KEY (`user_id`)
REFERENCES tbl_user(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

INSERT INTO tbl_user (`email`, `username`, `password`)
  VALUES
(`test1@notanaddress.com`,`Test_User_One`, MD5(`test1`)),
(`test2@notanaddress.com`,`Test_User_Two`, MD5(`test2`));

Сообщение об ошибке

Error
SQL query:

ALTER TABLE tbl_issue
ADD CONSTRAINT FK_issue_project FOREIGN KEY (  `project_id` ) 
REFERENCES tbl_project(  `id` ) ON DELETE CASCADE ON UPDATE RESTRICT ;


MySQL said:

#1005 - Can't create table 'trackstar_test.#sql-c78_127' (errno: 121) (<a    
href="server_engines.php?engine=InnoDB&amp;page=Status&amp;
token=252c0553975923580ca430b6e98c4243">Details...</a>)

Примечание:

  • Все таблицы в базе данных установлены как innodb в качестве механизма хранения.
  • Я пытался использовать разные имена внешних ключей для каждого FK, но получаю ту же ошибку.

Обновление:

  • Не найдя решения проблемы, я удалил БД, удалил Xampp, а затем переделал все заново. Кажется, сейчас работает. Извините, что не могу сообщить будущим читателям, в чем именно причина, но, скорее всего, это было связано с моей конфигурацией базы данных или информацией, которую я добавил к ней.

1 Ответ

0 голосов
/ 30 июня 2011

Фактическая проблема:

КАК вы читаете книгу, в

выполняется несколько операторов вставки / обновления
tbl_proect, 
tbl_issue

чем вы пытаетесь добавить ограничение внешнего ключа. который проверяет данные таблицы перед применением. Итак, вот настоящая ошибка, может быть, ваши таблицы содержат несколько записей, которые нарушают ограничения внешнего ключа. следовательно, phpmyadmin не позволяет вам изменять таблицу и генерирует сообщение об ошибке.

Решение:

TRUNCATE TABLE `tbl_project`
TRUNCATE TABLE `tbl_issue`

Сделай только одно, очисти все столы. Пустые столы. , И вот ваша проблема решена, теперь phpmyadmin позволяет вам запускать команды.

...