5

MySQL データベースのテーブル全体に一意のインデックスを作成する方法はありますか?

ユニークとは、つまり、

                table A ids=1,2,5,7... 

                table B ids=3,4,6,8...
4

2 に答える 2

9

制約を直接作成することでは不可能だと思います。ただし、一意の ID を取得するための解決策がいくつかあります。

1 つの提案は、を使用することTRIGGERです。またはの間に ID の存在をチェックするBEFORE INSERTトリガーを両方のテーブルに作成します。INSERTUPDATE

UNIQUE2 つ目は、数値と他のテーブルを含む 3 つ目のテーブルを作成することです。3 つ目のテーブルを参照しますTableATableB

于 2013-02-12T04:56:02.173 に答える
1

JW が言うように、これはおそらく 3 番目のテーブルを使用するとうまくいくでしょう。MySQL では、ID フィールドを使用してこれを簡単にすることができます。非常に単純な例は、これらのテーブルを使用することです (テーブルの単純なバージョンで、詳細な情報を知らずに名前だけを使用しています)。

CREATE TABLE a
  (
    `id` int,
    `name` varchar(100),
    PRIMARY KEY(`id`)
  )
  ENGINE = INNODB;
CREATE TABLE b
  (
    `id` int,
    `name` varchar(100),
    PRIMARY KEY(`id`)
  )
  ENGINE = INNODB;
CREATE TABLE c
  (
    `id` int auto_increment,
    `intable` varchar(10) not null,
    PRIMARY KEY(`id`)
  )
  ENGINE = INNODB;

次に、いずれかのテーブルに値を挿入する場合は、次のようにします ('Joe' を a に挿入するサンプル)。

INSERT INTO c (`intable`) VALUES ('a');
INSERT INTO a (`id`, `name`)
  SELECT LAST_INSERT_ID() AS id, 'Joe' AS name;

c の intable エントリの唯一の理由は、それが作成されたテーブルを知るためです。c に挿入する任意の種類の値を代わりに使用できます。

于 2013-02-12T05:11:02.333 に答える