我的 mysql 数据库中有这两个表:
CREATE TABLE `purchases` (
`id` int(11) UNSIGNED NOT NULL,
`date` date NOT NULL,
`supplier` int(11) UNSIGNED NOT NULL,
`total` decimal(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
CREATE TABLE `purchase_details` (
`id` int(11) UNSIGNED NOT NULL,
`purchase_id` int(11) UNSIGNED NOT NULL,
`product_id` int(11) UNSIGNED NOT NULL,
`qty` int(11) NOT NULL,
`price` decimal(5,2) NOT NULL,
`total` decimal(5,2) NOT NULL,
`date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
我创建主键、自动增量和外来键:
ALTER TABLE `purchases`
ADD PRIMARY KEY (`id`) USING BTREE,
ADD KEY `supplier` (`supplier`) USING BTREE;
ALTER TABLE `purchase_details`
ADD PRIMARY KEY (`id`) USING BTREE,
ADD KEY `product_id` (`product_id`) USING BTREE,
ADD KEY `purchase_id` (`purchase_id`) USING BTREE;
ALTER TABLE `purchases`
MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE `purchase_details`
MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE `purchase_details`
ADD CONSTRAINT `purchase_details_ibfk_1` FOREIGN KEY (`purchase_id`) REFERENCES `purchases` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `purchase_details_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
为了测试它们,我首先在purchase中创建了一条记录,因为该总数存储了purchase_details中具有purchase表的purchase_id的记录的总数。
此外,在purchase_details表单中,必须关联的purchase_id会出现在只读输入中。
然后,我尝试使用之前创建的购买 ID 在purchase_details 中创建一条记录,但出现以下错误:
致命错误:未捕获 mysqli_sql_Exception:无法添加或更新 子行:外键约束失败
我在互联网上读到,首先必须创建辅助表的记录,然后创建主表的记录,但我必须反过来做。
我的问题没有解决。我唯一能做的就是删除 phpmyadmin 中的外键并且不验证购买 ID。