gpt4 book ai didi

mysql - 在 Liquibase 中自动生成 UUID - Mysql MariaDB

转载 作者:可可西里 更新时间:2023-11-01 08:09:42 24 4
gpt4 key购买 nike

我试图创建一个表,其主键应该是在插入时自动生成的 UUID。

mysql --version
mysql Ver 15.1 Distrib 10.1.22-MariaDB, for osx10.11 (x86_64) using readline 5.1

这是我试过的变更集:

   <changeSet author="shalinlk" id="201705161522">
<createTable tableName="quiz_question">
<column valueComputed="UUID()" name="id" type="CHAR(36)">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="quiz_id" type="CHAR(36)">
<constraints nullable="true" foreignKeyName="fk_quiz_question_quiz_id"
references="quiz(id)"/>
</column>
<column name="question_id" type="CHAR(36)">
<constraints nullable="true" foreignKeyName="fk_quiz_question_question_id"
references="question(id)"/>
</column>
</createTable>
</changeSet>

但这甚至没有处理生成的相应查询中的 valueComputed 属性。谁能帮忙。

注意:查询

select UUID();

当我在 mysql 终端中尝试时工作正常。

编辑:生成的查询是

CREATE TABLE quiz_question (
id CHAR(36),
quiz_id CHAR(36) NULL,
question_id CHAR(36) NULL,
CONSTRAINT PK_QUIZ_QUESTION PRIMARY KEY (id),
CONSTRAINT fk_quiz_question_question_id FOREIGN KEY (question_id)
REFERENCES question(id),
CONSTRAINT fk_quiz_question_quiz_id FOREIGN KEY (quiz_id) REFERENCES quiz(id))

我删除了不相关的字段。

编辑:如果有人可以指出一些引用/示例,将会有所帮助。

最佳答案

据我所知,valueComputed 用于表达式,例如插入或更新。很难确定,因为 LiquiBase 文档对此属性非常模糊。

您似乎在使用它,就好像它是新表定义中列的默认值一样。为此,我假设该属性是 defaultValueComputed

但是 MySQL 不支持列默认值的表达式。你不能在 MySQL 中创建这样的表:

CREATE TABLE quiz_question (
id CHAR(36) DEFAULT UUID(),
...

您必须创建一个触发器来将 UUID() 分配给主键列。类似于以下内容:

CREATE TRIGGER quiz_question_ins BEFORE INSERT ON quiz_question
FOR EACH ROW SET id = COALESCE(id, UUID());

关于mysql - 在 Liquibase 中自动生成 UUID - Mysql MariaDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025248/

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