Awake Asked:2022-08-30 06:57:14 +0000 UTC2022-08-30 06:57:14 +0000 UTC 2022-08-30 06:57:14 +0000 UTC 是否可以删除 postgreSQL 中使用的初级键? 772 有一个数据库,其中列 id(主键)记录自动编号。但问题是,例如,如果其中一条记录被删除,那么它所拥有的自动生成的 id 就不能再用于另一条记录了。结果,如图所示,我总共有 6 列,id 已经达到了 21。我可以通过某种方式解决这个问题并将编号返回到 order 中吗? postgresql 2 个回答 Voted Best Answer eri 2022-08-30T07:41:07Z2022-08-30T07:41:07Z 主要问题是'为什么?'...... pk 的含义是它不会在过去重复并且在未来不会相交。 如果您需要行号,则它们是在选择过程中形成的 - 在左侧的图片中。 但是,如果你想......那么你可以。在 postgres 中,这些数字是基于唯一索引和作为默认值的外部计数器构建的。展开这些表模式并查看计数器的名称。或者一个团队 pg_get_serial_sequence('table_name','column_name') 并回答问题 ALTER SEQUENCE pg_get_serial_sequence('table_name','id') RESTART WITH 3; 这当然会降低新插入的性能,因为有必要在每次插入之前手动检查唯一性约束。 Akina 2022-08-30T12:53:35Z2022-08-30T12:53:35Z 是否有可能以某种方式解决此问题并按顺序返回编号? 忘掉它。总的来说,永远不要让这样的想法进入你的脑海。 主键是表结构中的一种特殊结构。其唯一目的是在表的生命周期内唯一标识一条记录。我特别注意 - 它是表格,而不是记录本身!也就是说,即使该记录被删除,它也不再存在,但它所拥有的主键的值仍然指向当前不存在的该记录。是的,一个不寻常的概念,但它需要被接受和实现。 一般来说,主键纯粹是服务器内部的事情。在正常情况下,在一种情况下需要获取/查看其值 - 如果您需要确保主键的值没有溢出的危险。 任何试图为主键的值分配一些附加功能的尝试都是错误的。不用说,如果某样东西执行了几个不同的功能,那么它对所有这些功能的执行都很差。或者,在任何情况下,如果每个功能都由一个单独的、专门为此功能设计的东西来执行,那就更糟了。 你需要连续编号吗?为其创建一个单独的字段,并注意其中没有“漏洞”。
主要问题是'为什么?'...... pk 的含义是它不会在过去重复并且在未来不会相交。
如果您需要行号,则它们是在选择过程中形成的 - 在左侧的图片中。
但是,如果你想......那么你可以。在 postgres 中,这些数字是基于唯一索引和作为默认值的外部计数器构建的。展开这些表模式并查看计数器的名称。或者一个团队
并回答问题
这当然会降低新插入的性能,因为有必要在每次插入之前手动检查唯一性约束。
忘掉它。总的来说,永远不要让这样的想法进入你的脑海。
主键是表结构中的一种特殊结构。其唯一目的是在表的生命周期内唯一标识一条记录。我特别注意 - 它是表格,而不是记录本身!也就是说,即使该记录被删除,它也不再存在,但它所拥有的主键的值仍然指向当前不存在的该记录。是的,一个不寻常的概念,但它需要被接受和实现。
一般来说,主键纯粹是服务器内部的事情。在正常情况下,在一种情况下需要获取/查看其值 - 如果您需要确保主键的值没有溢出的危险。
任何试图为主键的值分配一些附加功能的尝试都是错误的。不用说,如果某样东西执行了几个不同的功能,那么它对所有这些功能的执行都很差。或者,在任何情况下,如果每个功能都由一个单独的、专门为此功能设计的东西来执行,那就更糟了。
你需要连续编号吗?为其创建一个单独的字段,并注意其中没有“漏洞”。