INSERTS上的MySQL事务行为

时间:2012-09-07 12:47:41

标签: mysql transactions

我需要运行一个事务来做“全部或全部”,但我遇到了一些问题。

在下面的示例中,第3个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;

一些线索?

最诚挚的问候,

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-1)

您是否有关于这两个表的数据结构的详细信息? 看起来t_orders_items中可能存在主键或唯一,并且您试图插入导致事务失败的类似值

答案 2 :(得分:-1)

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