`
dannyhz
  • 浏览: 398020 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

mysql实现merge into

 
阅读更多
http://blog.itpub.net/29989552/viewspace-2109761/



引用


mysql并不没有oracle、mssql的merge into语法,但是有个on duplicate key update语法(不是标准的sql语法)可以实现merge into语法
实验一:更新所有字段
mysql> select * from dup;
+------+--------+-------+
| id   | name   | phone |
+------+--------+-------+
|    1 | wujian |   123 |
|    2 | xiay   |  1234 |
|    3 | wangj  | 12345 |
+------+--------+-------+
3 rows in set (0.00 sec)

mysql> select * from dupnew;
+------+------+-------+
| id   | name | phone |
+------+------+-------+
|    1 | xyr  |   128 |
|    2 | sy   |     0 |
|    5 | wsj  |  8684 |
+------+------+-------+
3 rows in set (0.00 sec)

mysql>  insert into dup(id,name,phone ) select * from dupnew on duplicate key update name=values(name);
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from dup;
+----+-------+-------+
| id | name  | phone |
+----+-------+-------+
|  1 | xyr   |   123 |
|  2 | sy    |  1234 |
|  3 | wangj | 12345 |
|  5 | wsj   |  8684 |
+----+-------+-------+
4 rows in set (0.00 sec)
结果:实现了将表dupnew更新到表dup中去,存在就更新,不存在就插入
注意:id字段是主键或UNIQUE索引,不然只会插入dupnew表所有行数据

实验二:更新部分字段
mysql> select * from dupagn;
+------+------+-------+
| id   | name | phone |
+------+------+-------+
|    1 | myy  |  1888 |
|   10 | wz   |   556 |
+------+------+-------+
2 rows in set (0.00 sec)

mysql> insert into dup(id,name) select id,name from dupagn on duplicate key update name=values(name);
Query OK, 3 rows affected (0.06 sec)
Records: 2  Duplicates: 1  Warnings: 0

mysql> select * from dup;
+----+-------+-------+
| id | name  | phone |
+----+-------+-------+
|  1 | myy   |   123 |
|  2 | sy    |  1234 |
|  3 | wangj | 12345 |
|  5 | wsj   |  8684 |
| 10 | wz    |  NULL |
+----+-------+-------+
5 rows in set (0.00 sec)
结果:实现了只更新name字段,但是插入的记录中其他字段就为空了


分享到:
评论

相关推荐

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    Merge Into 语句代替InsertUpdate

    非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者

    Merge into的使用详解

    在SQL语言中,`MERGE INTO`语句是一种强大的工具,用于合并两个数据集,它允许根据特定条件将数据从一个源(通常是临时表或视图)插入或更新到目标表。这个操作通常被称为“合并”或“ Upsert”,因为它可以实现插入...

    MySQL中实现插入或更新操作(类似Oracle的merge语句)

    如果需要在MySQL中实现记录不存在则insert,不存在则update操作。可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,...

    Mysql合并表Merge引擎

    1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...

    MySQL Replace INTO的使用

    MySQL中的`REPLACE INTO`语句是一个非常有用的命令,它的工作方式类似于`INSERT`,但带有一种自动删除和替换的功能。当试图插入的数据与表中已存在的唯一索引(包括 PRIMARY KEY 或 UNIQUE 索引)冲突时,`REPLACE ...

    Merge-Sql.zip

    MERGE INTO 目标表 USING 源表 ON (条件) WHEN MATCHED THEN UPDATE SET 字段 = 新值 WHEN NOT MATCHED THEN INSERT (字段列表) VALUES (值列表); ``` 在支持MERGE的数据库系统(如Oracle、SQL Server、...

    mysql面试题,涉及MySQL基础、MySQL索引、MySQL语句 MySQL进阶等方面,适用于初、中级开发人员

    MySQL 中没有类似 Oracle 的 merge 语句,但是可以使用两种方法来实现类似的功能:INSERT INTO … ON DUPLICATE KEY UPDATE 和 REPLACE INTO。前者使用 INSERT 语句向表中插入记录,如果发现主键或唯一键冲突,则...

    MySQL and JSON A Practical Programming Guide 2018

    Inserting into an Array Using TRUNCATE Before Adding New Data Using JSON_INSERT Using JSON_REPLACE JSON_REMOVE JSON_SET JSON_UNQUOTE The Three JSON_MERGE Functions JSON_MERGE JSON_MERGE_PRESERVE JSON_...

    深入mysql ON DUPLICATE KEY UPDATE 语法的分析

    mysql “ON DUPLICATE KEY UPDATE” 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列...

    达梦数据库与mysql差异性语法

    达梦数据库不支持ON DUPLICATE KEY UPDATE语句,而是使用MERGE INTO语句来实现插入或更新操作。例如: ``` MERGE INTO table_name (column1, column2) VALUES (value1, value2) ON DUPLICATE KEY UPDATE column1 = ...

    实现MySQL中存储JSON数据.rar

    在处理大量JSON数据时,还可以利用MySQL的JSON数组和函数,比如`JSON_ARRAY`, `JSON_OBJECT`, `JSON_MERGE_PATCH`等,来进行更复杂的操作。 总的来说,MySQL对JSON数据类型的内置支持使得存储和处理半结构化数据变...

    mysql5.7支持json数据的增删改查的例子

    实际上,它还提供了诸如`JSON_CONTAINS`、`JSON_LENGTH`、`JSON_MERGE_PATCH`等更多高级功能,允许对JSON数据进行更复杂的操作。通过这些功能,开发者可以更方便地在MySQL中管理和处理非结构化的JSON数据,从而扩展...

    如何向mysql中插入数据?

    MySQL 支持多种存储引擎,包括 MyISAM、InnoDB、BDB、Memory、Merge、Archive、Federated、Cluster/NDB、CSV、BlackHole 和 EXAMPLE 等。每种存储引擎都有其特点和优缺点,选择合适的存储引擎对数据库的性能和安全性...

    MySQL分表和分区的具体实现方法

    本文将详细介绍这两种技术及其在MySQL中的具体实现。 **垂直分表**是将一个宽表(包含大量列)拆分为多个窄表,每个新表包含一部分原表的列。例如,一个包含20个字段的表A可以拆分为表A1和A2,每个新表包含10个字段...

    mysql视图简介.pdf

    ### MySQL视图详解 #### 一、视图概述 视图是MySQL中一种重要的功能,它为用户提供了灵活的数据访问方式。简而言之,视图是一个虚拟表,其内容由一条SELECT语句定义。尽管视图看起来像是一个独立的表,但实际上它...

    php中mysql数据库操作类.zip

    call_user_func_array([$stmt, 'bind_param'], array_merge(str_split($types), $params)); } ``` 6. **执行预处理语句并获取结果**: ```php public function execute($stmt) { return $stmt->execute(); } ...

Global site tag (gtag.js) - Google Analytics