【发布时间】:2021-09-09 07:37:42
【问题描述】:
我需要为在我的 Web 应用程序上注册的用户创建一个唯一的帐号。帐号将通过递增数字来创建
user 1 - 9898000000001
user 2 - 9898000000002
...
我在 MySQL 数据库中有以下存储过程
consider bank_id as '9898' below.
BEGIN
Set @initialComId = '0000001';
Set @table_value = null;
Set @t = null;
SELECT max(company_va) into @table_value FROM virtual_account_numbers
IF ((@table_value) is null and bank_id =1) then
Set @newComId = CONCAT(bank_id,'000001');
INSERT INTO virtual_account_numbers (company_va,partner_banks_id)VALUES (@newComId,bank_id);
SELECT company_va from virtual_account_numbers ORDER BY virtual_account_numbers_id DESC LIMIT 1;
END
使用上面的存储过程,如果有10个用户同时注册,我就会陷入死锁。
有没有更好的解决方案?帐号不能是随机生成的数字,应该是递增的。
【问题讨论】:
-
让数据库来做,例如。使用 AUTO_INCREMENT
-
是的,我的想法也是如此,请参阅:w3schools.com/sql/sql_autoincrement.asp
-
@LarsStegelitz 谢谢。但是我可以使用自动增量实现 00000001、00000002 吗?
-
是的,你会的。如果需要,您可能必须在前面添加零,但是可以。
-
@KIKOSoftwareThanks.
标签: mysql stored-procedures deadlock