2012-10-17 49 views
0

我有兩個表,其中我想會發生以下邏輯:表示:「如果行存在,請從表1中刪除並插入到表2中。返回成功。」在MySQL的

if (any row with a specific id exist in table1) 
{ 
    1. Delete the row from table1 
    2. insert some data into the table2 with the id as one of the values 
    3. return success somehow (for me to verify in java) 
} 
else 
{ 
    return fail 
} 

我敢肯定,這可以用巧妙的方式來表達,但我無法弄清楚如何! 有人可以幫我翻譯這個從我的程序思維方式嗎?

問候

回答

0

經過一番研究,我發現this post。我稍微修改邁克的答案,並結束了與此查詢:

START TRANSACTION; 
INSERT INTO table1(col1, col2, col3, id) 
SELECT * FROM (SELECT 'value1', 'value2,'valu3', 'id') AS tmp 
WHERE EXISTS (
    SELECT id FROM table2 WHERE id='123' 
    ) LIMIT 1; 
DELETE FROM table2 WHERE id='123'; 
COMMIT; 

如果在表2中存在的id,然後在插入會table1中進行,從表2人刪除,插入將不會執行和刪除將不會找到id爲123的任何行 - 因此它不會被刪除。我還使用START TRANSACTION and COMMIT臨時禁用AUTO COMMIT模式,從而確保發生所有事務,或者不發生(如果發生故障)。然後,我可以在Java中檢查受影響的行數以及是否執行更新。

0

根據不同的語言你使用(Java):

PreparedStatement stmt = conn.prepareStatement("select * from table1 where id = ?"); 
stmt.setInt(1, id); 
ResultSet rs = stmt.executeQuery(); 
if (rs.first()) { 
    // same for insert and delete 
    insert into table2 (id, col2, col3) values(?, ?, ?); 
    delete from table1 where id = ?; 
    return true; 
} else { 
    return false; 
} 
+0

感謝您的回答,但是 - 它有一些缺點:1.如果table1中的行不存在,則會插入'null',這是不可取的。相反,查詢必須被終止,並且必須報告失敗(類似假,或者0),這給我帶來了下一個缺點; 2.沒有迴應,因此無法確定查詢是否成功。 – Andak

相關問題