3

我有一个多行 INSERT 语句(大约 300 组值),我想以一种全有或全无的方式提交给 MySQL 数据库。

insert into table VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9);

在某些情况下,命令中的一组值将不符合表的条件(例如,重复键)。发生这种情况时,我不希望将任何以前的集合添加到数据库中。我已经使用以下代码实现了这一点,但是,我的回滚命令似乎没有什么不同。我使用过这个文档:http ://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqltransaction.html

Dim transaction As MySqlTransaction = sqlConnection.BeginTransaction()
sqlCommand = New MySqlCommand(insertStr, sqlConnection, transaction)
Try
    sqlCommand.ExecuteNonQuery()
Catch ex As Exception
    writeToLog("EXCEPTION: " & ex.Message & vbNewLine)
    writeToLog("Could not execute " & sqlCmd & vbNewLine)
    Try
        transaction.Rollback()
        writeToLog("All statements were rolled back." & vbNewLine)
        Return False
    Catch rollbackEx As Exception
        writeToLog("EXCEPTION: " & rollbackEx.Message & vbNewLine)
        writeToLog("All statements were not rolled back." & vbNewLine)
        Return False
    End Try
End Try
transaction.commit()

我抛出了 DUPLICATE KEY 异常,没有抛出回滚异常,并且每组值都被提交到数据库中的重复键。我究竟做错了什么?

4

1 回答 1

3

您是否使用 MyISAM 表(默认)?MyISAM 不支持事务。如果您需要事务,请使用InnoDB表。

于 2010-04-20T01:10:57.307 回答