gpt4 book ai didi

Liquibase 添加默认值和非空约束

转载 作者:行者123 更新时间:2023-12-05 01:02:05 24 4
gpt4 key购买 nike

我对 Liquibase 有点陌生。我遇到了一个场景,其中一个 changeSet它试图首先添加一个默认值,而不是在它旁边添加一个空约束。

但这里的问题是 <addDefaultValue/><addNotNullConstraint/>标签有一个默认值属性,所以最终我会遇到一个异常。

以下是changeSet我有,

<changeSet id="f3047816-2d48-4341-a4ce-deface083cea" author="MineStar" failOnError="true">
<preConditions onFailMessage="Ignored AlterColumn for REHANDLE of table LOCATION as column does not exist or already has a NOT NULL constraint." onFail="MARK_RAN">
<columnExists tableName="LOCATION" columnName="REHANDLE"/>
<ext:columnIsNullable tableName="LOCATION" columnName="REHANDLE"/>
</preConditions>
<comment>AHS-1373: AlterColumn LOCATION.REHANDLE - nullability changed from true to false - defaultValue changed from 'null' to '0'</comment>
<addDefaultValue columnName="REHANDLE" columnDataType="BOOLEAN" defaultValueNumeric="0" tableName="LOCATION"/>
<addNotNullConstraint columnName="REHANDLE" defaultNullValue="0" columnDataType="BOOLEAN" tableName="LOCATION"/>
</changeSet>

这里我可以看到的一件更奇怪的事情是,如果我重新排列添加默认值和非空约束标签的顺序,我不会得到任何异常,即首先添加非空约束然后添加默认值,如下所示。但我不应该这样做,因为它会影响数据库中的校验和,我所能做的就是添加一个新的 changeSet来解决异常。
<addNotNullConstraint columnName="REHANDLE" defaultNullValue="0" columnDataType="BOOLEAN" tableName="LOCATION"/>

<addDefaultValue columnName="REHANDLE" columnDataType="BOOLEAN" defaultValueNumeric="0" tableName="LOCATION"/>.

最佳答案

defautlNullValue之间有区别在 addNotNullConstraintdefaultValueNumericaddDefaultValue .使用 addDefaultValue只是为插入列中的 future 行设置默认值,但 defaultNullValueaddNotNullConstraint会导致 liquibase 生成一条额外的 SQL 语句 update location set rehandle=0 where rehandle is null更改现有行的值,以便可以添加空约束。

我认为任何一个订单都可以正常工作,您看到了什么异常(exception)?

关于Liquibase 添加默认值和非空约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27143320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com