2010-11-23 52 views
3

我想创建一个程序,使用sql命令更新2个不同的表。我唯一担心的是,如果程序更新了其中一个表,然后丢失了连接或其他内容,并且不更新其他表,那么可能会有问题。有没有一种方法,我既可以SQL多命令原子性问题

A.更新他们的确切同时

B.还原第一次更新,如果第二个失败。

+1

我认为你正在寻找“交易”的信息。查找有关在特定数据库中使用事务的信息(您未在标签中指定) – Kendrick 2010-11-23 16:42:28

回答

1

大多数SQL服务器支持事务,即排队一系列操作,然后让它们自动发生。要做到这一点,你换你的查询,例如:

START TRANSACTION; 
*do stuff* 
COMMIT; 

您可以咨询您的服务器的文档以获取更多信息什么额外的功能支持。例如,MySQL中的事务的here is a more detailed discussion

2

根据数据库,我建议使用存储过程或函数根据所涉及的操作。他们支持:

  • MySQL的
  • 甲骨文
  • SQL服务器
  • PostgreSQL的

这些在本质上封装了一个数据库事务(原子 - 它要么发生,或者它不完全不需要额外的重量来将查询发送到数据库......因为它们已经存在于数据库中,所以查询被参数化(从SQL注入攻击中安全),这意味着更少的数据被发送 - 只要参数值。