我想知道是否可以一次执行多个 sql 语句。例如我想从多个表中删除行的场景,有没有办法我可以做类似的事情……
<delete id="delete" parameterType="String">
DELETE FROM DUMMYTABLE_A where X=${value}
DELETE FROM DUMMYTABLE_B where X=${value}
</delete>
原文由 Marco 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在 Oracle 中使用 myBatis。我想其他数据库中也有类似的东西。实际上,您总是可以在 DB 中创建过程,这通常对将来更好,当您必须支持该项目时。
<delete id="deleteUnfinishedData" parameterType="map">
{call
declare
begin
delete from TABLE1 where id = #{valueFromMap1};
delete from TABLE2 where id = #{valueFromMap2};
end
}
</delete>
原文由 StrekoZ 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
1 回答2.4k 阅读✓ 已解决
是的,大多数数据库都允许这样做。通常你必须用一些东西来分隔你的 SQL 语句。在 PostGRES 和 MySQL 中,它是一个分号 (;)。在 Microsoft SQL Server 中,您应该使用关键字 GO。 [ 2013 年 5 月更新:从 SQL Server 2012 开始,您可以而且应该使用分号来分隔语句。在 SQL Server 2012(即下一个版本及更高版本)之后,这些将是强制性的。在 SQL2012 及更高版本中,使用 GO 现在已被弃用)。 ]
MySQL / PostGRES 示例:
MS-SQL 示例:
更好的数据库(即不是 MySQL)也将支持 BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN 的事务。使用事务,您实际上可以将所有语句批处理为一个原子操作,如果其中一部分失败,则所有三个都将回滚。有关这些的更多信息,请参见 http://www.sqlteam.com/article/introduction-to-transactions 。
不过,您很可能只需要 SQL 语句之间的分号!