mysql insert查询不适用于where子句

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

此查询有什么问题:

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

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

kuarbcqp

kuarbcqp1#

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

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

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

aUser   aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
k3bvogb1

k3bvogb12#

完全错了。insert查询没有where子句,只有update查询有它。如果您想添加id=1的数据,那么您的查询将是

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

xzabzqsa3#

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

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

bsxbgnwa4#

可以根据用户输入执行条件插入。仅当输入变量“$userweight”和“$userdesiredweight”不为空时,此查询才会执行insert

INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
1rhkuytd

1rhkuytd5#

之后 WHERE 子句设置一个条件,该条件用于获取数据或更新行。插入数据时,假定该行不存在。
所以,问题是,有没有id为1的行?如果是,请使用mysql update,否则请使用mysql insert。

qvtsj1bj

qvtsj1bj6#

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

n3ipq98p

n3ipq98p7#

INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
mw3dktmi

mw3dktmi8#

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

vjhs03f7

vjhs03f79#

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

ecfsfe2w

ecfsfe2w10#

这个问题的正确答案是:
a) 是的。如果要在插入前选择:

INSERT INTO Users( weight, desiredWeight ) 
  select val1 , val2  from tableXShoulatNotBeUsers
  WHERE somecondition;

b) 是的。如果记录已存在,请使用“更新”而不是“插入”:

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

应该是

Update Users set weight=160, desiredWeight=145  WHERE id = 1;

c) 是的。如果要同时更新或插入

Replace Users set weight=160, desiredWeight=145  WHERE id = 1;

Note):- you should provide values to all fields else missed field in query 
        will be set to null

d) 是的。如果要从同一个表中克隆一条记录,请记住不能从要插入的表中进行选择

create temporary table xtable ( weight int(11), desiredWeight int(11) ;

 insert into xtable (weight, desiredWeight) 
    select weight, desiredWeight from Users where [condition]

 insert into Users (weight, desiredWeight) 
    select weight , desiredWeight from xtable;

我认为这涵盖了大部分的场景

bxgwgixi

bxgwgixi11#

执行insert语句时不能使用where:

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

应该是:

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

where部分仅适用于select语句:

SELECT from Users WHERE id = 1;

或在update语句中:

UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;
13z8s7eq

13z8s7eq12#

一定也要读这个

没道理。。。甚至是字面意思 INSERT 意味着添加一个 new row 当你说 WHERE 你定义了你说的是哪一行 SQL .
因此,在现有行上添加新行是不可能的。
您必须从以下选项中进行选择:
答。使用 UPDATE 而不是 INSERT b。使用 INSERT 并移除 WHERE 条款(我只是说…)或者如果你真的一定要用 INSERT 以及 WHERE 在单个语句中,只能通过insert..select子句。。。

INSERT INTO Users( weight, desiredWeight ) 
SELECT FROM Users WHERE id = 1;

但这有着完全不同的用途,如果将id定义为主键,则插入将失败,否则将插入id=1的新行。

xdnvmnnf

xdnvmnnf13#

不能将where子句与values子句组合。据我所知,你有两个选择-
插入指定值

INSERT INTO Users(weight, desiredWeight) 
VALUES (160,145)

使用select语句插入

INSERT INTO Users(weight, desiredWeight) 
SELECT weight, desiredWeight 
FROM AnotherTable 
WHERE id = 1
z6psavjg

z6psavjg14#

where子句在任何情况下都可以与insert into值一起使用吗?
答案肯定是否定的。
在insert into后添加where子句。。。值。。。只是无效的sql,不会解析。
mysql返回的错误是:

mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1

错误消息最重要的部分是

... syntax to use near 'WHERE id = 1' ...

它显示了解析器不希望在这里找到的特定部分:where子句。

djmepvbi

djmepvbi15#

一种使用insert和where的方法 INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953); 在这种情况下,它就像一个存在的测试。如果你运行两次或两次以上也没有例外。。。

相关问题