sql - 通过 Liquibase 使用外键插入新记录

标签 sql foreign-key-relationship sql-insert liquibase

我正在使用 Liquibase 插入向数据库添加两行并通过外键链接它们,如下所示:

<changeSet id="1.0.1" author="x">      
    <insert tableName="TABLE1">
        <column name="NAME" value="a value"/>
    </insert>
</changeSet>

<changeSet id="1.0.2" author="x">      
    <insert tableName="TABLE2">
        <column name="FK" valueComputed="(SELECT ID FROM TABLE1 WHERE NAME = 'a value')"/>
    </insert>
</changeSet>

除了 TABLE2 中的外键值外,两条记录均已正确插入。该值保持为空。所以似乎“computeValue”属性没有正确执行,但我不明白为什么。我想在 Liquibase 中有一个解决方案,而不是在普通 SQL 中,因为 Liquibase 为我提供了轻松插入 clob 字段的可能性。

表格1:
ID - 5522839049923041049862979858500642751,
NAME - 一个值

表2:
ID - 4246034635279239656888789950125407204,
FK - (空)

这是表结构:
<changeSet id="1.0.0" author="x">        
     <createTable tableName="TABLE1">
        <column name="ID" type="NUMBER (38)">
            <constraints primaryKey="true"/>
        </column>
        <column name="NAME" type="NUMBER (38)">
            <constraints nullable="false"/>
        </column>
    </createTable>
    <addUniqueConstraint columnNames="NAME" 
        constraintName="TABLE1_UK1" 
        tableName="TABLE1"/>

    <createTable tableName="TABLE2">
        <column name="ID" type="NUMBER (38)">
            <constraints primaryKey="true"/>
        </column>
        <column name="FK" type="NUMBER (38)">
            <constraints nullable="true"/>
        </column>
    </createTable>
    <addForeignKeyConstraint baseColumnNames="FK" 
        baseTableName="TABLE2" 
        constraintName="TABLE2_TABLE1_FK1" 
        referencedColumnNames="ID"
        referencedTableName="TABLE1"/>
</changeSet>

请注意,在两个表之一中插入新记录时,触发器用于为名为 ID 的字段生成标识符(主键)。

最佳答案

也许您可以为主键和外键使用预定义的值?

关于sql - 通过 Liquibase 使用外键插入新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32782545/

相关文章:

mysql - 从同一个表中选择两个不同的计数和

php - 在 PHP SQL 查询中使用子字符串和追加

c# - Entity Framework 4,插入外键值而不是 ID

python - SqlAlchemy - 按定义为 ForeignKey 的字段过滤

php - Mysql INSERT SET类型

mysql - 与 MySql 中另一个表中列出的每个不同值进行比较

sql - 如何在 sql server 2016 中更改 JSON 列名

ruby-on-rails - 如何使用外键定义 activerecord 和 activeresource 之间的关系?

python - 通过 Python 使用 BULK INSERT

php - 只需插入 1 次即可在同一列中的 MySQL 数组中插入不同的值