Express:“如果存在行,则从表1中删除并插入表2.返回成功。”在mySQL中

时间:2012-10-17 21:38:21

标签: 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
}

我确信这可以用聪明的方式表达,但我无法弄清楚如何! 有人可以帮助我从程序化的思维方式中解释这个吗?

问候

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;

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