Running the following changeset using liquibase-3.2.2 (on mySql 5.6):
< createTable tableName = “myTable” >
< column name = “myId1” type = “BIGINT(20) UNSIGNED” >
< constraints nullable = “false” />
</ column >
< column name = “myId2” type = “BIGINT(20) UNSIGNED” >
< constraints nullable = “false” />
</ column >
< column name = “order” autoIncrement = “true” type = “BIGINT(20) UNSIGNED” >
< constraints nullable = “false” />
</ column >
</ createTable>
< addPrimaryKey columnNames = “myId1, myId2” constraintName = “PRIMARY” tableName = “myTable” />
< createIndex indexName = “order_sort_idx” tableName = “myTable” unique = “false” >
< column name = “order” />
</ createIndex >
will throw the following error during execution: Incorrect table definition; there can be only one auto column and it must be defined as a key
The reason is that liquibase runs each of the elements one at a time. if the <createIndex > would have run with the change, the error wouldn't have been thrown.
As a workaround, I create the table using changeset:
< sql >
CREATE TABLE myTable
(
myId1
bigint(20) unsigned NOT NULL,
myId2
bigint(20) unsigned NOT NULL,
order
bigint(20) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (myId1
,myId2
),
KEY order_sort_idx
(order
ASC)
);
</ sql >
(also, FYI, I couldn’t find a way to open a JIRA ticket in https://liquibase.jira.com/ - it didn’t allow me to create a user using any of my email addresses saying my domain is not allowed)