2011-07-13 18 views
25

我有一個MySQL表中定義:如何在MySQL中執行唯一約束?

File 
-------------------------- 
ID int(11) PK 
name varchar(100) 
customerId int(11) FK 
isPrimaryImage tinyint(1) 
.... 


我在這裏讀了MySQL不支持UNIQUE CONSTRAINTWHERE條件。對於每個customerId,我們只有一個primaryImage = 1

那麼我還能做些什麼來強制執行這個約束呢?

+0

請參閱:http://stackoverflow.com/questions/2504007/mysql-unique-constraint-on-multiple-fields –

+0

即使MySQL支持唯一約束,您也不能在此處使用一個約束(假設您每次都需要多個次映像客戶),因爲你將有幾個具有相同customerID和isPrimaryImage = 0的元組(但你可以使用NULL而不是0)。 –

+0

表格設計已關閉,您無法使用此佈局強制執行您想要的操作。 –

回答

54

MySQL完美支持唯一約束。

雖然它不支持部分約束/索引,所以您需要使用NULL而不是0來標記非主圖像。

ALTER TABLE file ADD CONSTRAINT ux_file_customer_primary 
UNIQUE (customerId, isPrimaryImage) 

您可以插入NULL值的任意數目爲isPrimaryImage但每個客戶只有一個非空值。

+1

+1簡單,聰明,直接 –

+0

整齊。我會給這個嘗試 – kasdega

+0

@Quassnoi這正是我所需要的,謝謝你。 – kasdega