2

複数のテーブル間で指定された列の一意性を維持できる自動インクリメント関数を作成したいと思います。

これはmysqlの標準関数ではサポートされていないことを理解していますが、これは手動で実行できるようです。誰かが私を正しい方向に向けることができますか?

ありがとう

4

3 に答える 3

2

いくつかの選択肢があります。1 つ目は、id を UUID (36+ varchar フィールド) にして、MySQL のUUID()関数を使用することです。別のオプションは、テーブルを一種のシーケンス生成テーブルとして使用することです。これにより、auto_increment 機能を使用でき、このテーブルに挿入するときに生成されたものを他の場所のキーとして使用できます。

個人的には、グローバルに一意の識別子を持つかなり一般的な方法であるため、UUID を選択します。警告: MySQL の実装を使用する代わりに、クライアントの言語でこれらの UID を生成した方がよい場合があります。

于 2009-09-07T22:30:13.793 に答える
0

列 (ID) を primary/unique および auto_increment に設定する際の問題は何ですか?

ps:さらに、複数のテーブル間で一意性が必要な場合は、おそらく何かが間違っています。

于 2009-09-07T22:52:09.767 に答える
0

これはこのようなものになると思います

delimiter $$
CREATE PROCEDURE myProc()
BEGIN
DECLARE mid INT;
START TRANSACTION;
select MAX(id) + 1 INTO mid (  SELECT id FROM tbl1 UNION ALL SELECT id from tbl2 ... ) tbls;
INSERT INTO <somt_tbl> VALUES ( mid, ... ); 
COMMIT;
END$$
于 2009-09-08T06:26:01.320 に答える