Gymterview
junior

Какие основные типы изменений (change types) существуют в Liquibase?

Change types — это встроенные операции Liquibase, которые абстрагируют SQL-команды и позволяют описывать изменения схемы декларативно.

Работа с таблицами

Change Type Описание
createTable Создание таблицы
dropTable Удаление таблицы
renameTable Переименование таблицы
addColumn Добавление столбца
dropColumn Удаление столбца
renameColumn Переименование столбца
modifyDataType Изменение типа данных столбца
addNotNullConstraint Добавление ограничения NOT NULL
dropNotNullConstraint Удаление ограничения NOT NULL
addDefaultValue Установка значения по умолчанию

Ключи и ограничения

Change Type Описание
addPrimaryKey Добавление первичного ключа
dropPrimaryKey Удаление первичного ключа
addForeignKeyConstraint Добавление внешнего ключа
dropForeignKeyConstraint Удаление внешнего ключа
addUniqueConstraint Добавление уникального ограничения
dropUniqueConstraint Удаление уникального ограничения

Индексы

Change Type Описание
createIndex Создание индекса
dropIndex Удаление индекса

Представления и последовательности

Change Type Описание
createView Создание представления (VIEW)
dropView Удаление представления
createSequence Создание последовательности
dropSequence Удаление последовательности
alterSequence Изменение последовательности

SQL напрямую

Change Type Описание
sql Выполнение произвольного SQL
sqlFile Выполнение SQL из файла
Пример использования нескольких change types
<changeSet id="3" author="kozlov">
    <addColumn tableName="users">
        <column name="email" type="VARCHAR(320)">
            <constraints nullable="false"/>
        </column>
    </addColumn>
</changeSet>

<changeSet id="4" author="kozlov">
    <createIndex indexName="idx_users_email" tableName="users">
        <column name="email"/>
    </createIndex>
</changeSet>

<changeSet id="5" author="kozlov">
    <addForeignKeyConstraint
        constraintName="fk_orders_user"
        baseTableName="orders"
        baseColumnNames="user_id"
        referencedTableName="users"
        referencedColumnNames="id"
        onDelete="CASCADE"
        onUpdate="NO ACTION"/>
</changeSet>

На собеседовании: не нужно заучивать все типы. Достаточно знать основные категории (таблицы, столбцы, ключи, индексы, SQL) и понимать, что change types обеспечивают кроссплатформенность — один и тот же XML работает для PostgreSQL и Oracle.