私は 'created_at'によってパーティション化され、主キーが(id
、created_at
)であるテーブルfooを持っています。私:パーティション化されたMySQL DB内のフィールドにユニークなインデックスを追加するにはどうすればよいですか?
CREATE TABLE `foo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`bar_id` int(11) DEFAULT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (TO_DAYS(created_at))
(PARTITION p0 VALUES LESS THAN (733712) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (733773) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (733832) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (733893) ENGINE = InnoDB,
...
)
bar_id
がすべてのパーティションで一意であるように一意のインデックスを作成するにはどうすればよいですか。私はのような何かしようとした場合:
CREATE UNIQUE INDEX some_index USING BTREE ON foo (bar_id);
を私はエラーが表示さ:
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
をしかし、インデックスを構築するとき、私はパーティショニング機能(id
、created_at
)が含まれている場合、私はそのインデックスで終わりますbar_idが一意であることを保証するものではありません。
UPDATE
私はすでにテーブルの主キーを持っていることを言及しておく必要があります。
PRIMARY KEY (`id`,`created_at`)
また、bar_idはNULLにすることができます。
ねえ、方法を見つけましたか?私はまったく同じ問題で苦労しています。パーティションキーがユニークキーの一部でなければならない理由は分かりません。それを理解できない。 – varunl
@varunl、私も同じ問題があります。パーティションキーとして 'start datatime'フィールドを使用する必要があります。私は' id'をプライマリキーとして作成していますが、本当にユニークである必要があるUNIQUE KEYとして他のフィールドを持っています。 – shgnInc