アイテム用にこのテーブルがあり、挿入中に、ID フィールド (使用されるインデックス ID を除く) は、このパターンで日付と自動インクリメント値の組み合わせを生成する必要があります
"yy-mm-xxx" ここで、yy は現在の年の下 2 桁、mm は月、xxx は自動生成された ID です。
アイテム用にこのテーブルがあり、挿入中に、ID フィールド (使用されるインデックス ID を除く) は、このパターンで日付と自動インクリメント値の組み合わせを生成する必要があります
"yy-mm-xxx" ここで、yy は現在の年の下 2 桁、mm は月、xxx は自動生成された ID です。
BEFORE INSERT または AFTER INSERT のいずれかのトリガーでこれを達成できるとは思いません。また、AUTO_INCREMENT 列に割り当てられた値は、INSERT ステートメントの式では使用できません。
あなたが取得しようとしている最も近いものについて(私は思う)、別のUPDATEステートメントです。トリックは、挿入された行を識別することです。1 つの方法は、その列に NULL 値を挿入し、その列に NULL を持つすべての行を更新することです。
UPDATE mytable t
SET t.myidcol = CONCAT(DATE_FORMAT(NOW(),'%y-%i-'),t.id)
WHERE t.myidcol IS NULL;
(その日付値がどこから来ているかを指定していませんでした。上記のステートメントは、システムからの現在の日付を使用しています。それがテーブルの日付列である場合は、代わりにそれを使用します。DATE_FORMAT 関数は、日付/日付時刻/タイムスタンプを次の形式に変換します。 2 番目の引数で指定された形式に基づく文字列。
編集
「(使用されているインデックス ID は別として)」と「autoincrement」を意図したよりも多く読んだ可能性があります。これは、テーブルに AUTO_INCREMENT として定義された ID 列があることを意味すると解釈しました。そうでない場合、上記の答えは実際には機能しません。
(これは、質問の詳細、つまりSHOW CREATE TABLEからの出力、および割り当てられる値のタイプを示すいくつかのサンプルデータです(自動インクリメントIDが個別の値「yy-mm-」ごとに「リセット」されているかどうか) 、または継続的に上昇しているかどうか。)
自動インクリメント部分の値がAUTO_INCREMENT 以外のメカニズムから導出される場合、列への値の割り当ては、おそらく BEFORE INSERT トリガーで実行できます。
そうは言っても、この形式で列を保存する必要があるかどうかは疑問です。(この列を追加することで要件が満たされるという明確な要件はなく、この列が必要な理由も示されていません。)
date
とがテーブルに別の列として格納されている場合、id
書式設定された文字列の生成は簡単で、クエリの SELECT リストで処理できます。文字列値の順序付けが、特定の yy-mm- 内の id 値を分割せずに番号順に並べ替えることが保証されていないことを考えると、これが順序付けに非常に役立つとは思えません。