在Liquibase中自动生成UUID-Mysql MariaDB
作者:互联网
我试图创建一个表,该表的主键应该是在迭代时自动生成的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());
标签:liquibase,uuid,mariadb,mysql 来源: https://codeday.me/bug/20191111/2019332.html