Database MariaDB事务只提交最后一次插入

Database MariaDB事务只提交最后一次插入,database,transactions,doctrine,mariadb,Database,Transactions,Doctrine,Mariadb,我使用的是MariaDB 10.4.8,事务有问题。 问题是: START TRANSACTION; INSERT INTO zone (code) VALUES ('test1'); INSERT INTO zone (code) VALUES ('test2'); COMMIT; 例如,如果我执行这样的事务,则只会插入test2记录。 到底发生了什么,也许我需要配置一些东西。由于DB的行为如此,我无法正确使用Doctrine的persist()/flush()功能。如果以use stat

我使用的是MariaDB 10.4.8,事务有问题。 问题是:

START TRANSACTION;
INSERT INTO zone (code) VALUES ('test1');
INSERT INTO zone (code) VALUES ('test2');
COMMIT;
例如,如果我执行这样的事务,则只会插入test2记录。
到底发生了什么,也许我需要配置一些东西。由于DB的行为如此,我无法正确使用Doctrine的
persist()/flush()
功能。

如果以
use stat tables
启动的MariaDB 10.x服务器缺少一些(或全部)统计表
mysql.table_stats
mysql.index_stats
,则会出现上述问题,
mysql.column\u stats

缺少表的最可能原因是该实例是从MariaDB 5.5升级的,或者是从MySQL或Percona服务器交叉升级的,并且
MySQL\u升级未运行或未成功。您甚至可能不知道该实例以前有一台旧服务器,特别是如果它是作为另一个产品的一部分安装的

另一种可能性是,某些第三方产品安装了预先创建的数据库,而该数据库是使用不知道统计表的服务器版本预先创建的

在这两种情况下,在这样的数据库上启动的服务器在启动时可能会在错误日志中抱怨mysql.event表的结构错误以及其他一些缺少的表。但是,在安装软件包时,默认情况下,错误日志通常写入
/var/log/messages
/var/log/syslog
,因此经常会遗漏非致命错误

所有10.x版本都有这个问题,但10.4受到的影响最大,因为它有
use\u stat\u tables=最好是
defaullt

该漏洞在内部被跟踪


同时,解决方案是运行
mysql\u升级
(必要时使用
--force

MariaDB有两个bug报告,可能与您的问题有关。到目前为止,这两种方法都还没有在内部复制,因此如果您可以在其中添加任何您拥有的信息,特别是完整的测试用例(包括表创建)、配置文件和环境信息,这将非常有用。-症状与您的非常相似,但它也使用了您未提及的
锁表,可能是系统特定的。-还没有任何信息。我无法重现这个问题,你是对的。问题是我使用的条令创建的错误表格。我在条令配置中指定了MariaDB版本,但显然,它被错误地对待。我从配置中删除了MariaDB版本,因为它是可选的,运行了
mysql\u升级
,从那时起一切都很酷,创建新表时没有这些问题。谢谢您的详细解释,希望对其他人也有用:)