2013-04-02 58 views
4

我有一個表或多或少看起來像防止MySQL的雙重插入

Name | Lastname | ID | Date 

有沒有一種方法,以防止數據庫運行插入功能,如果它這樣NameLastnameID已經存在,但不運行的人額外的查詢搜索他?

回答

13

添加UNIQUE約束的列,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (ID, LastName) 

一旦被執行,如果你嘗試插入其ID和姓氏已經存在的值,它會拋出異常。示例

INSERT INTO tableName (ID, LASTNAME) VALUES (1, 'hello') // ok 
INSERT INTO tableName (ID, LASTNAME) VALUES (2, 'hello') // ok 
INSERT INTO tableName (ID, LASTNAME) VALUES (1, 'hello') // failed 
+0

似乎正是我所需要的!謝謝! – user2228063

+2

如果您希望查詢正常失敗,您還可以添加另一個子句「ON DUPLICATE KEY UPDATE ID = ID;」最後。 – Purpletoucan

+0

我會傾向於讓它失敗,以至於你可以在應用程序內部處理它,但是這一切都取決於用戶的意圖 –