一、 示例脚本:
# 创建表
CREATE TABLE `score` (
`id` bigint NOT NULL AUTO_INCREMENT,
`sname` varchar(255) DEFAULT NULL COMMENT '学生姓名',
`cname` varchar(255) DEFAULT NULL COMMENT '课程名称',
`score` int DEFAULT NULL COMMENT '分数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `score2` (
`sname` varchar(255) NOT NULL COMMENT '学生姓名',
`cname` varchar(255) DEFAULT NULL COMMENT '课程名称',
`score` int DEFAULT NULL COMMENT '分数',
PRIMARY KEY (`sname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
# 插入数据
insert into score values(1,"小孙","mysql",55);
insert into score values(2,"小孙","python",66);
insert into score values(3,"小孙","java",47);
insert into score values(4,"小郭","mysql",70);
insert into score values(5,"小郭","python",85);
insert into score values(6,"小林","java",67);
insert into score values(7,"小林","mysql",77);
insert into score values(8,"小1","mysql",55);
insert into score values(9,"小2","python",66);
insert into score values(10,"小3","java",47);
二、实现目标
本文主要以利用表主键来进行插入(表中没有的数据)、更新(表中已有的数据)。
三、 实现流程
- 表输入组件
把数据抽取至工作流。
- 表输出控件
注意:由于事务的机制,此处提交记录数量必须输入“1”,大于 1 的情况,会导致数据不能更新。
- 更新组件
对于插入错误的数据进行更新操作
四、MySQL
关于MySQL内置的更新、插入语句
INSERT INTO baidu (TITLE,LINK) VALUES ('产品介绍 - 八爪鱼采集器','这是一条测试数据') ON DUPLICATE KEY UPDATE LINK = '这是一条测试数据';
可能出现三种情况:
- 受影响的行: 0
时间: 0.002s
表示已经有一条相同的数据 - 受影响的行: 1
时间: 0.002s
表示TITLE字段没有这条数据, 并插入 - 受影响的行: 2
时间: 0.002s
表示有相同的TITLE数据且更新LINK字段
注意:
使用ON DUPLICATE KEY UPDATE
时,默认情况下,每次更新都会更新该表的自增主键ID,那就会造成主键不连续自增。
五、 SQL语句
Merge
关键字是一个神奇的DML关键字。它在SQL Server 2008被引入。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。
# DATABASES.TABLE = 目标表
# DATABASES.TABLE2 = 中间表
MERGE INTO DATABASES.TABLE AS T
USING DATABASES.TABLE2 AS S
ON T.ID = S.ID
WHEN MATCHED THEN UPDATE SET
T.COL_NAME = S.COL_NAME # 当比对存在则更新数据
T.COL_NAME2 = S.COL_NAME2
WHEN NOT MATCHED THEN INSERT
(T.COL_NAME,T.COL_NAME2......) # 当比对不存在则插入数据
VALUES
(S.COL_NAME,S.COL_NAME2......)
相关内容
ETL工具Kettle的发送邮件功能:
https://blog.csdn.net/weixin_43932609/article/details/108766325
ETL工具Kettle的列转行组件:
https://blog.csdn.net/weixin_43932609/article/details/108795244
ETL工具Kettle性能优化:
https://blog.csdn.net/weixin_43932609/article/details/108749304
=========================================================
人生得意须尽欢,莫使金樽空对月!
__一个热爱说唱的程序员。
=========================================================