0

我需要运行一个事务来做“全有或全无”,但我在到达那里时遇到了一些问题。

在下面的示例中,第三个 INSERT 失败,但我插入了前两个。问题是我需要做所有或什么都不做。或全部插入或不插入。

我怎么可能在 MySQL 中做到这一点?我正在使用 InnoDB。

START TRANSACTION;
insert into t_orders (id_order, date_begin, date_end) values ('1', '2012-9-08', '2012-9-16');
insert into t_orders_items (id_order, id_order_item, id_item, item_quantity) values ('1', '1', '2', '1');
insert into t_orders_items (id_order, id_order_item, id_item, item_quantity) values ('1', '1', '3', '1');
COMMIT;

一些线索?

此致,

4

3 回答 3

1

这取决于您的存储类型。对于 InnoDB 表,这将起作用,但 MyISAM 不支持事务并忽略 START TRANSACTION 语句。将表的存储引擎更改为 InnoDB。这是一个(小)慢一点,但更安全。

于 2012-09-07T12:50:31.397 回答
-1

你有关于这两个表的数据结构的任何细节吗?看起来 t_orders_items 中可能有一个主键或唯一键,并且您正在尝试插入导致事务失败的类似值

于 2012-09-07T12:52:47.590 回答
-1

这很简单,在表 t_orders_items:id_order 是一个主键,你已经插入了两次相同的值 '1' ..
祝你好运

于 2012-09-07T12:53:02.350 回答