mysql - 在 MYSQL 的一个查询中更新多行的问题
问题描述
当我在脚本中继续更新多行时出现错误,这个问题并不总是发生,但是当发生更新成功但在另一个表中没有任何引用或基数时,会更改两个或多个项目中的存在。
这是我要更新的代码:
$ref_venta = filter_input(INPUT_POST, 'refIdFactura', FILTER_SANITIZE_STRING);
$stmt = $conn->prepare("UPDATE `PRODUCTOS` SET `refIdFactura` = :refIdFactura WHERE `id_p` = :id_p");
foreach($_POST['facturar'] as $i => $id_p) {
$stmt->bindParam(':refIdFactura', $ref_venta); // is a number of receipt
$stmt->bindParam(':id_p', $_POST['facturar'][$i]); //is the id of each item in the list
$stmt->execute();
}
就像我说的这里工作正常,但是当问题发生时,这个 UPDATE 这个另一个表也没有在脚本中列出:
TABLE NAME: `LPRODUCTOS` ---- ROWS: idP, existences
有两个主键不同的表,如果您在 UPDATE 中看到,我从不捕获存在的行,并且id_p
TABLE的 id( ) 与 TABLEPRODUCTOS
的 id( ) 不同idP
LPRODUCTOS
所以我不知道为什么会发生这种情况......
解决方案
看起来foreign key constraints
两张桌子之间有。如果您要更新第一个表,这可能会导致第二个表的更新。
检查:
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME, -- <<-- the one you want!
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_NAME IN ('LPRODUCTOS', 'PRODUCTOS');
这应该显示您的索引,包括。约束。
了解更多外键约束。
推荐阅读
- reactjs - 使用 React JS 的全文 PDF 搜索应用程序
- rabbitmq - RabbitMQ 用户授权读取队列但阻止清除访问
- php - Laravel 6 - Ajax - 检索文件 - 内部错误 500
- c - 为什么在 IN6_ADDR 中使用 union 表示 IP
- java - 如何在 Java 中构建 KDTree
- python - 如何使用 Python pdblp 的 CSV 文件而不是代码参考来从 con.ref 获取 API
- java - 类型中的方法不适用,但传递了正确数量的变量(?)
- r - Why inclusion of external Rmd-file with latex equation environment leads to different DOCX output while using rmarkdown and bookdown?
- excel - Excel如何汇总值
- python - Python 提取下载图像的 URL(`where`)信息