2017-02-22 119 views
0

我有Liquibase的變更,其中第二語句失敗(嘗試插入與現有的主鍵的記錄)的兩個例子,但第一批成功:Liquibase事務劃分

失敗/沒有記錄在databasechangelog:

--changeset yura:2 
insert into test2 values (4, 'test4'); 
insert into test2 values (2, 'test2'); 

部分寫入,在databasechangelogg沒有記錄:

--changeset yura:2 
insert into test2 values (4, 'test4'); 
ALTER TABLE test2 ADD name varchar(50); 

當我嘗試直接運行MySql上的聲明,該行爲爲c兩者都存在,因爲MySql(InnoDB)會將每個語句包裝在單獨的事務中。 Liquibase爲什麼不一致?

+0

檢查'autocommit'。另外,ALTER會終止任何交易。 –

回答

0

我想我可以在進一步調查後自己回答。 由於多種原因(其中之一是它們非常難以回滾),一些語句將執行並且在其執行之前暗示提交。 您可以檢查它here。 與此同時,Liquibase默認有一個有趣的configuration

runInTransaction如若變更跑出作爲單個事務(如果可能的話)? 默認爲true。

如果你把那兩個事實一起,答案是顯而易見的: 當有cahngeset內的ALTER,它將被隱式地從以前的聲明劃定。禮貌DB本身。 Liquibase不能影響這種低級數據庫功能。但是,當這些語句不需要隱式提交時,Liquibase將能夠將語句組合到一個事務中。