首页 > 解决方案 > RAND() 在 SQL 触发器中用于获取随机数。如果它生成已使用的号码会怎样?

问题描述

我正在开发一个系统,我需要为每个注册的用户生成一个六位数的代码。所以我使用这个语句 (SELECT LEFT(CAST(RAND()*1000000000+999999 AS INT),6) 来生成它。我已经使那个特定的行唯一。问题是这一切都是通过触发器发生的。我的问题是,如果这个 RAND() 生成的数字已经在使用会发生什么?触发器是否会再次执行,因为那个特定是唯一的?或者我需要在触发器本身中写任何条件吗?如果我需要写任何情况,请帮助我。

标签: mysqlsql

解决方案


如果随机生成器生成一个已经使用过的值,并将其存储在具有 UNIQUE 约束的列中,则该行将违反该约束,并且触发器更改的 INSERT 和任何其他数据都将被取消。

触发器不会重试。捕获错误后,您的应用程序代码需要执行重试。

使用表的自动增量机制来保证不重用值会简单得多。


推荐阅读