mysql insert查询不适用于where子句

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

此查询有什么问题:

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

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

rta7y2nd

rta7y2nd1#

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子句。

jobtbby3

jobtbby32#

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

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

kuuvgm7e3#

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

c6ubokkw4#

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

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

使用select语句插入

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

w8rqjzmb5#

这个问题的正确答案是:
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;

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

igetnqfo

igetnqfo6#

如果您指定一个特定的记录no来插入数据,那么最好使用它 UPDATE 语句而不是 INSERT 声明。
您在问题中编写的这种查询类似于虚拟查询。
您的查询是:-

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

在这里,您指定id=1,因此使用 UPDATE 语句来更新现有记录。不建议使用 WHERE 条款(如有) INSERT 。你应该使用 UPDATE .
正在使用更新查询:-

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

a11xaf1n7#

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

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

kmbjn2e38#

一定也要读这个

没道理。。。甚至是字面意思 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的新行。

lxkprmvk

lxkprmvk9#

不能同时使用insert和where。您可以使用update子句为特定字段中的特定列添加值,如下面的代码;

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

u4dcyp6a10#

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

gojuced7

gojuced711#

这取决于插入的情况,插入实际上可以有where子句。
例如,如果要匹配表单中的值。

Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com

有道理,不是吗?

j8yoct9x

j8yoct9x12#

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

nmpmafwu

nmpmafwu13#

最简单的方法是使用if来违反a键约束。这只适用于插入忽略,但允许您在插入中使用约束。

INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
kmb7vmvb

kmb7vmvb14#

执行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;
g9icjywg

g9icjywg15#

插入查询不支持where关键字*

条件之所以适用,是因为可以对子select语句使用where条件。可以使用子选择执行复杂的插入。
例如:

INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';

通过在insert语句中放置“select”,可以快速执行多次插入。
对于这种类型的插入,您可能希望检查插入的行数。在执行插入之前,可以通过运行以下sql语句来确定要插入的行数。

SELECT count(*)
FROM customers
WHERE city = 'Newark';

使用exists条件可以确保不插入重复的信息。
例如,如果有一个名为clients的表,其主键为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插入多条记录。
如果要插入单个记录,可以使用以下语句:

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语句中输入值,即使这些值当前未存储在表中。
另请参见如何插入where子句

相关问题