我有两个表,我希望在其中发生以下逻辑:
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 :(得分: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中检查受影响的行数,并查看更新的执行与否。