mysql insert查询不适用于where子句

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

此查询有什么问题:

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

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

okxuctiv

okxuctiv16#

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

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

有道理,不是吗?

ubby3x7f

ubby3x7f17#

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

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

dgtucam118#

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

mhd8tkvw

mhd8tkvw19#

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按正常方式递增它。

i1icjdpr

i1icjdpr20#

如果您指定一个特定的记录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;
l3zydbqr

l3zydbqr21#

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

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

ckx4rj1h22#

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

mzmfm0qo

mzmfm0qo23#

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

UPDATE table SET column = value WHERE columnid = 1

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

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

在mysql上,必须更新表。

xhv8bpkk

xhv8bpkk24#

插入查询不支持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子句

ig9co6j1

ig9co6j125#

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

wvyml7n5

wvyml7n526#

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

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

uxh89sit27#

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

相关问题