2012-12-16 310 views
0

可能重複:
how to use if not exists while inserting a row mysqlMySQL中,插入行,如果不存在

我有問題:

我有一個名爲 「表」 與4列的表:ID(INT ,PK,AI,唯一),col1(varchar),col2(varchar),col3(datetime)

許多用戶可以連接到mysql服務器a nd將行插入「表」中。問題是col2和col3不能存在於「表」的其他行中。我想這樣寫: IF NOT EXISTS(select * from table where col2 ='2'and col3 ='2012-12-12 12:12:12')INSERT INTO table(col1,col2, col3)values(1,2,'2012-12-12 12:12:12')

我假設你知道我在做什麼。

我試圖在一個語句中做到這一點(以避免2個用戶同時插入同一行的情況)或交易中。如果我應該在交易中做到這一點,那麼它應該是什麼類型的隔離?可序列化的隔離會導致鎖表,因此它可能會減慢插入過程的速度。 請幫助我。

+0

但它不是我說的。 –

+1

http://stackoverflow.com/questions/1492761/performing-an-update-or-insert-depending-whether-a-row-exists-or-not-in-mysql還有其他幾個。我們最常發生的問題之一。如果不一樣,請說清楚。 – dkretz

+0

col2和col3不能是唯一的。 col2或col3可以被複制。如果相同的2列存在於一行中,我不能複製col2和(!!!)col3! –

回答

2

如果你不想爲這對COL2和COL3的副本(即第2欄可以有重複,但任何一對COL2和COL3僅出現一次),你可以指定此:

UNIQUE(col2,col3) 

的任何查詢現在試圖插入col2,col3對將失敗。你可以處理這個或者使用:

INSERT IGNORE INTO table(col1, col2, col3) values(1,2,'2012-12-12 12:12:12'); 

,或者插入應該改變的值,可以使用:

INSERT INTO table(col1, col2, col3) values(1,2,'2012-12-12 12:12:12') 
     ON DUPLICATE KEY UPDATE someCol=someVal 
+0

這正是我所期待的。 –

+0

@PawełAdamczyk很高興我能幫忙:) – Jim