2016-08-25 20 views
0

使用下面的SQL語句..無法在我的數據庫更新子行(MySQL的)

INSERT INTO `debates` (`id`, `unit_id`, `starter_pack_id`, `academic_id`, `title`, `date_due`, `date_created`, `date_modified`) VALUES 
(1, 1, 1, 5, 'On Campus', '2016-12-25 00:00:00', now(), NULL), 
(2, 1, 1, 5, 'Off Campus', '2016-12-25 00:00:00', now(), NULL); 

結果在下面的錯誤是輸出..

#1452 - Cannot add or update a child row: a foreign key constraint fails (`my_database`.`debates`, CONSTRAINT `fk_debates_starter_pack_id` FOREIGN KEY (`starter_pack_id`) REFERENCES `debate_starter_packs` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) 

我爲什麼無法更新此表?

請注意:下面是與此SQL語句相關的所有表。目前沒有表包含數據庫中的任何數據。

爭論:

CREATE TABLE `debates`(
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `unit_id` INT(11) UNSIGNED NOT NULL, 
    `starter_pack_id` TINYINT(3) UNSIGNED NOT NULL, 
    `academic_id` INT(11) UNSIGNED NOT NULL, 
    `title` VARCHAR(255) NOT NULL, 
    `date_due` DATETIME NOT NULL, 
    `date_created` DATETIME NOT NULL, 
    `date_modified` DATETIME DEFAULT NULL, 
    CONSTRAINT `pk_debates_id` PRIMARY KEY(`id`), 
    CONSTRAINT `fk_debates_starter_pack_id` FOREIGN KEY(`starter_pack_id`) REFERENCES `debate_starter_packs`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `fk_debates_unit_id` FOREIGN KEY(`unit_id`) REFERENCES `units`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `fk_debates_user_role_id` FOREIGN KEY(`academic_id`) REFERENCES `user_roles`(`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

單位(UNIT_ID參考):

CREATE TABLE `units` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `academic_id` int(11) UNSIGNED NOT NULL, 
    `unit_code` varchar(6) NOT NULL, 
    `title` varchar(100) DEFAULT NULL, 
    `date_added` datetime NOT NULL, 
    `date_modified` datetime DEFAULT NULL, 
    CONSTRAINT `pk_units_id` PRIMARY KEY(`id`), 
    CONSTRAINT `fk_units_academic_id` FOREIGN KEY (`academic_id`) REFERENCES `user_roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

啓動包(Starter_Pack_ID參考):

CREATE TABLE `debate_starter_packs` (
    `id` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `academic_id` int(11) UNSIGNED NOT NULL, 
    `title` varchar(100) NOT NULL, 
    `description` text NOT NULL, 
    `date_created` datetime NOT NULL, 
    `date_modified` datetime DEFAULT NULL, 
    CONSTRAINT `pk_debate_starter_packs_id` PRIMARY KEY(`id`), 
    CONSTRAINT `fk_debate_starter_packs_user_role_id` FOREIGN KEY (`academic_id`) REFERENCES `user_roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

用戶(Academic_ID參考):

CREATE TABLE `users` (
    `id` int(11) UNSIGNED NOT NULL, 
    `username` varchar(100) DEFAULT NULL, 
    `first_name` varchar(50) DEFAULT NULL, 
    `last_name` varchar(50) DEFAULT NULL, 
    `email` varchar(100) NOT NULL, 
    `password` varchar(255) NOT NULL, 
    `salt` varchar(255) DEFAULT NULL, 
    `organisation` varchar(100) DEFAULT NULL, 
    `phone` varchar(20) DEFAULT NULL, 
    `date_created` datetime NOT NULL, 
    `date_last_login` datetime DEFAULT NULL, 
    `remember_code` varchar(40) DEFAULT NULL, 
    `active` tinyint(1) UNSIGNED NOT NULL, 
    CONSTRAINT `pk_users_id` PRIMARY KEY(`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

回答

3

你有沒有在表中debate_starter_packs記錄id = '1'?

表辯論具有表debate_starter_packs的外鍵引用id。

CONSTRAINT `fk_debates_starter_pack_id` FOREIGN KEY(`starter_pack_id`) REFERENCES `debate_starter_packs`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, 

您應該先將記錄id ='1'插入表debate_starter_packs。

+0

啊,當然!我怎麼會這麼傻哈哈。 乾杯:) – TheAuzzieJesus