0

我有两个表,我希望在其中发生以下逻辑:

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
}

我敢肯定这可以用巧妙的方式表达,但我不知道如何!有人可以帮我从我的程序思维方式中翻译出来吗?

问候

4

2 回答 2

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;
}
于 2012-10-17T21:50:03.950 回答
0

经过一番研究,我发现了这篇文章。我稍微修改了迈克的回答,最后得到了这个查询:

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;

如果 id 存在于 table2 中,则插入将在 table1 中执行并从表 2 中删除。否则,将不会执行插入并且删除将找不到任何 id 为 123 的行 - 因此不会被删除。我还使用START TRANSACTION 和 COMMIT来临时禁用 AUTO COMMIT 模式,从而确保要么所有事务都发生,要么不发生(在失败的情况下)。然后,我可以在 Java 中检查受影响的行数,并查看更新是否执行。

于 2012-10-21T13:52:00.863 回答