1

是否可以一次将一行插入到多个表中?如果你做几个由一个ID相关的表;如果 INSERT 失败,确保保持完整性的最佳方法是什么?

4

3 回答 3

4

这正是交易的用途。如果任何命令失败,则整个事情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 命令(例如CREATE, ALTERDROP不能回滚!

于 2010-08-26T14:55:26.960 回答
1

使用交易,卢克。

于 2010-08-26T14:54:10.207 回答
0

MySQL 可以像这样插入多行(搜索“多行”):

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

但是,除了返回记录数、重复数和警告数的查询之外,没有办法分辨出什么被插入,什么不是由于违反约束而导致的。您也不能用它last_insert_id()来计算新行的 ID,因为它只返回创建的 LAST id,而不是一组 id。

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

于 2010-08-26T14:55:50.787 回答