原子地多个命令

时间:2011-02-10 01:59:29

标签: php mysql atomic

我正在使用PHP和MySQL来调用几个命令。有一个组 - 员工交叉引用表,可以在组中添加或删除员工。我正在编写此功能,首先删除所有员工,然后在组中的每个员工中添加回来(如果组已修改)。但我想确保所有命令都通过或者让表回滚。如何确保命令以原子方式发生?

3 个答案:

答案 0 :(得分:3)

除非我弄错,否则你正在寻找交易。

这是一个很好的起点:http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-transactions.html

答案 1 :(得分:1)

假设您的目标表支持事务,那么您需要mysqli事务系列方法。

请参阅:

如果您的表不支持事务,您可能会毫无问题地将表类型更改为“InnoDB”,从而支持事务。首先请与您的数据库管理员联系。

答案 2 :(得分:1)

如果您使用MyIsam引擎而不是InnoDB,那么您就无法利用交易。在这种情况下,您最好的选择是执行所有INSERTS第一次(您的交叉引用表应该有一个双字段唯一约束,因此重复将无声地失败)。然后执行单个DELETE:

DELETE FROM employees_groups 
WHERE group_id = <groupid> 
AND employee_id NOT IN (list of employee ids you just inserted)