【问题标题】:How to make sure random key generated in trigger complies to unique constraint如何确保触发器中生成的随机密钥符合唯一约束
【发布时间】:2013-01-03 04:15:43
【问题描述】:

新年快乐! :)

我有一个表,插入时我使用触发器用随机字符串填充列random_key。 该列有唯一性约束,但理论上有可能触发器生成的随机字符串不唯一,不会插入记录。

有没有办法在触发器中避免这种情况?还是我必须创建一个插入过程?

编辑:(从 cmets 复制并详细说明)

我在这个表中有一个普通的 id,但对于外部使用(互联网)我需要一个完全随机的 id,这样表中下一行的 id 就无法猜到。

使用 id + 常量加盐可能会起作用。我会考虑的。

从到目前为止的答案来看,似乎没有简单的解决方案可以避免触发器中的重复。这也是一个答案。 :)

【问题讨论】:

  • 除了随机文本之外,用递增的数字/序列加盐会伤害您的随机密钥吗?
  • 在一列中有一个随机字符串有什么意义?如果您需要代理键,那么序列有什么问题?
  • 使用序列。如果您已经填写了一些数据,只需找到最大的唯一值并从它们开始您的序列。
  • 唯一性几乎排除了随机性。试图禁止重复就是强加命令。
  • Sys_guid 是全球唯一的。 IE。涉及多个数据库时是安全的

标签: oracle random plsql unique


【解决方案1】:

您可以使用SYS_GUID 函数。这将返回一个唯一的字符串。

SQL> select sys_guid() from dual;

SYS_GUID()
--------------------------------
D24FC8257402951BE0401AA2C9997E18

【讨论】:

  • 感谢您的提示,但我需要并且有一个更复杂的唯一标识符。
  • @BazzPsychoNut - 你需要告诉我们更多关于你的要求,因为目前你有一个无意义的规范。
  • 告诉您确切的规格,以便我们回答您的问题
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2016-08-25
  • 2013-07-18
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多