[英]MYSQL foreign key constraint check in transaction?
執行以下事務時出現以下錯誤。 錯誤:# posts_category
無法添加或更新子行:外鍵約束失敗( crowdsource
,CONSTRAINT FK_posts_pcategory
FOREIGN KEY( post_id
)參考posts
( post_id
)在更新FK_posts_pcategory
刪除任何操作
交易:
開始交易; 從posts
選擇@id:= max(post_id); 設置@id = @ id + 1; INSERT INTO posts
( post_id
, content
, url
, post_time
)VALUES(@ id,'hello','',now()); 從帖子中選擇*; INSERT INTO posts_category
( post_id
, category_id
)值(@ id,1001),(@ id,1002); 承諾;
我的數據庫架構在posts
和posts_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.