MySQL插入Where查询
这个查询有什么问题:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
它没有WHERE
子句。 我似乎忘了我的SQL ..
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 .. ON DUPLICATE KEY语法,如下所示:
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像平常一样增加它。
您不能将WHERE子句与VALUES子句组合在一起。 就我所知,你有两个select –
-
INSERT指定值
INSERT INTO Users(weight, desiredWeight) VALUES (160,145)
-
INSERT使用SELECT语句
INSERT INTO Users(weight, desiredWeight) SELECT weight, desiredWeight FROM AnotherTable WHERE id = 1
您使用WHERE子句进行UPDATE查询。 当你插入时,你假设该行不存在。
在MySQL中,如果你想要INSERT或UPDATE,你可以使用带有WHERE子句的REPLACE查询。 如果WHERE不存在,则插入,否则更新。
编辑
我认为比尔·卡尔文的观点非常重要,可以从评论中脱颖而出,并且非常明显。 感谢比尔,我和MySQL一起工作已经太久了,我记得我在REPLACE方面有问题,但是我忘了他们是什么人。 我应该查看它。
这不是MySQL的REPLACE工作方式。 它执行一个DELETE(如果该行不存在,可能是一个空操作),然后是一个INSERT。 想想后果。 触发器和外键依赖。 而是使用INSERT … ON DUPLICATE KEY UPDATE。
我不相信插入有一个WHERE子句。
插入查询不支持关键字*
条件适用,因为您可以使用where子条件select语句。 您可以使用子select执行复杂的插入。
例如:
INSERT INTO suppliers (supplier_id, supplier_name) SELECT account_no, name FROM customers WHERE city = 'Newark';
通过在insert语句中放置“select”,可以快速执行多个插入。
使用这种types的插入,您可能希望检查插入的行数。 在执行插入之前,您可以通过运行以下SQL语句来确定要插入的行数。
SELECT count(*) FROM customers WHERE city = 'Newark';
您可以确保您不使用EXISTS条件插入重复的信息。
例如,如果您有一个名为client的表,其中的主键是client_id,则可以使用以下语句:
INSERT INTO clients (client_id, client_name, client_type) SELECT supplier_id, supplier_name, 'advertising' FROM suppliers WHERE not exists (select * from clients where clients.client_id = suppliers.supplier_id);
这个语句用一个子select插入多个logging。
如果你想插入一条logging,你可以使用下面的语句:
INSERT INTO clients (client_id, client_name, client_type) SELECT 10345, 'IBM', 'advertising' FROM dual WHERE not exists (select * from clients where clients.client_id = 10345);
双表的使用允许您在select语句中input值,即使这些值当前没有存储在表中。
另请参见如何使用where子句插入
这个问题的正确答案是这样的:
一个)。 如果想在插入之前select:
INSERT INTO Users( weight, desiredWeight ) select val1 , val2 from tableXShoulatNotBeUsers WHERE somecondition;
B)。 IFlogging已经存在使用更新代替插入:
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)。 如果你想克隆一个来自SAME表的logging,只记得你不能从你插入的表中select
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;
我认为这很适合大部分情况
插入=将行添加到表中
Upate =更新特定的行。
where子句在插入中描述什么? 它没有任何东西匹配,行不存在(还)…
在执行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;
请仔细阅读
这没有意义,即使是字面意思
INSERT
意味着添加一个new row
,当你说你在WHERE
定义你在SQL
谈论哪一行。
所以添加一个新行是不可能的,在现有的行的条件。
你必须从以下select:
A.使用UPDATE
而不是INSERT
B.使用INSERT
和删除WHERE
子句(我只是说…),或者如果你真的要在一个语句中使用INSERT
和WHERE
,只能通过INSERT..SELECT子句来完成…
INSERT INTO Users( weight, desiredWeight ) SELECT FROM Users WHERE id = 1;
但是,这提供了一个完全不同的目的,如果你已经定义了id作为主键这个插入将失败,否则将插入一个新的行id = 1。
这取决于情况INSERT实际上可以有一个where子句。
例如,如果您匹配表单中的值。
Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com
有道理不是吗?
最简单的方法是使用IF来违反你的关键约束。 这只适用于INSERT IGNORE,但会允许你在INSERT中使用约束。
INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
在WHERE
子句之后,你放置一个条件,它用于获取数据或更新行。 在插入数据时,假定该行不存在。
所以,问题是,有没有行的ID是1? 如果是的话,使用MySQL UPDATE ,否则使用MySQL INSERT 。
如果你指定一个特定的logging号来插入数据,那么最好使用UPDATE
语句而不是INSERT
语句。
您在问题中编写的这种types的查询就像是一个虚拟查询。
您的查询是:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
在这里,你指定了id = 1,所以你用UPDATE
语句来更新现有的logging。不build议在INSERT
情况下使用WHERE
子句。你应该使用UPDATE
。
现在使用更新查询: –
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
WHERE子句在任何情况下都可以实际与INSERT-INTO-VALUES一起使用吗?
答案肯定是否定的。
在INSERT INTO … VALUES …之后添加WHERE子句只是无效的SQL,不会被parsing。
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' ...
它显示了parsing器在这里找不到的具体部分:WHERE子句。
其总体错误。 INSERT QUERY没有WHERE子句,只有UPDATE QUERY才有。 如果你想添加数据其中id = 1那么你的查询将是
UPDATE Users SET weight=160, desiredWeight= 145 WHERE id = 1;
不,据我所知,你不能在这个查询中添加WHERE子句。 也许我已经忘记了我的SQL,因为我不太清楚为什么你需要它。
你不应该在Insert语句中使用where条件。 如果你想这样做,使用插入更新语句,然后更新现有的logging。
其实我可以知道为什么你需要在插入语句中的where子句?
也许基于我可能会build议你一个更好的select的原因。
我认为你最好的select是使用REPLACE而不是INSERT
replace用户(id,weight,desiredWeight)VALUES(1,160,145);
你可以根据用户input做条件插入。 只有当inputvariables'userWeight'和'$ userDesiredWeight'不为空时,这个查询才会执行插入操作
INSERT INTO Users(weight, desiredWeight ) select '$userWeight', '$userDesiredWeight' FROM (select 1 a ) dummy WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
我知道这是一个旧post,但我希望这仍然有助于某人,我希望是一个简单的例子:
背景:
我有一个多到很多的情况:同一个用户多次列出多个值,我想创build一个新的logging,因此UPDATE对我来说是没有意义的,我需要像一个特定的用户使用WHERE子句。
INSERT into MyTable(aUser,aCar) value(User123,Mini)
通过使用这个构造你实际上是针对一个特定的用户(user123,谁有其他logging),所以你不需要一个where子句,我认为。
输出可能是:
aUser aCar user123 mini user123 HisOtherCarThatWasThereBefore
mysql使用post方法插入语句的正确语法是:
$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
我不认为我们可以在插入语句中使用where子句
INSERT INTO Users(weight, desiredWeight ) SELECT '$userWeight', '$userDesiredWeight' FROM (select 1 a ) dummy WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
您不能同时使用INSERT和WHERE。 你可以使用UPDATE子句来添加值到特定字段的特定字段,如下面的代码;
UPDATE Users SET weight='160',desiredWeight ='145' WHERE id =1