MySQL データベースのテーブル全体に一意のインデックスを作成する方法はありますか?
ユニークとは、つまり、
table A ids=1,2,5,7...
table B ids=3,4,6,8...
MySQL データベースのテーブル全体に一意のインデックスを作成する方法はありますか?
ユニークとは、つまり、
table A ids=1,2,5,7...
table B ids=3,4,6,8...
制約を直接作成することでは不可能だと思います。ただし、一意の ID を取得するための解決策がいくつかあります。
1 つの提案は、を使用することTRIGGER
です。またはの間に ID の存在をチェックするBEFORE INSERTトリガーを両方のテーブルに作成します。INSERT
UPDATE
UNIQUE
2 つ目は、数値と他のテーブルを含む 3 つ目のテーブルを作成することです。3 つ目のテーブルを参照しますTableA
。TableB
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 に挿入する任意の種類の値を代わりに使用できます。