2015-10-15 96 views
1

我在MySql數據庫中有一個表。我想阻止在MySql中插入匹配的行。就像我在桌上有4列。我不想插入任何具有這4列的匹配值的行。我試圖證明下面阻止在MySql中插入匹配行

My table 
---------- 
product_name| product_sku |product_quantity| product_price 
---------- 
Computer | comp_007 | 5    | 500 

我想阻止再次插入相同的行。我怎樣才能使用MySql Query?

UPDATE

我不希望再次插入


Computer | comp_007 | 5    | 500 

但我想下面插入行


mouse  | comp_007 | 5    | 500 

Computer | comp_008 | 5    | 500 

Computer | comp_007 | 50    | 500 

Computer | comp_007 | 5    | 100 

mouse  | mou_007  | 5    | 500 

回答

3
創建

組合唯一密鑰/複合上的列在問題項:

ALTER TABLE `table` ADD UNIQUE (
`product_name` , 
`product_sku` , 
`product_quantity`, 
`product_price` 
); 

任何嘗試插入重複行都會導致MySQL錯誤。

+0

你讀過我的更新嗎? –

+0

@abuabu你有沒有試過我的答案? –

1

如果可能的話,你應該添加一個唯一密鑰你列:

ALTER TABLE `table_name` 
ADD UNIQUE INDEX `ix_name` (`product_name`, `product_sku`, `product_quantity`, `product_price`); 

然後用INSERT IGNORE

INSERT IGNORE INTO table_name (product_name, product_sku, product_quantity, product_price) VALUES (value1, value2, value3, value4); 

如果記錄是唯一MYSQL插入它像往常一樣,如果記錄是重複的,那麼IGNORE關鍵字會丟棄插入而不會產生錯誤。

SQLfiddle

+0

你是否得到我的問題? –

+0

@abuabu你試過我的解決方案嗎? 這將起作用,您還可以檢查我在答案中發佈的SQLFiddle鏈接。 – Criesto

0

最簡單的方法是使你的列是唯一的。在不需要的插入上,你的MySQL驅動應該拋出一個異常,然後你可以處理。

從領域邏輯的角度來看,這是一個不好的做法,因爲異常不應該處理預期的行爲。順便說一下,您的數據庫表可以使用主鍵。所以,爲了有一個更好的解決方案,你的方法可能是: - 定義一個獨特的領域(SKU似乎適合);想用這個作爲主鍵以及 - 的MySQL,使用REPLACE語句:

REPLACE INTO your_tablename 
SET product_name='the name' 
-- and so on for other columns 
WHERE product_sku = 'whatever_sku'; 

REPLACE做的嘗試插入,做代替,如果PK的存在更新作業。