私は InooDB テーブルを持っています:
- id - 主キー、自動インクリメント
- short_code - varchar(6)、一意
- 他のいくつかの列
はshort_code
常に に基づいて php で生成されid
ます。問題はshort_code
、 . がわからないため、レコードを挿入する前に を生成できないことid
です。
私は次のことを試しました:
- 空の short_code を持つレコードを挿入します
- 挿入された行の ID を
mysqli_insert_id
、または pdo などで取得します - ID に基づいてショート コードを生成し、新しい short_code でレコードを更新します
これは機能しますが、これは本当に遅いです。挿入と更新を行う必要があり、時間がかかります。
より良いアイデアは、挿入したいレコードが持つIDを「推測」し、
select max(id)+1 from mytable;
(または同様のもので)short_codeを生成し、レコードを挿入することです。ここでは、実際にははるかに優れた SELECT と 1 つの INSERT があります。
私の質問は:
- この問題に対するよりスマートな解決策はありますか?
- いいえ、解決策 2 (次の id を推測) を使用する
select max(id)+1 from mytable;
場合、max(id)=1
.その間?
ノート!
- mysql プロシージャで短いコードを生成できません。
- ID に基づいてショート コードを生成する必要があります。