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
子句专门用于 SELECT
、UPDATE
和 DELETE
语句。
替代方法:
要实现条件插入或更新,请考虑以下选项:
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中文网其他相关文章!