私のロジックは、INSERTの前にテーブルのIDを知る必要があります(挿入中にIDを手動で設定します)。このIDを使用するロジックは複数のサーバー上にあるため、mysqlにIDを作成させることは良い考えかもしれませんが、私が書いた関数はアトミックではないため、高負荷で呼び出すと、一意ではなく同一の番号が返されます。
CREATE FUNCTION `generate_document_log_id`() RETURNS BIGINT(16)
BEGIN
DECLARE R_ID BIGINT(16);
UPDATE document_log_sequence SET id = id + 1;
SELECT id INTO R_ID FROM document_log_sequence;
RETURN R_ID;
END
最後のIDを格納し、新しいIDごとにインクリメントするために、1つの列「id」を持つテーブル「document_log_sequence」を使用しています。たぶん解決策はこれからは程遠いですが、私にはこれ以上のアイデアはありません。
説明するのを忘れました。データベースサーバーは1つだけで、クライアントの数はn個です。上記の関数は(一種の)スレッドセーフではありません。