1

2つのテーブル間で同期しようとしています。auto_incrementを持つアクティブなテーブルがあり、同じ値のアーカイブテーブルがあります。両方のIDを(テーブル間でも)一意にしたい-つまり、自動インクレメネットを保存したいのですが、両方のテーブルをUNIONした場合でも、一意性があります。どうやってやるの?mysqlがオフのときに自動インクリメントを保存する可能性はありますか?

4

1 に答える 1

0

まず、これは悪い考えのように聞こえauto_incrementます。すべてのデータはおそらくライブテーブル(IDを含む)から直接コピーされるため、アーカイブテーブルにを含めるべきではありません。

ただし、ここにいくつかのハッキーな解決策があります:

  1. AUTO_INCREMENT次を使用して、テーブルの現在を変更できます。

    ALTER TABLE tbl_name AUTO_INCREMENT = some_new_value
    

    テーブルの1つに対して大きなオフセットに設定すると、しばらくの間安全になります。この小さなハックを忘れてオフセットに到達したときを除いて、カードの家全体があなたの頭に落ちます。

  2. SELECT id + 1000000 AS idテーブルの1つで(たとえば)を選択すると、定数によるオフセットを追加するだけで済みます。それでもハックですが、少なくとも表面に近く、最終的に重なり合う領域に到達すると、修正が容易になります。

  3. 最後に、1つのテーブルから最大IDを選択し、同じ選択中に他のテーブルのすべてのIDをこの値でオフセットすることができます。ただし、IDに十分な大きさのデータ型があることを確認してください。

于 2010-02-08T08:19:42.643 に答える