首頁 >資料庫 >mysql教程 >為什麼 MySQL INSERT 語句中的 WHERE 子句無效?

為什麼 MySQL INSERT 語句中的 WHERE 子句無效?

Barbara Streisand
Barbara Streisand原創
2025-01-19 06:53:08728瀏覽

Why is a WHERE clause invalid in a MySQL INSERT statement, and what are the alternatives?

MySQL INSERT 語句:為什麼 WHERE 子句無效以及適當的替代方案

簡介:

MySQL 的 INSERT 語句將新行新增到表中。 一個常見的錯誤是在 WHERE 語句中使用 INSERT 子句,這在語法上是不正確的。本文解釋了該錯誤並提供了有效的替代方案。

錯誤的查詢與解釋:

以下查詢無效:

<code class="language-sql">INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;</code>

只有當存在有 Users 的行時,才會嘗試將值插入到 id = 1 中。 MySQL的INSERT語句不支援WHERE子句;它是為無條件插入而設計的。

正確的 MySQL INSERT 語法:

標準 INSERT 語法是:

<code class="language-sql">INSERT INTO table_name ( column1, column2, ... ) VALUES ( value1, value2, ... );</code>

WHERE 子句專門用於 SELECTUPDATEDELETE 語句。

替代方法:

要實現條件插入或更新,請考慮以下選項:

  • 插入具有唯一 ID 的新行: 如果 id 是主鍵或唯一約束,只需插入新行:
<code class="language-sql">INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);</code>
  • 更新現有行: 使用 UPDATE 修改現有記錄:
<code class="language-sql">UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;</code>
  • INSERT ... ON DUPLICATE KEY UPDATE: 這結合了插入和更新。如果發現重複的按鍵(例如,現有的id),則更新該行;否則,將插入新行:
<code class="language-sql">INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145;</code>

重要注意事項:

  • 自增id列:如果id是自增的,則可以在INSERT語句中省略它; MySQL會自動賦值。
  • 替代INSERT ... ON DUPLICATE KEY UPDATE文法:上面也可以寫成:
<code class="language-sql">
INSERT INTO Users SET id = 1, weight = 160, desiredWeight = 145 ON DUPLICATE KEY UPDATE weight = 160, desiredWeight = 145;
```  This form is useful when updating only some columns.</code>

以上是為什麼 MySQL INSERT 語句中的 WHERE 子句無效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn