I want to create a liquibase script. When I do an insert in my next script, I want to automatically generate the id via UUID. I tried what I found there: EDIT: I used an answer:
<property name="u_id" value="uuid()" dbms="mysql"/> <changeSet id="1" author="xyz"> <createTable tableName="persons"> <column name="id" type="varchar(36)" defaultValueComputed="${u_id}"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="surname" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="email" type="varchar(50)"> <constraints nullable="false" unique="true"/> </column> </createTable> </changeSet> </databaseChangeLog>
The first script works fine and the table is created, but when I add the second script:
<changeSet id="2" author="xyz"> <insert tableName="persons"> <column name="name" value="name value"/> <column name="surname" value="surname value"/> <column name="email" value="email value"/> </insert> </changeSet>
Now the error is:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for change set db/version/V1__create_persons_table.xml::1::xyz: Reason: liquibase.exception.DatabaseException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'uuid() NOT NULL, name VARCHAR(50) NOT NULL, surname VARCHAR(50) NOT NULL' at line 1 [Failed SQL: (1064) CREATE TABLE ticketapidatabase.persons (id VARCHAR(36) DEFAULT uuid() NOT NULL, name VARCHAR(50) NOT NULL, surname VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL, CONSTRAINT PK_PERSONS PRIMARY KEY (id), UNIQUE (email))]
Your
id
column definition should look like this: