INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
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;
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
一种使用insert和where的方法 INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953); 在这种情况下,它就像一个存在的测试。如果你运行两次或两次以上也没有例外。。。
27条答案
按热度按时间kuarbcqp1#
我知道这是一个老帖子,但我希望这仍然会帮助一些人,我希望是一个简单的例子:
背景:
我遇到了一个多对多的例子:同一个用户被多次列出,并且有多个值,我想创建一个新的记录,因此更新在我的例子中没有意义,我需要处理一个特定的用户,就像使用where子句一样。
通过使用这个构造,实际上您的目标是一个特定的用户(user123,他有其他记录),所以我认为您实际上不需要where子句。
输出可以是:
k3bvogb12#
完全错了。insert查询没有where子句,只有update查询有它。如果您想添加id=1的数据,那么您的查询将是
xzabzqsa3#
使用post方法的mysql insert into语句的正确语法为:
bsxbgnwa4#
可以根据用户输入执行条件插入。仅当输入变量“$userweight”和“$userdesiredweight”不为空时,此查询才会执行insert
1rhkuytd5#
之后
WHERE
子句设置一个条件,该条件用于获取数据或更新行。插入数据时,假定该行不存在。所以,问题是,有没有id为1的行?如果是,请使用mysql update,否则请使用mysql insert。
qvtsj1bj6#
不应在insert语句中使用where条件。如果要这样做,请在update语句中使用insert,然后更新现有记录。
事实上,我能知道为什么在insert语句中需要where子句吗??
也许基于这个原因我会给你一个更好的选择。
n3ipq98p7#
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。
vjhs03f79#
我认为你最好的选择是用替换代替插入
替换为用户(id,weight,desiredweight)值(1,160,145);
ecfsfe2w10#
这个问题的正确答案是:
a) 是的。如果要在插入前选择:
b) 是的。如果记录已存在,请使用“更新”而不是“插入”:
应该是
c) 是的。如果要同时更新或插入
d) 是的。如果要从同一个表中克隆一条记录,请记住不能从要插入的表中进行选择
我认为这涵盖了大部分的场景
bxgwgixi11#
执行insert语句时不能使用where:
应该是:
where部分仅适用于select语句:
或在update语句中:
13z8s7eq12#
一定也要读这个
没道理。。。甚至是字面意思
INSERT
意味着添加一个new row
当你说WHERE
你定义了你说的是哪一行SQL
.因此,在现有行上添加新行是不可能的。
您必须从以下选项中进行选择:
答。使用
UPDATE
而不是INSERT
b。使用INSERT
并移除WHERE
条款(我只是说…)或者如果你真的一定要用INSERT
以及WHERE
在单个语句中,只能通过insert..select子句。。。但这有着完全不同的用途,如果将id定义为主键,则插入将失败,否则将插入id=1的新行。
xdnvmnnf13#
不能将where子句与values子句组合。据我所知,你有两个选择-
插入指定值
使用select语句插入
z6psavjg14#
where子句在任何情况下都可以与insert into值一起使用吗?
答案肯定是否定的。
在insert into后添加where子句。。。值。。。只是无效的sql,不会解析。
mysql返回的错误是:
错误消息最重要的部分是
它显示了解析器不希望在这里找到的特定部分:where子句。
djmepvbi15#
一种使用insert和where的方法
INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
在这种情况下,它就像一个存在的测试。如果你运行两次或两次以上也没有例外。。。