我使用Liquibase insert将两行添加到数据库中,并通过外键链接它们,如下所示:
<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>
除了表2中外键的值外,两条记录都正确插入。此值保持为空。因此,“computeValue”属性似乎没有正确执行,但我不明白为什么。我希望在Liquibase中有一个解决方案,而不是在普通SQL中,因为Liquibase提供了一种可能性,可以方便地插入clob字段。
表1:ID- 5522839049923041049862979858500642751,NAME-a值
表2:ID-424603463527923965688789950125407204,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的字段生成标识符(主键)。
如果使用序列,则可以使用当前值。您可以添加为所需表的最后一个条目创建的id
<changeSet id="1.0.2" author="x">
<insert tableName="TABLE2">
<column name="FK" valueSequenceCurrent="table_1_id_seq"/>
</insert>
</changeSet>
我知道这不是问题的确切答案,但我这样解决了我的问题。
也许您可以使用主键和外键的预定义值?
问题内容: 我有桌子 我还有一张桌子 我要插入两个远程怪物:一个被称为 “弓箭妖精” ,攻击距离为 10 ,另一个被称为 “龙” ,攻击距离为 50 。我怎样才能在一条指令中做到这一点? 到目前为止,我已经尝试过了: 最坏的方法 这很不好,因为name列允许重复,并且检索到的记录可能不止一次。。。也不得不两次写出怪物的名字似乎不是一个好习惯。 插入…返回 如果表仅具有的列(外键),那么我可以使用以
问题内容: 我有两个域,是一对多关系中的一部分。我想知道如何查询孩子的父母FK吗?贝娄是父母/孩子的伪代码 上级: 儿童: 尽管我没有明确创建FK,但是grails会自行创建MySQL数据库。但是,当我想像这样通过FK查询孩子时: 我收到一个错误:找不到类[class mgr.AlumLanguage]的名称[alumProfileId]的属性 关于如何做到这一点的任何建议? 谢谢杰森 问题答
我的观点中有一个功能。py,它将数据插入表1,但表1中的一个字段是另一个表(称为表2)主键的外键。 注:-表2目前为空(无数据)。 现在,我只想检查数据是否正确地插入到表1中,因此,我跳过了Django ORM中的外键,但是我得到了类似“列中的Null值”name“违反了notnull约束”这样的错误 有人能告诉我一个绕过这个(或)任何新方法的方法吗。
问题内容: 我有两个实体: 我正在尝试通过执行以下操作插入文件(以及随后的标签): 然后,我使用以下命令将文件插入DAO: 在我的日志中,我在“文件”表中看到一个插入,在标签表中看到2个插入,但是,指向我的文件表(file_id)的标签表中的外键为NULL。 我可能做错了什么? 问题答案: 您不是将标签的文件设置为文件,而是将标签的文件设置为文件。请记住,在OOP中,与关系模型相反,您必须设置关系
描述:工作台中的autocommit值已设置为0(零),然后我将一条记录插入到表中,并通过jdbc在Java App客户端中成功提交了事务。我在命令行中执行select查询,刚刚插入的记录已成功提取,但在workbech中执行相同的查询脚本,无法提取刚插入的记录。只有在工作台中执行提交命令后,才能查询记录。 如何重复: 在mysql工作台中设置autocommit=0 通过jdbc从javaapp
问题内容: 我有一个列表,例如:thing1,thing2,thing3。我想将它们插入具有相同外键的查找表中。因此理想情况下,它看起来应该像这样: 看来完成此操作的唯一方法是将列表转换为查询,但是我想知道,是否有更简单的方法? 这是我尝试过的: 我听说您无法在cfquery中执行cfloop,但是我什至不确定这是否成立,因为VALUES中没有逗号,并且我不确定如何说“ cfloop中的“当前迭代