为什么MyISAM可以解决由InnoDB引起的此问题?

| 我在MySQL应用程序上的Python中遇到一个非常奇怪的错误。以下代码处于被多次调用的循环中。该代码从不引发错误,也从未插入任何数据:
    cursor = db.cursor()
    cursor.execute(\"\"\"
        INSERT INTO test_1 (value) VALUES (10000);
    \"\"\")
另一个奇怪的症状是,稍后使用phpMyAdmin在同一表中插入数据会产生非常大的auto_increment ID,因此即使表中实际上没有数据,auto_increment计数器也会增加(无论如何,根据SELECT * FROM test_1)。使用MySQL Workbench可以很好地进行插入。 最后,我随机发现在表上使用MyISAM引擎而不是InnoDB对其进行了修复。为什么?     
已邀请:
        很可能是因为您从未打电话给
commit
。 MySQLdb(我想这是您正在使用的模块)会自动为您与数据库服务器建立的每个连接启动一个事务。所有插入查询都可以正常工作并增加
auto_increment
计数器的值,但是您永远都看不到
phpMyAdmin
的结果,因为InnoDB将其连接与通过python进行的更改隔离开来。如果您的Python脚本断开连接并且未进行任何“ 1”调用,则该事务将回滚,并且不会保留任何更改(除了递增的“ 2”计数器之外)。看看ѭ6(假设ѭ7是连接对象)是否有帮助。 另请参阅有关使用Python进行数据库访问的PEP 249。     

要回复问题请先登录注册