mysql - RAND() 在 SQL 触发器中用于获取随机数。如果它生成已使用的号码会怎样?
问题描述
我正在开发一个系统,我需要为每个注册的用户生成一个六位数的代码。所以我使用这个语句 (SELECT LEFT(CAST(RAND()*1000000000+999999 AS INT),6) 来生成它。我已经使那个特定的行唯一。问题是这一切都是通过触发器发生的。我的问题是,如果这个 RAND() 生成的数字已经在使用会发生什么?触发器是否会再次执行,因为那个特定是唯一的?或者我需要在触发器本身中写任何条件吗?如果我需要写任何情况,请帮助我。
解决方案
如果随机生成器生成一个已经使用过的值,并将其存储在具有 UNIQUE 约束的列中,则该行将违反该约束,并且触发器更改的 INSERT 和任何其他数据都将被取消。
触发器不会重试。捕获错误后,您的应用程序代码需要执行重试。
使用表的自动增量机制来保证不重用值会简单得多。
推荐阅读
- javascript - multer/filepond 上传返回未定义
- reactjs - Redux 对于 React 和 React Native 是一样的吗?
- asp.net - HTTP 到 HTTPS 不适用于我的 asp.net 网站
- android - Kotlin:RecyclerView with SoundPool:行上没有声音点击
- python - PyQt5区分ok和cancel命令
- doctrine-orm - php bin/console make:entity --regenerate App 不生成新字段
- php - 你能像使用 JavaScript 等那样在 PHP 中拥有非类对象吗?
- java - 在基于时间的解决方案中,消除国际象棋中无趣/输线的最佳方法?
- angular - 订阅成功后在服务中调用未定义
- javascript - 无法在反应应用程序中导入 CSS 模块