Dav*_*uer 9 mysql update replace
更新表中多行的最简单方法是什么?我有一个如下所示的 csv 文件:
|primary_key |value|
| 1 | xyz|
| 2 | abc|
| 3 | def|
...
Run Code Online (Sandbox Code Playgroud)
目标表中已存在具有这些主键的行
我想用这些值更新目标表。是否有语法,以便我可以编写如下内容:
update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3);
Run Code Online (Sandbox Code Playgroud)
查看MySQL 更新参考、本站点(MySQL-csv 更新)、SO(更新多行、多个数据库更新、更新多行),我怀疑答案是“否”,但我想确认这一点是真的。
Rol*_*DBA 11
首先是样本数据
mysql> drop table if exists mytable;
Query OK, 0 rows affected (0.03 sec)
mysql> create table mytable
-> (
-> id int not null,
-> value VARCHAR(255),
-> primary key (id)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> insert into mytable (id) values (1),(2),(3);
Query OK, 3 rows affected (0.06 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from mytable;
+----+-------+
| id | value |
+----+-------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
+----+-------+
3 rows in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
这是新的查询
update mytable A inner join
(
SELECT 1 id,'xyz' value UNION
SELECT 2 ,'abc' UNION
SELECT 3 ,'def'
) B USING (id)
SET A.value = B.value;
Run Code Online (Sandbox Code Playgroud)
这是执行的新查询
mysql> update mytable A inner join
-> (
-> SELECT 1 id,'xyz' value UNION
-> SELECT 2 ,'abc' UNION
-> SELECT 3 ,'def'
-> ) B USING (id)
-> SET A.value = B.value;
Query OK, 0 rows affected (0.06 sec)
Rows matched: 3 Changed: 0 Warnings: 0
mysql> select * from mytable;
+----+-------+
| id | value |
+----+-------+
| 1 | xyz |
| 2 | abc |
| 3 | def |
+----+-------+
3 rows in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30705 次 |
最近记录: |