我想知道如果在我发布更新时数据库中不存在该行,是否有更新错误的方法.
update users set email='aa@bb.com' where id=200
Run Code Online (Sandbox Code Playgroud)
如果users表没有id = 200的用户,那么postgres只会说"UPDATE 0".但是,我想知道我是否可以收到错误.这样,我不必向数据库发出2个请求,一次检查存在,一次更新.如果我们单独进行检查,在检查存在和发布更新之间也可能存在竞争条件.
为什么我需要错误?很简单 - 因此客户知道他们使用了无效的用户ID并且他们采取了纠正措施.
Igo*_*nko 10
你可以使用类似的东西
update users set email='aa@bb.com' where id=200 returning id;
Run Code Online (Sandbox Code Playgroud)
此查询将返回id更新的行.如果它返回0行 - 那么在您的应用程序中抛出一个错误.
您还可以检查db驱动程序/框架是否返回受影响行的计数(如getUpdateCount()JDBC中).
您可以使用匿名代码块.
do $$
begin
update users set email='aa@bb.com' where id=200;
if not found then raise exception 'User not found';
end if;
end $$;
Run Code Online (Sandbox Code Playgroud)
或常规功能:
create or replace function update_user(new_email text, user_id integer)
returns void language plpgsql
as $$
begin
update users set email = new_email where id = user_id;
if not found then raise exception 'User id % not found', user_id;
end if;
end $$;
select update_user('aa@example.com', 200);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7833 次 |
| 最近记录: |