【发布时间】:2015-12-23 07:23:07
【问题描述】:
我正在使用 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: 编号 - 5522839049923041049862979858500642751, NAME - 一个值
表 2: 编号 - 4246034635279239656888789950125407204, FK - (null)
这是表结构:
<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 的字段生成标识符(主键)。
【问题讨论】:
-
值得让 Liquibase 使用
updateSql参数显示生成的 SQL。这可能会为您提供有关它正在尝试做什么的线索。
标签: sql foreign-key-relationship sql-insert liquibase