sql - 在几行中增加唯一值
问题描述
我将表创建为
create table public.test
(
val int unique not null
)
此表包含一些行
| Val |
|--------|
|1 |
|2 |
|3 |
|4 |
|5 |
|6 |
|7 |
|8 |
|9 |
我想增加所有大于 5 的值(使用 PostgreSQL)。但如果尝试update public.test set val=val+1 where val > 5
我会得到异常:
错误:重复键值违反唯一约束“test_val_key” 详细信息:键 (val)=(7) 已存在。
我怎么能这样做?
解决方案
如果您需要定期使用,您应该将约束创建为可延迟的:
create table test
(
val int not null
);
alter table test
add constraint unique_value unique(val)
deferrable initially immediate;
为了使预期的更新起作用,没有必要在会话中将约束标记为initially deferred
或将约束更改为可延迟。
使用上述约束,以下更新可以正常工作:
update test set val=val+1 where val > 5;
推荐阅读
- typescript - TypeScript 如何支持这种类型的 Generic Type?
- c# - 从 JSON 对象获取嵌套的 fieldNames
- drupal - 尝试访问某些管理页面时收到“请求被拒绝”响应
- wpf - MVVM WPF 中我的 ScrollViewer 的 OnScrollChanged 事件
- mysql - 根据产品名称获取最高平均价格
- scala - 重载的方法值适用于具有可选类型类的替代方案
- java - 未从 SignalR 集线器接收任何数据
- rust - 使用 FuturesOrdered 组合器的 Rusoto 异步
- python - wxPython - 带有 Gif 的 AnimationCtrl 导致内核崩溃
- c++ - 如何使用 `std::multimap` 或任何其他容器对多个值进行排序?