mysql insert查询不适用于where子句

m528fe3b  于 2021-06-18  发布在  Mysql
关注(0)|答案(27)|浏览(511)

此查询有什么问题:

INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

它在没有 WHERE 条款。我好像忘了sql。

zqdjd7g9

zqdjd7g916#

我认为插入语中没有where子句。

44u64gxh

44u64gxh17#

我认为我们不能在insert语句中使用where子句

v440hwme

v440hwme18#

您可以使用以下代码执行此操作:

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition
o8x7eapl

o8x7eapl19#

不。据我所知,您不能将where子句添加到此查询中。也许我也忘了我的sql,因为我不知道你为什么需要它。

pod7payv

pod7payv20#

insert into=向表中添加行
upate=更新特定行。
插入语中的where子句描述了什么?它没有任何要匹配的内容,行不存在(尚未)。。。

qf9go6mv

qf9go6mv21#

mysql insert语法不支持where子句,因此当前的查询将失败。假设你 id 列是唯一的或主键:
如果尝试插入id为1的新行,则应使用:

INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);

如果试图更改id为1的现有行的weight/desiredweight值,则应使用:

UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;

如果需要,还可以使用插入。。重复键语法如下:

INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

或者像这样:

INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

同样重要的是要注意如果你的 id 列是一个自动递增的列,那么您最好将它从insert中一起省略,让mysql按正常方式递增它。

utugiqy6

utugiqy622#

我知道这是一个老帖子,但我希望这仍然会帮助一些人,我希望是一个简单的例子:
背景:
我遇到了一个多对多的例子:同一个用户被多次列出,并且有多个值,我想创建一个新的记录,因此更新在我的例子中没有意义,我需要处理一个特定的用户,就像使用where子句一样。

INSERT into MyTable(aUser,aCar)
value(User123,Mini)

通过使用这个构造,实际上您的目标是一个特定的用户(user123,他有其他记录),所以我认为您实际上不需要where子句。
输出可以是:

aUser   aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
6yoyoihd

6yoyoihd23#

我认为在指定行中插入值的正确形式是:

UPDATE table SET column = value WHERE columnid = 1

如果在microsoftsqlserver上写的话,它可以工作,并且是类似的

INSERT INTO table(column) VALUES (130) WHERE id = 1;

在mysql上,必须更新表。

fumotvh3

fumotvh324#

使用post方法的mysql insert into语句的正确语法为:

$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
uinbv5nw

uinbv5nw25#

不应在insert语句中使用where条件。如果要这样做,请在update语句中使用insert,然后更新现有记录。
事实上,我能知道为什么在insert语句中需要where子句吗??
也许基于这个原因我会给你一个更好的选择。

kiz8lqtg

kiz8lqtg26#

我认为你最好的选择是用替换代替插入
替换为用户(id,weight,desiredweight)值(1,160,145);

mznpcxlj

mznpcxlj27#

您可以使用where子句进行更新查询。插入时,假设该行不存在。
op的声明将变成;
更新users set weight=160,desiredweight=45,其中id=1;
在mysql中,如果要插入或更新,可以使用带有where子句的replace查询。如果where不存在,则插入,否则更新。
编辑
我认为比尔·卡尔温的观点非常重要,足以从评论中脱颖而出,让它变得非常明显。谢谢bill,我已经很久没有使用mysql了,我记得我在replace上遇到过问题,但是我忘了它们是什么。我应该查一下的。
mysql的replace不是这样工作的。它执行delete(如果该行不存在,则可能是no op),然后执行insert。想想后果。触发器和外键依赖项。相反,在重复密钥更新时使用insert。

相关问题