Mysql Liquibase上下文中的感叹号

Mysql Liquibase上下文中的感叹号,mysql,liquibase,myisam,Mysql,Liquibase,Myisam,我正在努力实现以下目标: 我们有一个mysql数据库,不希望在数据库级别使用外键,出于性能原因,我们在大多数表中使用MyISAM引擎 我们希望能够使用外键创建数据库的“骨架”,以便能够通过反向工程数据库生成推进或jooq文件 我试图使用context=“fk”来表示我只需要第二点的内容。以下是我的changelog.xml: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <databaseChangeLog

我正在努力实现以下目标:

  • 我们有一个mysql数据库,不希望在数据库级别使用外键,出于性能原因,我们在大多数表中使用MyISAM引擎

  • 我们希望能够使用外键创建数据库的“骨架”,以便能够通过反向工程数据库生成推进或jooq文件

  • 我试图使用context=“fk”来表示我只需要第二点的内容。以下是我的changelog.xml:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
        <changeSet author="gavriel" id="1398956739320-1">
            <createTable tableName="A">
                <column autoIncrement="true" name="Id" type="INT(10)">
                    <constraints primaryKey="true"/>
                </column>
            </createTable>
        <modifySql dbms="mysql">
            <append value=" Engine MyISAM"/>
        </modifySql>
        </changeSet>
        <changeSet author="gavriel" id="1398956739320-4">
            <createTable tableName="B">
                <column autoIncrement="true" name="Id" type="INT(10)">
                    <constraints primaryKey="true"/>
                </column>
                <column name="AId" type="INT(10)">
                    <constraints nullable="false"/>
                </column>
            </createTable>
        <modifySql dbms="mysql" context="!fk">
            <append value=" Engine MyISAM"/>
        </modifySql>
        <modifySql dbms="mysql" context="fk">
            <append value=" Engine InnoDB"/>
        </modifySql>
        </changeSet>
    </databaseChangeLog>
    
    然后我看到(正如预期的)表B中有“Engine InnoDB”:

    CREATE TABLE innovid_studio_jooq.B (Id INT(10) AUTO_INCREMENT NOT NULL, AId INT(10) NOT NULL, CONSTRAINT PK_B PRIMARY KEY (Id)) Engine InnoDB;
    
    但是,当我在没有上下文或任何随机(不存在)上下文的情况下运行liquibase时,sql中既没有“Engine MyISAM”也没有“Engine InnoDB”:

    CREATE TABLE innovid_studio_jooq.B (Id INT(10) AUTO_INCREMENT NOT NULL, AId INT(10) NOT NULL, CONSTRAINT PK_B PRIMARY KEY (Id));
    

    为什么??“Engine MyISAM”不应该被追加,因为它的上下文是“!fk”

    据我所知,上下文的逻辑运算符(即context=“!fk”)仅在3.2测试版(您必须从源代码构建)中可用。文档比代码稍微超前了一点

    啊,我明白了。而且,即使“不指定上下文也会运行所有上下文”似乎也是一个新特性……我敢说,您还没有看到公告,Liquibase 3.2已经发布了。
    CREATE TABLE innovid_studio_jooq.B (Id INT(10) AUTO_INCREMENT NOT NULL, AId INT(10) NOT NULL, CONSTRAINT PK_B PRIMARY KEY (Id));