Update
MySQL 1175 使用主鍵時出錯
什麼會導致以下列開頭的錯誤 1175
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column...
:。我遇到的問題是我確實包含了一個WHERE
帶有關鍵列的子句:WHERE a.a_id = b.b_id
a_id
並且b_id
是各自表中唯一的關鍵列。START TRANSACTION; UPDATE table_a a, table_b b SET a.update_me = b.update_from_me WHERE a.a_id = b.b_id; SELECT * FROM a;
我錯過了什麼?
嗯,這很簡單。
您已啟用安全更新模式(如錯誤所述)。您的語句有一個 where 子句,對。但它被解釋為 a
JOIN
而不是 aWHERE
因為您提供了類似 a 的語法INNER JOIN
。你的程式碼:
UPDATE table_a a, table_b b SET a.update_me = b.update_from_me WHERE a.a_id = b.b_id;
在技術上與此相同(並被解釋為這樣):
UPDATE a FROM table_a a INNER JOIN table_b b ON a.a_id = b.b_id;b_id SET a.update_me = b.update_from_me;
這意味著,沒有真正
WHERE
的 . 您更新table_a
與另一個表匹配的整個表table_b
。如果您真的想實現這一點,您可以
Safe Update Mode
使用以下程式碼禁用此查詢:SET SQL_SAFE_UPDATES=0; UPDATE table_a a, table_b b SET a.update_me = b.update_from_me WHERE a.a_id = b.b_id;
無論如何,您的 mysql 伺服器正在執行
mysqld --safe-updates
或者mysqld --i-am-a-dummy
幾乎是相同的選項。您可以使用以下命令之一檢查這是否真的啟用:
SELECT @@SQL_SAFE_UPDATES -- or SHOW VARIABLES LIKE 'sql_safe_updates'
順便說一句,您還可以嘗試解決方法來完成更新。
Safe Update Mode
需要 aWHERE
或 aLIMIT
。這將限制更新的影響。另一個想法可以是LIMIT
為您的UPDATE
.UPDATE table_a a, table_b b SET a.update_me = b.update_from_me WHERE a.a_id = b.b_id LIMIT 100000;
如果
Safe Update Mode
啟用了,您也需要注意DELETE
’。他們兩者都需要。一個WHERE
和一個LIMIT
。請參閱文件。