2013-07-23 67 views
-1

當其中一個字段爲True時,我想在3個字段中添加一個UNIQUE INDEX。即等於1當一個字段等於某個值時,3個字段上的Mysql UNIQUE INDEX

UNIQUE INDEX pkg_box_delivered(package_id,box_id,delivered)WHERE delivered = 1;

我需要一個Alter語句以及如何將它添加到Create Table語句中。無論其價值只在所有的表中的行 -

+0

要清楚,你想強制執行一個限制,即沒有兩個記錄的'package_id'和'box_id'具有相同的值 - 但只有'deliver = 1'的地方? – eggyal

回答

0

不能創建在在一個表中的行的一些指數。

我需要一個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) 
); 

正如您不能有選擇地將索引應用於某些行一樣,您無法選擇性地應用唯一約束。你需要添加一個觸發器來執行此操作。

+0

謝謝,但我已經知道這些陳述。問題是我只希望那些在交付= 1時是唯一的,但是我不能觸發,因爲當項目被輸入到表格中時我無權訪問。 – Avril

+0

我不明白你的意思是「我......希望那些在交付= 1時是唯一的」如果你的意思是這些字段的組合值只有在交付= 1時纔是唯一的,那麼請參閱我的答案中的最後一句。 – symcbean

+0

我知道我現在需要一個觸發器,但我不知道它應該是什麼樣子。另外我的數據庫中已經有了我無法刪除的數據。 – Avril

相關問題