簡體   English   中英

無法添加或更新子行:Django生成的MySQL表上的外鍵約束失敗

[英]Cannot add or update a child row: a foreign key constraint fails on a Django generated MySQL table

我正在基於django的項目上工作,該項目創建了兩個表table1table2 ,並具有從table2table1的外鍵。 我需要手動將一些值插入table2 在MySQL中嘗試這樣做時,出現約束失敗錯誤。 我仔細檢查過,表table1已經存在外鍵約束所需的相應條目。 我調查了有關SO的先前問題,但找不到合適的解決方案。

表1架構:

+------------+---------------+------+-----+---------+----------------+
| Field      | Type          | Null | Key | Default | Extra          |
+------------+---------------+------+-----+---------+----------------+
| id         | int(11)       | NO   | PRI | NULL    | auto_increment |
| email      | varchar(100)  | NO   |     | NULL    |                |

表2:

+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       | NO   | PRI | NULL    | auto_increment |
| km          | varchar(1000) | YES  |     | NULL    |                |
| owner_id    | int(11)       | NO   | MUL | NULL    |                |
| receiver_id | int(11)       | NO   | MUL | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+

insert語句insert into crest_recipient values(id,owner_id=5,receiver_id=5,km="hello world"); 或類似的失敗,並出現確切的錯誤,因為

無法添加或更新子行:外鍵約束失敗(crest.crest_recipient CONSTRAINT crest_recipient_owner_id_4943116a1387be04_fk_crest_user_id FOREIGN KEY(owner_id)參考crest_user(id))

您正在嘗試在子表crest_recipient中插入一行,該行在父表crest_user中不存在。

因此,首先在主表中插入相應的行,然后可以在子表中插入。

您正在嘗試更新或插入一行crest.crest_recipient表中,列中的值owner_id

crest_userid中不存在

編輯

使它看起來像這樣

insert crest_recipient (km,owner_id,receiver_id) values ('test',5,1)

'test',5,1是您想要的。

跳過ID列。 不指定它,不提供它的值。 它最有可能是auto_increment PK(基本上沒有別的辦法了)。 數據庫引擎會為您選擇它。 指定它只會使事情浪費99%的時間。

現在專注於參數2(5)

暫無
暫無

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

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