簡體   English   中英

在事務中使用MYSQL外鍵約束檢查?

[英]MYSQL foreign key constraint check in transaction?

執行以下事務時出現以下錯誤。 錯誤:# posts_category無法添加或更新子行:外鍵約束失敗( crowdsource ,CONSTRAINT FK_posts_pcategory FOREIGN KEY( post_id )參考postspost_id )在更新FK_posts_pcategory刪除任何操作

交易:

開始交易; posts選擇@id:= max(post_id); 設置@id = @ id + 1; INSERT INTO postspost_idcontenturlpost_time )VALUES(@ id,'hello','',now()); 從帖子中選擇*; INSERT INTO posts_categorypost_idcategory_id )值(@ id,1001),(@ id,1002); 承諾;

我的數據庫架構在postsposts_category表('post_id')之間具有FK

我是否需要保持SET FOREIGN_KEY_CHECKS = 0; 插入post_category表之前?

在手冊中, 這里這里也是。 強烈建議使用auto_increment列,除非您想真正擲骰子。 這意味着: select @id := max(post_id) ...是不安全的。 這是一個手動的,容易出錯的編程器增量。 從理論上講,許多用戶可能只是在同一時間運行,現在我們都有相同的ID。


相反,使用

SET @lastid = LAST_INSERT_ID();

...在插入之后,它可以安全地獲取下一個即將出現的表插入中的id (大概是)。


至於您的FK問題,請勿更新或插入違反您明智地放在第一位的參照完整性的行。

其他評論:為什么在交易過程中(要快速完成),您是否select * from posts進行select * from posts 那有什么用呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM