フィールドの 1 つが True の場合、3 つのフィールドに UNIQUE INDEX を追加したいと考えています。すなわち1に等しい
UNIQUE INDEX pkg_box_delivered (package_id、box_id、配達済み) WHERE 配達済み = 1;
Alter ステートメントと、それを Create Table ステートメントに追加する方法が必要です。
フィールドの 1 つが True の場合、3 つのフィールドに UNIQUE INDEX を追加したいと考えています。すなわち1に等しい
UNIQUE INDEX pkg_box_delivered (package_id、box_id、配達済み) WHERE 配達済み = 1;
Alter ステートメントと、それを Create Table ステートメントに追加する方法が必要です。
テーブル内の一部の行にインデックスを作成することはできません。値に関係なく、テーブル内のすべての行に対してのみ作成できます。
Alter ステートメントが必要で、それを Create Table ステートメントに追加する方法
ALTER TABLE を使用して既存のテーブルの定義を変更しますが、CREATE TABLE はテーブルとそのフィールドを作成します。したがって、テーブルが既に存在する場合....
ALTER TABLE yourtablename
ADD UNIQUE INDEX pkg_box_delivered (package_id, box_id, delivered);
または、まだ存在しない場合....
CREATE TABLE yourtablename (
package_id INT NOT NULL,
box_id INT NOT NULL,
delivered BOOLEAN,
...
UNIQUE INDEX pkg_box_delivered (package_id, box_id, delivered)
);
一部の行にインデックスを選択的に適用できないのと同様に、一意制約を選択的に適用することはできません。これを強制するには、トリガーを追加する必要があります。