我有一个 InooDB 表:
- id - 主键,自动递增
- short_code - varchar(6),唯一
- 其他一些列
总是在short_code
php 中基于id
. 问题是在插入记录之前我无法生成short_code
,因为我不知道id
.
我尝试了以下方法:
- 插入一条带有空 short_code 的记录
mysqli_insert_id
使用或 pdo获取插入行的 id- 根据 id 生成短代码,并使用新的 short_code 更新记录
这行得通,但这真的很慢。我必须进行插入和更新,这很耗时。
一个更好的主意是“猜测”我要插入的记录将具有
select max(id)+1 from mytable;
(或类似的东西)的 id,生成 short_code,然后插入记录。在这里,我有一个 SELECT 和一个 INSERT,实际上要好得多。
我的问题是:
- 这个问题有更聪明的解决方案吗?
- 如果不是,我使用解决方案 2(猜测下一个 id),我如何确保在我执行
select max(id)+1 from mytable;
、生成短代码和插入记录时,没有人会插入另一条记录,所以max(id)=1
不会更改与此同时?
笔记!
- 我无法在 mysql 过程中生成短代码。
- 必须根据 id 生成短代码。