首页 > 数据库 >liquibase脚本自动生成数据库表

liquibase脚本自动生成数据库表

时间:2024-07-10 12:57:43浏览次数:12  
标签:脚本 COMMENT VARCHAR changelog 数据库 liquibase sql 目录

日常开发中,需要进行数据库设计建模,创建对应的表,可通过liquibase脚本自动生成数据库表,减少开发时间。

1.项目中pom文件引入liquibase的maven依赖

<!-- liquibase start -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>
<!-- liquibase end -->

2.resource目录下创建liquibase的changelog目录以及主配置文件

liquibase文件配置

  1. resource目录下创建liquibase目录、二级目录changelog
  2. 添加主配置文件master.xml,指定path为changelog下sql配置文件,如下所示
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">

    <includeAll path="liquibase/changelog/" relativeToChangelogFile="false" />
</databaseChangeLog>
  1. changelog下创建数据库脚本文件xml,如liquibase_demo.xml,命名建议以相关的业务命名,不重复即可。注意,changeSet标签的id值一定不能重复。 另外,建表语句以及字段变更可通过指定标签或sql语句的形式,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
    <changeSet id="20220316170600" author="stiffening">
    	<!-- 指定标签形式创建表 -->
        <createTable tableName="DEPT" remarks="部门表">
            <column name="ID" type="INT" remarks="部门ID">
                <constraints  primaryKey="true"  nullable="false"/>
            </column>
            <column  name="NAME"  type="VARCHAR(50)" remarks="部门名称">
                <constraints  nullable="false"/>
            </column>
            <column  name="ACTIVE"  type="BOOLEAN"  defaultValueBoolean="true" remarks="是否启用" />
        </createTable>
        
		<!-- sql语句形式创建表 -->
        <sql>
            CREATE TABLE IF NOT EXISTS `EMPLOYEE` (
                `ID` VARCHAR(32) NOT NULL COMMENT '员工ID',
                `NAME` VARCHAR(50) NOT NULL COMMENT '员工姓名',
                `AGE` INT COMMENT '年龄',
                `DEPT_ID` VARCHAR(32) NOT NULL COMMENT '所在部门',
                PRIMARY KEY (`ID`)
                ) ENGINE = INNODB  COMMENT = '员工表';
        </sql>
    </changeSet>
    <!-- 指定标签添加字段 -->
    <changeSet id="20220316180000" author="stiffening">
        <addColumn tableName="DEPT">
            <column  name="CODE"  type="VARCHAR(50)" remarks="部门编码">
                <constraints  nullable="true"/>
            </column>
        </addColumn>
    </changeSet>
    <!-- 指定标签删除字段 -->
    <changeSet id="20220316190000" author="stiffening">
        <dropColumn tableName="DEPT" columnName="CODE" />
    </changeSet>
    <!-- sql语句添加、修改、删除字段等 -->
    <changeSet id="20220316191000" author="stiffening">
        <sql>
            ALTER TABLE `DEPT` MODIFY `NAME` VARCHAR(100) COMMENT '部门名称';
            ALTER TABLE `DEPT` ADD COLUMN `CODE` VARCHAR(50) COMMENT '部门编码';
        </sql>
    </changeSet>
</databaseChangeLog>
  1. 引用sql文件目录(liquibase目录下的二级data目录),changelog下脚本文件配置sqlFile标签指定对应的sql文件,data目录下的放的是sql脚本文件,如下所示。
    sql文件方式
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<changeSet id="20220318183000" author="stiffening">-->
	<sqlFile path="liquibase/data/init_member_level.sql" />
</changeSet>
</databaseChangeLog>

4.配置文件yml增加liquibase配置

application.yml增加liquibase相应配置,如下所示。

spring:
  liquibase:
    enabled: true
	change-log: classpath:/liquibase/master.xml

总结:

  1. 通常情况下changelog中建议使用sql语句形式创建表以及新增、修改、删除字段等,使用标签形式复杂,不建议使用,另外data目录配置sql脚本的形式,一般是初始化默认数据的时候使用。
  2. 项目启动后数据库会自动生成changelog相关的两张表,启动建表报错时,可通过查看changelog的表排查问题。
    changelog默认表

标签:脚本,COMMENT,VARCHAR,changelog,数据库,liquibase,sql,目录
From: https://blog.csdn.net/anhuiwangjj/article/details/140320389

相关文章

  • SQLite数据库恢复
    一、使用备份文件恢复直接替换法:如果之前有备份数据库文件,最简单直接的恢复方法就是将备份文件直接替换掉损坏的或丢失的数据库文件。这种方法简单快捷,但需要注意在替换过程中确保没有其他程序正在访问数据库文件,以免造成数据不一致。使用SQLite命令行工具恢复:SQLite提供了命......
  • sqlite数据库解密恢复
    关于SQLite数据库解密恢复的问题,需要明确的是,SQLite本身并不直接支持加密功能。SQLite数据库文件(通常是.db或.sqlite文件)在默认情况下是不加密的,即数据以明文形式存储。因此,当提到“解密恢复”时,可能指的是对通过第三方工具或方法加密过的SQLite数据库进行解密和恢复。一、确定......
  • 数据库修复数据恢复
    数据库修复和数据恢复是数据库管理中非常重要的环节,它们涉及通过技术手段将损坏或丢失的数据库文件恢复到可正常使用的状态。一、数据库修复数据库修复是指通过技术手段将损坏的数据库文件修复至可正常使用的数据库文件的过程。数据库损坏可能由多种原因引起,如服务器宕机、数据......
  • 在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
    在Linux中,将脚本添加为系统服务,使其可以通过service命令进行管理,通常涉及以下步骤:编写启动脚本:创建一个启动脚本,该脚本将被Systemd或其他初始化系统用来启动、停止和重启你的应用程序或服务。例如,创建一个名为your_service的脚本,并赋予执行权限:#!/bin/bash#你的启动停止逻......
  • JDBC学习记录3-数据库连接池
    JDBC学习记录3-数据库连接池以此记录自己的学习过程JDBC全称:JavaDataBaseConnectivityJDBC学习的是使用Java语言来操作关系型数据库的一套API。2024年7月10日11:13:04简单了解JDBC学习记录1-入门-CSDN博客JDBC学习记录2-API详解-CSDN博客四、数据库连接池和Drui......
  • Lbview调用python脚本报错:错误1667...无法导入指定的python模块
    前提注意:NILabVIEW2021(32位)Python3.9.10(32位)32位对应32位,64位同理,否则可能会报错报错的原因:LabVIEW中使用的Python环境与安装的Python包不匹配也就是说Labview中使用的是python版本安装的系统路径,而PyCharm使用的虚拟环境路径,它的包都是下载到项目文件夹内可......
  • 基于JavaWeb的酒店管理系统(源码+数据库+项目展示文档+部署文档)
    酒店管理系统报告系统概述酒店管理系统是为酒店设计开发的管理平台,旨在提供完善的管理功能以支持酒店的日常运营和管理。该系统基于JavaWeb技术栈开发,使用Servlet和JSP作为主要服务端技术,前端设计采用Layui和jQuery框架,通过美观的Windows风格界面提供用户友好的操作体验。系......
  • MyBatisPlus 实现数据库 CURD 操作
    BaseMapper接口方法介绍BaseMapper中提供了CRUD方法,具体方法如下://插入一条记录intinsert(Tentity);//根据entity条件,删除记录intdelete(@Param(Constants.WRAPPER)Wrapper<T>wrapper);//删除(根据ID批量删除)intdeleteBatchIds(@Param(Constants.COLLEC......
  • MySQL导入数据库报错#1118 - Row size too large ( 8126). 的解决方法
    导入SQL文件时报错(在执行创建表或者增加字段时,发现rowsize长度过长,会导致出现以下错误)[ERR]1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOBorusingROW_FORMAT=DYNAMICorROW_FORMAT=COMPRESSEDmayhelp.Incurrentrowformat,BLOBprefix......
  • 20240709(byte数据转换、字典数据选择性保留、选择性查询数据库)
    需要补的知识:​ 1.HTTP协议,url里,那些header、body里都是啥东西报错信息:"服务异常'bytes'objecthasnoattribute'get'"错误原因:​ http传输中,GET方法传入的是byte格式的数据,没有.get方法#假设你有一个包含JSON数据的字节字符串json_bytes=b'{"name":"John",&quo......