PostgreSQL数据库添加更新只用一个函数insertupdate
2010-12-07 15:52
603 查看
--建表 CREATE TABLE user_friend ( uf_id serial NOT NULL, uf_userid integer NOT NULL, uf_friendlist character varying(1000), uf_created timestamp without time zone DEFAULT now(), uf_count integer, uf_listname character varying(1000), CONSTRAINT pk_user_friend PRIMARY KEY (uf_id) ); --新建一个函数,用于用户添加和插入数据 CREATE OR REPLACE FUNCTION add_friend(userid INT, friend_userid INT, friend_name character varying) RETURNS INT AS $$ BEGIN LOOP -- first try to update the key UPDATE user_friend set uf_friendlist = replace(uf_friendlist, ','||friend_userid||',', ',')||friend_userid||',', uf_listname = replace(uf_listname, ','||friend_name||',', ',')||friend_name||',',uf_count = length(uf_friendlist) - length(REPLACE(uf_friendlist, ',', '')) - 1 where uf_userid=userid; IF found THEN RETURN 1; END IF; BEGIN INSERT INTO user_friend(uf_userid,uf_friendlist,uf_count,uf_listname) VALUES (userid, ','||friend_userid||',',1,','||friend_name||','); RETURN 2; EXCEPTION WHEN unique_violation THEN RETURN 0; -- do nothing, and loop to try the UPDATE again END; END LOOP; END; $$ LANGUAGE plpgsql; --添加 select add_friend(1,1,'wangbin1'); select add_friend(1,2,'wangbin2'); select add_friend(2,1,'wangbin1'); select add_friend(2,2,'wangbin2'); select add_friend(3,1,'wangbin1'); select add_friend(3,2,'wangbin2');
相关文章推荐
- postgresql数据库 如果存在则更新(update),如果不存在则插入(insert)
- SQL之merge into 批量更新数据 Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。M
- discuz 如何添加数据DB::insert和更新数据DB::update 查询DB::query删除DB::delete
- 利用android提高的的insert,query,update,deleteAPI与execSql,rawQuery函数执行原生的插入,查询,更新,删除语
- SQL0803N INSERT 语句、UPDATE 语句或由 DELETE 语句导致的外键更新中的一个或多个值无效,因为由 "1" 标识的主键、唯一约束或者唯一索引将表
- 1.利用android提高的的insert,query,update,deleteAPI与execSql,rawQuery函数执行原生的插入,查询,更新,删除语句操作花费时间的对比结果
- discuz 如何添加数据DB::insert和更新数据DB::update 查询DB::query删除DB::delete
- 数据添加(insert),删除(delete),更新(update)
- 这样在一个sql里完成更新和插入,只用一次数据库连接,效率提高了
- 根据数据库自动生成INSERT/UPDATE更新语句
- 数据库一个表更新时没有加where 语句,把数据库恢复到执行update前的过程如下
- 新写的一个使用ASP.NET AJAX中的UpdatePanel控件实现GridView的无刷新删除,更新,添加,查询!
- [转]MSSQL数据库触发器--更新(update),删除(delete),插入(insert)
- 利用android提高的的insert,query,update,deleteAPI与execSql,rawQuery函数执行原生的插入,查询,更新,删除语
- 我想操作的是利用SqlDataAdapter的几个Command属性(InsertCommand,UpdateCommand,DeleteCommand)来更新数据库
- 无法更新 EntitySet“Ips_Articles”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <InsertFunction> 元素。
- sql中同一个Trigger里同时包含Insert,Update,Delete
- 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。
- Code First添加一个现有数据库中的表
- “无法更新EntitySet“*****”,因为它有一个DefiningQuery,而<ModificationFunctionMapping>元素中没有支持当前操作的<InsertFunction>元素”问题的解决方法