如果mysql配置不是auto commit,那么事务是在哪一步提交呢?

















在 2022-02-16 10:24:39,"Michael Ran" <greemqq...@163.com> 写道:
>jdbc 连接 mysql 的driver  记得默认就是AutoCommit。phoenix不太清楚
>在 2022-02-15 13:25:07,"casel.chen" <casel_c...@126.com> 写道:
>>最近在扩展flink sql jdbc 
>>connector以支持phoenix数据库,测试debug的时候发现数据能够通过PhoenixStatement.executeBatch()写入,但因为没有提交事务,所以其他人看不到。
>>源码中PhoenixPreparedStatement.execute()方法会调用executeMutation(statement)方法,继而判断connection.getAutoCommit()与否来执行connection.commit()方法。完了回到PhoenixStatement.executeBatch()执行flushIfNecessary()方法,里面根据connection.getAutoFlush()与否来执行connection.flush()操作。
>>一开始我没有在phoenix jdbc 
>>url上添加;autocommit=true参数,发现变化的数据并没有commit到数据库。后来添加了;autocommit=true参数后执行了connection.commit()方法才将数据提交成功。
>>
>>
>>有几个疑问:
>>1. 换成sink进mysql数据库就没有这个问题,难道不同数据库的jdbc sink行为会不一样么?
>>2. connection autoflush参数在哪里设置?跟autocommit区别是什么?
>>3. 
>>buffer条数满了或interval周期达到又或者checkpoint时就会执行flush操作,里面执行的是JdbcBatchingOutputFormat.flush方法,这里我也没有找到connection.commit()操作,数据是如何提交到数据库的呢?不开启事务情况下,执行完statement.executeBatch()就会提交么?

回复