在带有外键的表中创建记录时出错

问题描述 投票:0回答:1

我的 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:无法添加或更新 子行:外键约束失败

我在互联网上读到,首先必须创建辅助表的记录,然后创建主表的记录,但我必须反过来做。

mysql
1个回答
0
投票

我的问题没有解决。我唯一能做的就是删除 phpmyadmin 中的外键并且不验证购买 ID。

© www.soinside.com 2019 - 2024. All rights reserved.