编写存储过程中,经常遇到的问题就是:在同步某项数据时,我们需要做到如果库里之前有改信息,则更新,如果没有则插入。在Oracle存储过程中我们可以通过Merge INTO 来实现。但是MySQL数据库存储过程不支持Merge INTO。那我们应该如何实现呢?
首先我们看下在Oracle数据库中Merge INTO的语法
MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)
WHEN MATCHED THEN
[UPDATE sql]
WHEN NOT MATCHED THEN
[INSERT sql]
例子:
MERGE INTO A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON (A.id=C.AID)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR
WHEN NOT MATCHED THEN
INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
commit;
MySQL数据库存储过程中如何实现Merge INTO功能
-- 当前数据做 对比 如果b表存在则更新时间 不存在则插入
IF NOT EXISTS ( SELECT 1 FROM TEST_B WHERE ID = _ID AND NAME=_NAME )
THEN
INSERT INTO TEST_B (ID, NAME,operatime) VALUES (_ID,_NAME,now());
ELSE
UPDATE TEST_B set operatime = now() WHERE ID = _ID AND NAME=_NAME;
END IF;