2013-11-19 2 views
0

Я получаю ошибку 1452 от MySQL. Вот SQL я использовал для вставкиОшибка 1452 Ошибка внешнего ключа

INSERT INTO `Quote` (`QTE_id`, `USR_id`, `QTE_total`, `QTE_desc`, `QTE_dateCreated`, `QTE_dateModified`,`QTE_name`, `QTE_status`) 

ЗНАЧЕНИЯ (39, 2, NULL, 'по убыванию', '2013-11-19 00:00:00', «2013-11-19 11:22 : 49 ',' test ',' Active ');

Cannot add or update a child row: a foreign key constraint fails (`dbNAME`.`Quote`, CONSTRAINT `USR_id1` FOREIGN KEY (`USR_id`) REFERENCES `users` (`USR_id`)) 

Я уверен, что USR_id я пытаюсь поставить в такой Котировке таблицы. Есть идеи? Многие другие вопросы о переполнении стека не отвечали на мой вопрос.

Вот Создать синтаксис для следующих таблиц я пытаюсь вставить и связать (генерируемый из Workbench):

CREATE TABLE `Quote` (
`QTE_id` int(11) NOT NULL AUTO_INCREMENT, 
    `USR_id` int(11) DEFAULT NULL, 
    `QTE_total` decimal(7,2) DEFAULT NULL, 
    `QTE_desc` text, 
    `QTE_dateCreated` timestamp NULL DEFAULT NULL, 
    `QTE_dateModified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `QTE_name` varchar(255) DEFAULT NULL, 
    `QTE_status` varchar(30) DEFAULT NULL, 
    PRIMARY KEY (`QTE_id`), 
    KEY `USR_id1` (`USR_id`), 
    CONSTRAINT `USR_id1` FOREIGN KEY (`USR_id`) REFERENCES `users` (`USR_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8; 

и таблица пользователей:

CREATE TABLE `Users` (
`USR_id` int(11) NOT NULL AUTO_INCREMENT, 
    `MGR_id` int(11) NOT NULL DEFAULT '0' 
    `REP_id` int(11) NOT NULL, 
    `USR_name` varchar(255) NOT NULL, 
    `USR_login` varchar(255) NOT NULL, 
    `USR_dateModified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `USR_dateCreated` datetime NOT NULL, 
    `USR_role` enum('Salesperson','Manager') DEFAULT NULL, 
    PRIMARY KEY (`USR_id`,`MGR_id`,`REP_id`), 
    KEY `MGR_id_idx` (`MGR_id`), 
    KEY `REP_id_idx` (`REP_id`), 
    KEY `USR_login` (`USR_login`), 
    CONSTRAINT `MGR_id` FOREIGN KEY (`MGR_id`) REFERENCES `users` (`USR_id`) ON DELETE NO  ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `REP_id` FOREIGN KEY (`REP_id`) REFERENCES `representative` (`REP_id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 

ответ

0

я должен был сделать несколько небольших изменений (измените значение users на Users, добавьте ',' в конце строки, который определяет MGR_id, удалите ограничение для REP_id), чтобы заставить два CREATE работать.

Вот точное Создаёт:

CREATE TABLE `Users` (
`USR_id` int(11) NOT NULL AUTO_INCREMENT, 
    `MGR_id` int(11) NOT NULL DEFAULT '0', 
    `REP_id` int(11) NOT NULL, 
    `USR_name` varchar(255) NOT NULL, 
    `USR_login` varchar(255) NOT NULL, 
    `USR_dateModified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `USR_dateCreated` datetime NOT NULL, 
    `USR_role` enum('Salesperson','Manager') DEFAULT NULL, 
    PRIMARY KEY (`USR_id`,`MGR_id`,`REP_id`), 
    KEY `MGR_id_idx` (`MGR_id`), 
    KEY `REP_id_idx` (`REP_id`), 
    KEY `USR_login` (`USR_login`), 
    CONSTRAINT `MGR_id` FOREIGN KEY (`MGR_id`) REFERENCES `Users` (`USR_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 


CREATE TABLE `Quote` (
`QTE_id` int(11) NOT NULL AUTO_INCREMENT, 
    `USR_id` int(11) DEFAULT NULL, 
    `QTE_total` decimal(7,2) DEFAULT NULL, 
    `QTE_desc` text, 
    `QTE_dateCreated` timestamp NULL DEFAULT NULL, 
    `QTE_dateModified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE  CURRENT_TIMESTAMP, 
    `QTE_name` varchar(255) DEFAULT NULL, 
    `QTE_status` varchar(30) DEFAULT NULL, 
    PRIMARY KEY (`QTE_id`), 
    KEY `USR_id1` (`USR_id`), 
    CONSTRAINT `USR_id1` FOREIGN KEY (`USR_id`) REFERENCES `Users` (`USR_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8; 

При том, что на месте следующие два Вставки работали:

mysql> INSERT INTO `Users` (`USR_id`, `MGR_id`) VALUES(2, 2); 
Query OK, 1 row affected, 4 warnings (0.22 sec) 

mysql> INSERT INTO `Quote` (`QTE_id`, `USR_id`, `QTE_total`, `QTE_desc`, `QTE_dateCreated`, `QTE_dateModified`,`QTE_name`, `QTE_status`) VALUES (39, 2, NULL, 'desc', '2013-11-19 00:00:00', '2013-11-19 11:22:49', 'test', 'Active'); 
Query OK, 1 row affected (0.22 sec) 

Я надеюсь, что это помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^