MySQL中on duplicate key update username = VALUES(username),maxdate = VALUES(maxdate),
在PostgresSQL中如何实现呢?
MySQL中的语句:
insert into db select distinct username ,mindate,maxdate from test_table on duplicate key update username = VALUES(username),maxdate = VALUES(maxdate);
PostgresSQL中实现:
步骤一:创建表
CREATE TABLE db (username TEXT, userid TEXT ,mindate TEXT ,maxdate TEXT);
步骤二:创建唯一索引
CREATE UNIQUE INDEX username_index ON db (username);
步骤三:创建更新函数
CREATE FUNCTION merge_db(uname TEXT, uid TEXT ,mind TEXT , maxd TEXT) RETURNS VOID AS
$$
BEGIN
LOOP
-- first try to update the username
UPDATE db SET maxdate = maxd WHERE username = uname;
IF found THEN
RETURN;
END IF;
-- not there, so try to insert the username
-- if someone else inserts the same useridconcurrently,
-- we could get a unique-useridfailure
BEGIN
INSERT INTO db(username,userid,mindate,maxdate) VALUES (uname, uid, mind,maxd);
RETURN;
EXCEPTION WHEN unique_violation THEN
-- do nothing, and loop to try the UPDATE again
END;
END LOOP;
END;
$$
LANGUAGE plpgsql;
步骤四:测试案例
select merge_db('user_one','279470','20101011','20101011');
select merge_db('user_two,'279470','20101011','20101012');
select merge_db('user_one','279470','20101011','20101012');
分享到:
相关推荐
[mysql]mysql通过on duplicate key update实现批量插入或更新(csdn)————程
mysql “ON DUPLICATE KEY UPDATE” 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列...
例如,如果列a被定义为unique,并且值为1,则下列语句有同样的效果,也就是说一旦出入的记录中存在a=1的情况,直接更新c = c + 1,而不执行c = 3的操作。... ON DUPLICATE KEY更新多行记录 如果在INSERT语句末
mysql数据库Insert语句后加ONDUPLICATE KEY UPDATE,保证唯性如果在INSERT语句末尾指定了ON DUPLICATE KEY UP
本文介绍一下关于mysql中INSERT INTO… ON DUPLICATE KEY UPDATE用法
本文实例讲述了mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点。分享给大家供大家参考,具体如下: replace into和insert into on duplicate key update都是为了解决我们平时的一个...
今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on duplicate key update ...,我当时就想怎么不用Replace呢,于是回来就仔细查了下,它们果然还是有区别的
在对看看的后台进行排序的时候,遇到了一个像这样的需求,在电影表中有ID(主键自增)和orderby(排序字段) ,假设有十条数据id分别从1-10之间,对应的...下面来看看Mysql的REPLACE和INSERT … ON DUPLICATE KEY UPDATE REP
本篇文章是对mysql "ON DUPLICATE KEY UPDATE"语法进行了详细的分析介绍,需要的朋友参考下
深入理解和优雅使用ON DUPLICATE KEY Update 解决存在则更新,不存在则新增的问题 先看语法INSERT INTO table(id,a,……) values(1,‘xh’,……) ON DUPLICATE KEY Update a=‘value’,……; 举个例子 1,先创建表...
INSERT语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,…)] VALUES ({expr | DEFAULT},…),(…),… [ ON DUPLICATE KEY UPDATE col_name=expr, … ] 或: INSERT [LOW_...
在之前面对这样的问题的时候,我们知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。 使用ON DUPLICATE KEY UPDATE 插入数据之前,表中就一条记录,如下图 SQL语句如下,当插入记录时候,与表中...
如果需要在MySQL中实现记录不存在则insert,不存在则update操作。可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,...
name) values (1, ‘yourname’) ON DUPLICATE KEY UPDATE auto_name=’yourname’ON DUPLICATE KEY UPDATE的使用 如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现...