当前位置:  开发笔记 > 后端 > 正文

MySQL插入Where查询

如何解决《MySQL插入Where查询》经验,为你挑选了5个好方法。

这个查询出了什么问题:

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

它没有WHERE条款.我好像忘记了我的SQL ..



1> Chad Birch..:

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正常增加它.



2> Russ Cam..:

您不能将WHERE子句与VALUES子句组合使用.据我所知,你有两个选择 -

    INSERT指定值

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

    使用SELECT语句INSERT

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



3> Rob Prouse..:

您可以使用WHERE子句进行UPDATE查询.INSERT时,假设该行不存在.

在MySQL中,如果要INSERT或UPDATE,可以将REPLACE查询与WHERE子句一起使用.如果WHERE不存在,则INSERTS,否则更新.

编辑

我认为Bill Karwin的观点非常重要,可以从评论中剔除并使其显而易见.感谢Bill,自从我使用MySQL以来已经太久了,我记得我有REPLACE的问题,但我忘记了它们是什么.我应该查一查了.

这不是MySQL的REPLACE的工作方式.它执行DELETE(如果该行不存在,则可以是无操作),然后是INSERT.想想相关的后果.触发器和外键依赖项.而是使用INSERT ... ON DUPLICATE KEY UPDATE.


这不是MySQL的REPLACE的工作方式.它执行DELETE(如果该行不存在,则可以是无操作),然后是INSERT.想想相关的后果.触发器和外键依赖项.而是使用INSERT ... ON DUPLICATE KEY UPDATE.

4> Daniel A. Wh..:

我不相信插入有一个WHERE子句.



5> Somnath Mulu..:
插入查询不支持where关键字*

条件适用,因为您可以将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);

此语句使用子选择插入多个记录.

如果要插入单个记录,可以使用以下语句:

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子句插入

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有