MySQL多插入? INSERT失败后的MySQL DB完整性

时间:2010-08-26 14:51:12

标签: php mysql insert myisam database-integrity

是否可以一次在多个表中插入一行?如果你做了几个与ID相关的表;在INSERT失败的情况下,保持完整性的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

这正是transactions的用途。如果任何命令失败,则会回滚START TRANSACTION以来的所有内容:

START TRANSACTION;
INSERT INTO sometable VALUES(NULL,'foo','bar');
INSERT INTO someothertable VALUES (LAST_INSERT_ID(),'baz');
COMMIT;

这是MySQL,你不能使用MyISAM表的事务(你需要表使用一些支持它的引擎,可能是InnoDB)。

这永远不会插入表中(通常你会有一些分支,例如IF):

START TRANSACTION;
INSERT INTO sometable VALUES(NULL,'data','somemoredata');
ROLLBACK;

警告:无法回滚更改数据库结构的SQL命令(例如CREATEALTERDROP)!

答案 1 :(得分:1)

使用交易,卢克。

答案 2 :(得分:0)

MySQL可以insert multiple rows(搜索“多行”),如下所示:

INSERT INTO table (field1, field2, ...) VALUES (value1, value2), (value3, value4), etc...

然而,除了返回记录,重复项和警告计数的查询之外,没有办法告诉插入什么以及不是由于约束违规造成的。您也无法使用last_insert_id()来计算新行的ID,因为它只返回已创建的LAST ID,而不是一组ID。

如果您需要保证完整性,请使用单行插入语句和事务。