テーブルを2つのテーブルに分割します.1つはValueAにUNIQUE制約があり、1つはUNIQUE制約にありません。ビュー+トリガを使用して2つのテーブルを結合します。次のようなものがあります。
CREATE TABLE _Active (
ID INTEGER,
ValueA VARCHAR(255) UNIQUE,
ValueB INTEGER
);
CREATE TABLE _Deleted (
ID INTEGER,
ValueA VARCHAR(255), /* NOT unique! */
ValueB INTEGER
);
CREATE VIEW Thingies AS
SELECT ID, ValueA, ValueB, 0 AS Deleted FROM _Active
UNION ALL
SELECT ID, ValueA, ValueB, 1 AS Deleted FROM _Deleted;
CREATE TRIGGER _trg_ii_Thingies_Active
INSTEAD OF INSERT ON Thingies
FOR EACH ROW WHEN NOT NEW.Deleted
BEGIN
INSERT INTO _Active(ID, ValueA, ValueB)
VALUES (NEW.ID, NEW.ValueA, NEW.ValueB);
END;
CREATE TRIGGER _trg_ii_Thingies_Deleted
INSTEAD OF INSERT ON Thingies
FOR EACH ROW WHEN NEW.Deleted
BEGIN
INSERT INTO _Deleted(ID, ValueA, ValueB)
VALUES (NEW.ID, NEW.ValueA, NEW.ValueB);
END;
/* Add triggers for DELETE and UPDATE as appropriate */
(私はCREATE TRIGGERの構文についてはわかりませんが、私は何を意味するのか知っています。)
部分インデックスを許可していないため、これはMySQLでは可能ではないと考えています –
フィルタリングされたインデックスを使用できます。詳細については、[here](http://stackoverflow.com/questions/3997837/unique-constraint-controlled-by-a-bit-column)を参照してください。 –