中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么把數據庫變更

發布時間:2021-10-22 13:41:53 來源:億速云 閱讀:244 作者:iii 欄目:數據庫

這篇文章主要介紹“怎么把數據庫變更”,在日常操作中,相信很多人在怎么把數據庫變更問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么把數據庫變更”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

經過千難萬險的開發,系統終于上線了,進入了更加驚險刺激的捉蟲階段。在修修補補之中,給后人留下一堆屎山之前,我們需要把數據庫給整利索了。

想想吧,我們在開發環境,修改了多個字段的名稱,經歷了測試環境的洗禮,還搞了個預上線接受變更。結果,僅僅在線上忘了操作其中一條SQL,就前功盡棄。如果你做的是項目類型的工作,客戶半年六個月才升級一次,這些腳本的管理就會亂上加亂。

我們需要把這些數據庫變更,使用git這樣的工具管理起來,在系統啟動的時候,能夠自動變更。通過口口相傳,太不可信了。

誰也不想背這個鍋。翻聊天記錄?有用么?都是事后諸葛亮。

人和動物的區別,就是使用工具。經常被使用的兩個,有Liquibase和Flyway。但是,Liquibase的遷移腳本寫起來太復雜,需要花很多時間維護,遠不如Flyway這樣的開箱即用(犧牲跨平臺)。如果你的項目不是非常復雜,對Liquibase也不熟悉,建議直接選用flyway。

一般,數據庫變更,會有下面幾種語句,我們都可以使用flyway來完成。

  • DDL 建表和索引的時候,用到的語句,比如CREATE、ALTER、DROP等

  • DML 就是一些常見的數據操作語句,比如update、delete、insert

  • DCL 用來設置和管理權限方面信息的語句,比如grant、deny、revoke等

下面,就以flyway為例,來看一下數據庫的版本,是如何變更的。

1. flyway migrate

怎么把數據庫變更

首先,使用mvn的命令,創建一個示范項目。

mvn archetype:generate -B \ -DarchetypeGroupId=org.apache.maven.archetypes \     -DarchetypeArtifactId=maven-archetype-quickstart \     -DarchetypeVersion=1.1 \     -DgroupId=foo \     -DartifactId=bar \     -Dversion=1.0-SNAPSHOT \     -Dpackage=foobar

在pom.xml文件中加入下面的內容:

<build>     <plugins>         <plugin>             <groupId>org.flywaydb</groupId>             <artifactId>flyway-maven-plugin</artifactId>             <version>7.3.1</version>             <configuration>                 <url>jdbc:h3:file:./target/foobar</url>                 <user>sa</user>             </configuration>             <dependencies>                 <dependency>                     <groupId>com.h3database</groupId>                     <artifactId>h3</artifactId>                     <version>1.4.200</version>                 </dependency>             </dependencies>         </plugin>     </plugins> </build>

創建數據庫變更目錄。

mkdir -p src/main/resources/db/migration

創建新的數據庫文件,我們把它叫做第一個版本:src/main/resources/db/migration/V1__Create_person_table.sql

create table PERSON (     ID int not null,     NAME varchar(100) not null );

使用mvn命令,即可完成數據庫更新。不要怕,這個命令是冪等的。

mvn flyway:migrate

終端將輸出下面的內容:

[INFO] Database: jdbc:h3:file:./target/foobar (H2 1.4) [INFO] Successfully validated 1 migration (execution time 00:00.009s) [INFO] Creating Schema History table: "PUBLIC"."flyway_schema_history" [INFO] Current version of schema "PUBLIC": << Empty Schema >> [INFO] Migrating schema "PUBLIC" to version 1 - Create person table [INFO] Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.038s)

下面,我們準備第二個變更,同樣的,我們創建第二版本的文件:src/main/resources/db/migration/V2__Add_people.sql

下面是SQL文件的內容:

insert into PERSON (ID, NAME) values (1, 'Axel'); insert into PERSON (ID, NAME) values (2, 'Mr. Foo'); insert into PERSON (ID, NAME) values (3, 'Ms. Bar');

再次執行mvn flyway:migrate,可以發現第二版本的DML信息,已經被寫入到數據庫。

2. 如何工作?

那flyway是如何做到冪等的呢?我們使用DBeaver來打開這個h3文件。

怎么把數據庫變更

在JDBC連接處,輸入:jdbc:h3:/private/tmp/bar/target/foobar.mv.db;然后選擇H2  Embedded模式。我們發現,數據庫中除了用戶創建的PERSON表,還多了一個叫做flyway_schema_history的表。

讓我們see一see里面的內容。使用mvn flyway:info命令,能看到相同的內容。

怎么把數據庫變更

可以看到,這個冪等操作,其實是由一張自動創建的狀態表,來保證的。里面還躺著一個叫做checksum的字段,李曼存儲的是一個CRC32值,用來判斷你的SQL文件是否經過了非法篡改(篡改后將不予通過)。

捅破了這層窗戶紙,一切神奇的事情忽然就變得豁然開朗。所以如果你想要用flyway,你的賬戶,應該起碼給create  table的權限,否則你就需要手動建這種表。

怎么把數據庫變更

從上面的SQL文件定義,也可以看出來,這些文件,需要遵循一定的規律。大體如上圖所示,包含:

  1. 前綴

  2. 版本號

  3. 分隔符

  4. 版本描述

flyway就是靠這種約定,來進行庫表變更的。所以,要嚴格按照它的要求去命名Sql文件。

3. SpringBoot項目集成

在pom中加入flyway的坐標。可以看到我們是沒有提供版本號的,說明它已經在bom文件中定義過了。而它的autoconfigure,在SpringBoot的autoconfigure包里面默認提供了。

<dependencies>       <dependency>          <groupId>org.flywaydb</groupId>          <artifactId>flyway-core</artifactId>       </dependency>       ... </dependencies>

我們當然要看一下FlywayProperties這個文件所定義的配置項。可以看到它的前綴,就是spring.flyway。

怎么把數據庫變更

默認的DB變更文件,放在classpath:db/migration,我們也可以通過locations配置自定義一個,比如classpath:cn/xjjdog/flyway。當然,也可以通過table屬性,定義那張his表的名稱。url、user、password這些,也可以提供,把his表存儲在和業務表不一樣的地方。如果不提供,將默認使用datasource所定義的庫。

所以,最小配置,就是什么都不做,直接把變更文件,扔在變更目錄下面就可以了。

spring:    datasource:        # jdbc配置... flyway:     enable: true     locations: classpath:cn/xjjdog/flyway

到此,關于“怎么把數據庫變更”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿拉尔市| 连州市| 兴文县| 乃东县| 眉山市| 青川县| 兰考县| 噶尔县| 思南县| 介休市| 耒阳市| 普安县| 郴州市| 忻城县| 德庆县| 凯里市| 平江县| 禹州市| 砀山县| 长汀县| 青铜峡市| 灯塔市| 常熟市| 石林| 连城县| 界首市| 温泉县| 固阳县| 梁山县| 上栗县| 白朗县| 德令哈市| 舞阳县| 城固县| 库尔勒市| 虹口区| 白山市| 利辛县| 梁平县| 平远县| 瑞昌市|