【发布时间】:2015-10-28 16:37:10
【问题描述】:
我必须为每个注册用户创建一个唯一的代码。问题是需要根据用户来自哪个城市生成唯一代码。 所以我的表是:
CREATE TABLE `microreg`.`users` ( `user_id` INT NOT NULL
AUTO_INCREMENT , `user_code` CHAR(10) NOT NULL , PRIMARY KEY (`user_id`),
UNIQUE (`user_code`));
user_id是DB中用户的唯一标识。user_code是
为用户使用而生成的可读代码。他们访问他们的
使用该唯一代码的帐户。
CREATE TABLE `microreg`.`districts` ( `district_id` INT NOT NULL
AUTO_INCREMENT , `district_name` VARCHAR(50) NOT NULL , `district_code`
CHAR(4) NOT NULL , PRIMARY KEY (`district_id`), UNIQUE (`district_code`));`
这包含大约 20K 个分配了唯一代码的地区。
说,
Trichy ITRY
Coimbatore ICBE
Kolkata IKOL
Delhi IDEL
...
New York UNYK
Washington UWDC
所以,当用户在 Trichy 注册为区时,他将生成
user_id : 1
user_code : ITRY000001
同一城市的第二个用户
user_id : 2
user_code : ITRY000002
另一个来自纽约的
user_id : 3
user_code : UNYK000001
user_code 对于地区来说是唯一的。 [id 1 和 3 的用户不相同]
到目前为止,我取到了用户选中区的最大值
SELECT RIGHT(MAX(user_code),6) FROM `users` WHERE user_code LIKE 'ITRY%';
然后将其增加 1,然后将其添加回来,并附加 District_code。
INSERT INTO `microreg`.`users` (`user_id`, `user_code`) VALUES (NULL, 'ITRY000003');
当一次只有一个用户更新时,此方法非常有效。但是当多个用户同时开始注册时,这开始产生问题。 由于设置了唯一性,因此生成了两个具有相同 user_code 的用户并产生了开销。
以前,对于另一个应用程序,我为每个代码创建了唯一的表(如这里的地区)并将用户添加到该表中,然后附加回原始表(如这里的用户)。 在那种情况下,我只有 4 种类型的代码(比如这里的区)。但是对于这个应用程序,我有大约 20K 个区。我无法得到这个火花。 (有关信息,我在此应用程序中使用 PHP 和 mysqli)谢谢。
【问题讨论】: