当前位置: 首页 > 知识库问答 >
问题:

添加默认值而不是null约束

欧阳意蕴
2023-03-14

我对Liquibase有点陌生。我遇到了一个场景,在一个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>

这里还有一件奇怪的事情,我可以看到,如果我重新安排添加默认值和NOTNULL约束标记的顺序,我不会得到任何异常,首先添加NOTNULL约束,然后再添加默认值,如下所示。但我不应该这样做,因为它会影响数据库中的校验和。我所能做的就是添加一个新的变更集来解决异常。

<addNotNullConstraint columnName="REHANDLE" defaultNullValue="0" columnDataType="BOOLEAN" tableName="LOCATION"/>

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

共有1个答案

阴高寒
2023-03-14

addNotNullConstraint中的defautlNullValueaddDefaultValue中的defaultValueNumeric之间存在差异。使用addDefaultValue仅为插入到列中的未来行设置默认值,但addNotNullConstraint中的defaultNullValue将导致liquibase生成一个额外的SQL语句update location set rehandle=0,其中rehandle为null,以更改现有行的值这样就可以添加空约束。

我想这两个订单都可以,你看到了什么例外?

 类似资料:
  • 我在MySQL数据库中有一个表,其中包含一个默认值的列,在数据库端使用phpMyAdmin定义。当我使用HiberNate插入新行时,我得到这个错误: 通用域名格式。mysql。jdbc。例外。jdbc4。MySQLIntegrityConstraintViolationException:列“status”不能为null 我还需要做些什么来使用默认值吗? 实体

  • spring-boot-starter-parent 2.4.1 spring-boot-starter-data-jpa postgres 12.5 一个实体的简短摘录: 该实体生成一个表,如下所示: 就是这样: 我们可以看到: null 问题 > 我想防止任何人设置Null,就像在branch1中那样。 如果我这样组织它: @columnDefinition=“varchar(255)defa

  • 我想在我的Flitter应用程序中使用六色代码,使用backgroundColor:Colors#34A123。但我只能拍到颤振默认值

  • 问题内容: 我的代码中有一个,如果地图的方法返回的是空列表而不是空值,则应避免使用空指针。java API中是否有类似的东西?我应该延长吗? 问题答案: @Jon的答案是直接处理您所要询问的好方法。 但是令我惊讶的是,您可能要实现的是“多图”;即从键到值集合的映射。如果是这种情况,那么您还应该查看Guava或Apache commons集合中的multimap类。 看着: 界面和它的实施方式中,或

  • 我创建了一个名为person的表,并使用liquibase变更集添加了一列“phone_number”。但现在我想为它添加一个默认值。但它不起作用,到目前为止,我已经尝试过: 和 和 有人能指出我哪里做错了,并且添加默认值会给以前添加的行增加值吗?

  • MapStruct版本:1.4.1.Final 当我试图将一个整数映射到bean时,当整数为空时,目标仍然被创建为默认对象而不是空 生成的代码 编辑:与https://github.com/mapstruct/mapstruct/issues/1166#issuecomment-353742387