php - Mysql:违反完整性约束

标签 php mysql cleardb

我在php中使用cleardb作为mysql数据库。情况是这样的:

我正在受益人表中添加记录。添加后,我正在获取 last_inserted _id。并使用此idbeneficiary_ payment_info中添加付款方式。在大多数情况下它工作得很好。但是,有时我在错误日志中发现以下消息:

Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (cdb_85c337008c.beneficiary_payment_info, CONSTRAINT beneficiary_payment_info_ibfk_1 FOREIGN KEY (ben_id) REFERENCES beneficiary (id))'

当我检查数据库时,我得到了以下屏幕截图:

TABLE: beneficiary

TABLE: beneficiary_payment_info

如您所见,第一个表中有一个 id 6073,但第二个表中没有。正是因为这个原因,我才出现上述错误。第一个表中有 2 个相同的记录(6073 和 6081),因为我猜用户已经第二次请求该页面。

如何解决这个问题?请指导我。谢谢。

编辑(来自clearDB的回复)

解决此问题的最佳方法是停止涉及 auto_increment 值。

您可以使用类似于以下样式的子查询,而不是尝试猜测或设置它们:

INSERT INTO CHILDREN (ParentID, FirstName, LastName)
VALUES ((SELECT ID FROM PARENTS WHERE FirstName = 'John' AND LastName = 'Doe'),
'Jane', 'Doe');

最佳答案

问题中没有提供足够的信息来准确诊断问题。

如果auto_increment_increment设置为值10,并且值606160716081 是自动生成的...然后它看起来像值 6073 不是自动生成的值。

last_insert_id函数返回自动生成的值;它返回显式分配给列的值。

(我们确实注意到,可以更改 auto_increment_increment 的值。但是,auto_increment_increment 的值已从 更改,这似乎很奇怪>10,更改为值 2,然后更改为值 8,然后更改回值 10 .这根本不能解释所观察到的 last_insert_id 行为。)

复制

此讨论完全忽略了涉及复制的可能性,即 6073 值可能是由不同服务器生成的。显然,ClearDB 支持“多主”复制。

引用:https://www.cleardb.com/developers/help/faq#general_16

事务是否有可能被“分割”到两个不同的 MySQL 服务器上?

https://www.cleardb.com/developers/help/faq#general_10

<小时/>

使用 last_insert_id 函数有很多注意事项。必须在成功插入(或更新)后立即从同一个 session 调用它,生成 AUTO_INCRMENT 值,yada,yada,yada。

引用:https://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id

关于php - Mysql:违反完整性约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079800/

相关文章:

php - 照片在不同浏览器中旋转 90 度

php - 设置 jEditable 参数

php - 根据主键表的主键获取外键表的行数

mysql - django + 自带数据库切换MySQL报错

php - 来自数据库 PHP 的数组

php - 这段代码不起作用的任何特殊原因?我似乎无法弄清楚这个问题

mysql - 指定 Doctrine2 注释来描述复杂的连接

powershell - 这个 Azure 错误到底意味着什么?

java - 通信链路故障 ClearDB

python - 如何在python环境中设置最大用户连接数?