首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置IDENTITY_INSERT所需的ALTER权限的依据是什么?

问设置IDENTITY_INSERT所需的ALTER权限的依据是什么?
EN

Database Administration用户
提问于 2022-12-21 15:08:29
回答 1查看 55关注 0票数 2

Server要求用户具有ALTER权限,以便将特定值插入标识列。

考虑到插入显然是DML操作,这似乎有点奇怪。

要解释为什么这对我来说是个小问题,首先要记住,数据库不会在事务回滚时回滚标识值。这是因为数据库允许并发插入多个事务。

因此,如果稍后插入行的事务失败并必须重复,则可以安全地重用从第一次尝试中检索到的标识值。

我正在编写一个数据库编辑器,这种方法使复杂插入的实现更加容易:用户正在逐步构建一个需要键的相关表行的图表,但这些键是由数据库生成的。ORMs为此使用临时键,并在提交后重写所有内容,但这显然更难实现。对于每一个新的插入步骤,都更容易进入数据库,获取标识值,然后回滚。只有当用户最后单击“保存”时,事务才会被提交,并且值应该仍然很好。

这适用于MySQL和Postgres等其他数据库,但Server需要一个令人惊讶的高级别权限。

我的问题是,这是为什么,以及这是否可能是其他一些问题的明确插入身份值,我已经错过了。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2022-12-21 15:28:18

我没有这个理由的来源,但是不加区分地使用这个设施肯定会引起问题。

例如(假设int标识列具有正增量)显式插入2147483647作为标识值,将导致依赖身份增量的所有后续插入失败,直到有人手动运行RESEED或以其他方式排序。

您可以使用SEQUENCE而不是IDENTITY列来分配代理项键列值。在本例中,也不需要实际插入行并将其回滚--只需从序列中获取下一个值。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/321264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档