Ошибка синтаксиса SQL (phpMyAdmin) - PullRequest
0 голосов
/ 21 мая 2011

Что не так с этим оператором SQL:

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

У меня есть таблицы с именами tbl_issue и tbl_user в базе данных с именем trackstar_dev.

phpMyAdmin сказал:

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

Ответы [ 3 ]

7 голосов
/ 21 мая 2011

Наиболее распространенной причиной этой ошибки является то, что ограничение внешнего ключа имеет то же имя, что и в другой таблице.Имена внешних ключей должны быть уникальными в базе данных (а не только на уровне таблицы).У вас есть requester_id в другой таблице в вашей базе данных?

2 голосов
/ 21 мая 2011

вы получите это сообщение, если вы пытаетесь добавить constraint с именем, которое уже используется где-то еще, c вы получите это сообщение, если вы пытаетесь добавить ограничение с именем, которое уже используется где-тоостальноепоменяй и все будет нормально :) 1002 *

1 голос
/ 15 ноября 2012

У меня была такая же проблема. Удалите все таблицы в своей базе данных, а затем используйте приведенный ниже код SQL, чтобы воссоздать их. Я предполагаю, что вы следуете примеру гибкой веб-разработки с Yii 1.1 и php 5

- Disable foreign keys
SET FOREIGN_KEY_CHECKS = 0 ;# MySQL returned an empty result set (i.e. zero rows).


-- Create tables section -------------------------------------------------

-- Table tbl_project

CREATE TABLE IF NOT EXISTS `tbl_project` (
`id` INTEGER NOT NULL auto_increment,
`name` varchar(128) NOT NULL,
`description` text NOT NULL,
`create_time` DATETIME default NULL,
`create_user_id` INTEGER default NULL,
`update_time` DATETIME default NULL,
`update_user_id` INTEGER default NULL,
 PRIMARY KEY  (`id`)
) ENGINE = InnoDB
;# MySQL returned an empty result set (i.e. zero rows).


-- DROP TABLE IF EXISTS `tbl_issue` ;

CREATE TABLE IF NOT EXISTS `tbl_issue` 
( 
`id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
`description` varchar(2000), 
`project_id` INTEGER,
`type_id` INTEGER,
`status_id` INTEGER,
`owner_id` INTEGER,
`requester_id` INTEGER,
`create_time` DATETIME,
`create_user_id` INTEGER,
`update_time` DATETIME,
`update_user_id` INTEGER  
) ENGINE = InnoDB
;# MySQL returned an empty result set (i.e. zero rows).


-- DROP TABLE IF EXISTS `tbl_user` ;

-- Table User

CREATE TABLE IF NOT EXISTS `tbl_user` 
(
`id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
`email` Varchar(256) NOT NULL,
`username` Varchar(256),
`password` Varchar(256),
`last_login_time` Datetime,
`create_time` DATETIME,
`create_user_id` INTEGER,
`update_time` DATETIME,
`update_user_id` INTEGER
) ENGINE = InnoDB
;# MySQL returned an empty result set (i.e. zero rows).


-- DROP TABLE IF EXISTS `tbl_project_user_assignment` ;

-- Table User

CREATE TABLE IF NOT EXISTS `tbl_project_user_assignment`
(
`project_id` Int(11) NOT NULL,
`user_id` Int(11) NOT NULL,
`create_time` DATETIME,
`create_user_id` INTEGER,
`update_time` DATETIME,
`update_user_id` INTEGER,
PRIMARY KEY (`project_id`,`user_id`)
) ENGINE = InnoDB
;# MySQL returned an empty result set (i.e. zero rows).



-- The Relationships 
ALTER TABLE `tbl_issue` ADD CONSTRAINT `FK_issue_project` FOREIGN KEY (`project_id`)       REFERENCES `tbl_project` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;# MySQL returned an  empty result set (i.e. zero rows).


ALTER TABLE `tbl_issue` ADD CONSTRAINT `FK_issue_owner` FOREIGN KEY (`owner_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;# MySQL returned an empty result set (i.e. zero rows).


ALTER TABLE `tbl_issue` ADD CONSTRAINT `FK_issue_requester` FOREIGN KEY (`requester_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;# MySQL returned an empty result set (i.e. zero rows).


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;# MySQL returned an empty result set (i.e. zero rows).


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;# MySQL returned an empty result set (i.e. zero rows).


-- Insert some seed data so we can just begin using the database
INSERT INTO `tbl_user` 
(`email`, `username`, `password`) 
VALUES 
('test1@notanaddress.com','Test_User_One', MD5('test1')),
('test2@notanaddress.com','Test_User_Two', MD5('test2'))    
;# 2 rows affected.


-- Enable foreign keys
SET FOREIGN_KEY_CHECKS = 1 ;# MySQL returned an empty result set (i.e. zero rows).
...