mysql replace, insert 高级用法

mysql replace, insert 高级用法


MYSQL 没有ORACLE MERGE INTO 语法。 但是有 REPLACE INTO ,和 INSERT INTO 。。 ON DUPLICATE KEY UPDATE 。。 可以供使用。

REPLACE 和INSERT 这两都共同之处:
1,都可以插入数据。
2,在目标表中已有重复KEY值记录时,可以更新目标表相应的记录字段值。
不同之处:
INSERT 。。。ON DUPLICATE KEY UPDATE : 只需更新 你需要更新的值 ,未指定的字段,保留原值。
REPLACE 。。就如其名字所蕴涵的意思一样, 如果你没有显式指定目标字段,那么目标字段将被置空/或更新为默认值。

—————测试样例:

(Production-ETL root@localhost) [test1]> show create table  test2 \G
*************************** 1. row ***************************
       Table: test2
Create Table: CREATE TABLE `test2` (
  `id` int(11) NOT NULL,
  `c1` char(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `c2` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT '^MYSQL^',
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)

(Production-ETL root@localhost) [test1]> select * from test2 ;
+----+---------+------------+
| id | c1      | c2         |
+----+---------+------------+
|  1 | a++++   | aaaaa      |
|  2 | b       | CCCCCCCCCC |
|  3 | c++++++ | CC         |
|  4 | ===     | NULL       |
|  5 | how     | CCCCCCCCCC |
|  6 | --f--   | EE         |
|  7 | g++++++ | CC         |
|  8 | --f--   | EE         |
|  9 | --f--   | EE         |
| 10 | --f--   | EE         |
| 11 | a       | DDDDDDDDDD |
| 12 | --++f   | ^MYSQL^    |
| 13 | --++f   | ^MYSQL^    |
| 14 | --++f   | ^MYSQL^    |
| 15 | --++f   | ^MYSQL^    |
+----+---------+------------+
15 rows in set (0.00 sec)


replace into test2 (id, c1,c2) select id ,  concat(c1,'++'),  repeat(c2,5) from test2 where id=1 ;

replace into test2 (id, c1,c2) select id ,  concat(c1,'++'),  substr(c2,1,2) from test2 where c1 in ('c', 'g') ;

replace into test2 (id, c1,c2) select id ,  reverse(concat(c1,'--')) m,  substr(c2,1,2) n from test2 b where c1 in ('--f')  ;

insert into test2 (id, c1,c2) select id, m, n from (select id ,  concat(c1,'++') m,  substr(c2,1,2) n from test2 b where c1 in ('c++', 'g++'))v on duplicate key update  c1= m, c2=n ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值