我有两个表声明如下:
<changeSet author="istvan" id="country-table-changelog">
<createTable tableName="country">
<column name="id" type="uuid">
<constraints nullable="false" unique="true" />
</column>
<column name="name" type="varchar">
<constraints nullable="false" unique="true" />
</column>
</createTable>
</changeSet>
<changeSet author="istvan" id="region-table-changelog">
<createTable tableName="region">
<column name="id" type="uuid" >
<constraints nullable="false" unique="true" />
</column>
<column name="country_id" type="uuid">
<constraints nullable="false" />
</column>
<column name="name" type="varchar">
<constraints nullable="false" unique="true" />
</column>
</createTable>
</changeSet>
<changeSet author="istvan" id="region-country-foreign-key-constraint">
<addForeignKeyConstraint
baseTableName="region"
baseColumnNames="country_id"
referencedTableName="country"
referencedColumnNames="id"
constraintName="fk_region_country"
onDelete="CASCADE"
onUpdate="RESTRICT"/>
</changeSet>
我想用一些值填充liquibase changelog文件中的两个表:
INSERT INTO country VALUES('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'HUNGARY');
INSERT INTO region VALUES('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'Baranya');
在此示例中,由于简单起见,我使用了aaaa和bbbb。我想通过DBMS生成那些UUID。
最好的方法是什么?我必须在变更日志文件中使用SQL还是可以在XML中使用?我更喜欢DBMS独立解决方案,例如XML或JSON。
我的第二个问题是,如何声明带有UUID的列,该列会在插入时创建UUID。就像是:
<column name="id" type="uuid" value="??? GENERATE UUID ???">
<constraints nullable="false" unique="true" />
</column>
感谢您的时间!
您可以通过使用根据当前DBMS定义的属性来执行此操作。
<property name="uuid_type" value="uuid" dbms="postgresql"/>
<property name="uuid_type" value="uniqueidentifier" dbms="mssql"/>
<property name="uuid_type" value="RAW(16)" dbms="oracle"/>
<property name="uuid_function" value="uid.uuid_generate_v4()" dbms="postgresql"/>
<property name="uuid_function" value="NEWID()" dbms="mssql"/>
<property name="uuid_function" value="sys_guid()" dbms="oracle"/>
然后在定义表时使用这些属性:
<column name="id" type="${uuid_type}" defaultValueComputed="${uuid_function}">
<constraints nullable="false" unique="true" />
</column>
请注意,您需要使用defaultValueComputed
, 而不是 value
如果该列是使用默认值定义的,则将其保留在插入语句中,然后数据库将在插入时生成UUID。
我们使用liquibase来管理MySQL数据库的更新、回滚等。 我遇到的一个小好奇是在更新或回滚过程中将值设置为null的过程。示例: 起初,我有点担心“null”会直接插入字符串“null”,但事实证明,liquibase似乎很聪明,可以插入一个空值。
Tarantool现在有一个内置类型UUID。 如何插入一条记录并使用https://github.com/tarantool/go-tarantool?传递这个字段 现在我有这个: 尝试将UUID作为字符串插入时 指数:
如果我的ID是连续的,我如何使用Liquibase为PostgreSQL进行插入。我尝试以下几点: 我试着 错误是: 错误:列“id”中的空值违反了非空约束
问题内容: 我有一个表字段类型varchar(36),我想由mysql动态生成它,所以我使用了以下代码: 插入记录后如何立即检索生成的uuid? 问题答案: 更好 你不能。唯一的解决方案是执行2个独立的查询: 其中$ uuid是第一步中获取的值。
我对Maven和LiquiBase是新手。在过去的几天里,我一直在玩没有Maven的liquibase。我尝试用一个新数据库和一个现有数据库生成changelog文件。现在我正在尝试使用插件实现Maven和Liquibase。 > 从命令提示符运行带有Maven的Liquibase比仅仅从命令提示符运行Liquibase有什么好处? 生成pom.xml文件并为当前项目准备好src文件夹之后。我在p
我正在尝试在Spring Boot中开发应用程序。我想使用Liquibase从文件加载数据,并将其传递给两个通过多对多关系连接的表(因此将是3个表,其中一个将保存id到另两个)。用LiquiBase做是不是一个好方法? 我试图使用customChange和开发自己的类,它将从文件中读取数据,并通过Hibernate EntityManager将其传递到数据库,但它不起作用。我无法创建EntityM