我正在尝试为我网站上的项目生成独特的短网址。例如,用户可能会添加一个项目,结果 url 将类似于:
http://example.com/item/abc
我希望唯一标识符由 3 或 4 个字符组成,其中字符是字母和数字。我认为与其随机生成字符串然后确保它们是唯一的并且尚未使用过,不如我可以提前生成它们并将它们存储在数据库中。然后,当用户添加一个项目时,我可以从数据库中选择下一个缩短的 url 字符串并将其分配给该项目。这是解决这个问题的好方法吗?有没有更好的方法?我认为这会使它变得更简单,因为它们已经生成了。但是,我也可以看到一个潜在的竞争问题,两个项目被分配了相同的标识字符串,我不确定是否LOCK TABLES
是最好的解决方案。
另外,如果不使用LOCK TABLES
,这样的东西可以保证 MySQL 中没有竞争条件吗?
update ids set item_id=1 WHERE id=(SELECT id FROM ids WHERE item_id IS NULL LIMIT 1);
然后我可以为 id 为 1 的项目选择 id?在该查询期间,没有其他查询能够声明它吗?