More  

小編的世界 優質文選 資料

MySQL數據庫的修改:ALTER「DATABASE|SCHEMA」


2021年9月15日 - 資料小編 都市裏穿梭的風 
   

都市裏穿梭的風

小貼紙“文章閱讀與部分提示信息說明”文章中,使用白底黑字部分為敘述、說明。黑底顯示部分,為系統命令行下的代碼信息顯示區域;其中白色文字為輸入的SQL語句或系統輸出的信息,為了特別著重說明這些信息,也會用藍色、加粗等方式 突出顯示效果;其中紅色文字為注釋說明,也會用到加粗方式 突出顯示效果 。

MySQL數據系統與其它關系數據庫一樣,在需要使用該數據庫之前,必須先創建數據庫。但創建數據庫後萬一創建的數據庫有問題,只能刪除數據庫後重新創建嗎?當然不是!現在的MySQL數據庫系統已經非常完善,有相應的數據庫修改語句可以使用。

之前已經提出過一個概念,就是任何程序都是四種語句狀態:新增、查找、修改、刪除。修改數據庫當然屬於第三種語句狀態(有些書籍、資料中也有稱為“編輯”或“再編輯”的)。讓我們先用 HELP ‘CREATE DATABASE’; 命令查看一下該語句的結構。

mysql> HELP ‘ALTER DATABASE’; #使用HELP幫助功能調閱命令信息Name: ‘ALTER DATABASE’Description:Syntax: #藍色文字為該語句的語法格式ALTER {DATABASE | SCHEMA} alter_option …alter_option: { CHARACTER SET <=> charset_name| COLLATE <=> collation_name| ENCRYPTION <=> {‘Y’ | ‘N’}| READ ONLY <=> {DEFAULT | 0 | 1} #發現有不同的選項}…. #使用命令行方式,查找該語法格式,之後還有很多。這裏不再截取顯示。

如果閱讀過我之前寫的“MySQL創建數據庫CREATE{DATABASE|SCHEMA}”這篇文章,因該對以上語句格式感到非常熟悉了。因為除了第一個關鍵字 ALTER 不同以外,其他幾乎都一樣。唯一不同的是多了一個 | READ ONLY <=> {DEFAULT | 0 | 1 選項。

| READ ONLY <=> {DEFAULT | 0 | 1 初步理解是讀取限制(開關)。以下是官方資料:Read Only OptionThe READ ONLY option, introduced in MySQL 8.0.22, controls whether to permit modification of the database and objects within it. The permitted values are DEFAULT or 0 (not read only) and 1 (read only). This option is useful for database migration because a database for which READ ONLY is enabled can be migrated to another MySQL instance without concern that the database might be changed during the operation.以下是水平極其一般我的翻譯:MySQL 8.0.22 中引入的 READ ONLY 選項控制是否允許修改數據庫和其中的對象。
允許的值為 DEFAULT 或 0(非只讀)和 1(只讀)。
此選項對於數據庫遷移很有用,因為啟用了 READ ONLY 的數據庫可以遷移到另一個 MySQL 實例,而無需擔心數據庫在操作期間可能會更改。

小貼紙本人的英語水平非常有限,一定有不准確的地方,請大家見諒!

從以上幫助信息,可以看出。
MySQL 8.0.22 中才被啟用該功能。換句話花說,如果您現在使用 MySQL 5版本學習,就沒有這個選項。該功能是一個開關。開啟後,數據庫就處於只讀狀態。在數據庫遷移的時候,起到很好的作用。其實這個作用我們可以展開應用,比如,您之後開發的由MySQL數據庫驅動的網站,或者信息檢索項目,只是管理員發布信息,而又不需要交互,就可以開啟這樣的選項。因為這樣可以避免很多網絡上的攻擊 和篡改數據。

好了,讓我們來實際操作以下這個命令語句吧。GO!

mysql> SHOW DATABASES;+——————–+| Database |+——————–+| db_test1 || db_test2 || db_test3 || db_test4 || db_test5 || db_test6 || db_test7 || information_schema || mysql || performance_schema || sys || 測試用中文數據庫 |+——————–+12 rows in set (0.22 sec)mysql> SHOW CREATE DATABASE db_test1;+———-+————————————————————————————————————————————+| Database | Create Database |+———-+————————————————————————————————————————————+| db_test1 | CREATE DATABASE db_test1 /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION=’N’ */ |+———-+————————————————————————————————————————————+1 row in set (0.06 sec)

如果閱讀過我之前寫的“MySQL創建數據庫CREATE {DATABASE|SCHEMA} ”這篇文章, 對上面的語句,包括 SHOW DATABASES; SHOW CREATE DATABASE db_test1; 語句因該非常熟悉了。這裏也就不再多加注釋信息了。請注意: /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION=’N’ */ 藍色文字部分,是修改數據庫的主要針對部分。

mysql> ALTER DATABASE db_test1 CHARACTER SET utf8; #輸入語句 ,修改數據庫中的字符集。Query OK, 1 row affected, 1 warning (0.28 sec)mysql> SHOW CREATE DATABASE db_test1;+———-+——————————————————————————————————+| Database | Create Database |+———-+——————————————————————————————————+| db_test1 | CREATE DATABASE db_test1 /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION=’N’ */ |+———-+——————————————————————————————————+ #查下修改字符集結果1 row in set (0.00 sec)

以上操作,我們只修改了數據庫 字符集 信息。這是因為, 字符集 和 排序規則 是有隸屬關系的。
排序規則 一定屬於一個特定 字符集 ,這樣系統可以自己查找到並且自動添加。反之, 字符集 下會有很多 排序規則 ,如果用戶未指定,系統不知道為您指定那個具體的 排序規則 ,所以無法添加。

小貼紙 “字符集 和 排序規則 ”有關這個問題,筆者真的翻閱過大量資料,最後看到吐。我最後的理解是,計算機上需要處理很多文字(漢語、英語、日語、德語、西班牙語……)等等語言。需要處理這樣多不同國家的文字需要有標准。
字符集 就是標准, 字符集 名稱 就是語言的名字。比如漢語,就是字符集的名字。排序規則 可以理解為方言。雖然說的都是中文,遼寧方言,是無法與廣東方言交流的。何況還有方言大省福建(據說在福建,過一個山口,當地人就聽不懂山對面人的話了)。排序規則 有些書籍 資料上也有稱為 校驗方式 校驗規則等等的。

mysql> SHOW CREATE DATABASE db_test2; #輸入語句,查看數據庫字符集信息。+———-+————————————————————————————————————————————+| Database | Create Database |+———-+————————————————————————————————————————————+| db_test2 | CREATE DATABASE db_test2 /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION=’N’ */ |+———-+————————————————————————————————————————————+ #藍色文字為現數據庫的字符集與排序規則信息。1 row in set (0.00 sec)mysql> ALTER DATABASE db_test2 COLLATE ‘utf8_unicode_520_ci’; #輸入語句,修改數據庫排序規則。Query OK, 1 row affected, 1 warning (0.03 sec)mysql> SHOW CREATE DATABASE db_test2;+———-+———————————————————————————————————————————-+| Database | Create Database |+———-+———————————————————————————————————————————-+| db_test2 | CREATE DATABASE db_test2 /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_520_ci */ /*!80016 DEFAULT ENCRYPTION=’N’ */ |+———-+———————————————————————————————————————————-+ #確認已經修改完成的數據庫排序規則信息。1 row in set (0.05 sec)

以上操作,我們只修改了數據庫排序規則信息。
同時,系統自動為您添加了相對於的 字符集。

mysql> ALTER DATABASE db_test2 CHARACTER SET ’tis620′ COLLATE ’tis620_thai_ci’ ENCRYPTION=’Y’ READ ONLY = 1; # #輸入語句,修改數據庫字符集、排序規則、加密模式、只讀模式。Query OK, 1 row affected (0.03 sec)mysql> SHOW CREATE DATABASE db_test2;+———-+—————————————————————————————————————————-+| Database | Create Database |+———-+—————————————————————————————————————————-+| db_test2 | CREATE DATABASE db_test2 /*!40100 DEFAULT CHARACTER SET tis620 */ /*!80016 DEFAULT ENCRYPTION=’Y’ */ /* READ ONLY = 1 */ |+———-+—————————————————————————————————————————-+ #確認已經修改完成的數據庫 字符集、排序規則、加密模式、只讀模式。1 row in set (0.04 sec)

這次我們的修改操作,把所有的選項都用上了。最後查看到, READ ONLY = 1 這個是全新的選項。

至此,有關MySQL數據庫系統,所有關於數據庫修改語句已經全部講完!不過也許你會說,不對!如果在建立好的數據庫後,又發現數據庫的名字也需要再修改,如何處理?如果您看到這裏,也有同樣的疑問,恭喜您!說明您已經開始慢慢的體會到MySQL數據庫系統的設計思路了。按之前我們學習的所有語句結構,應會有一個叫ALTER DATABASE NAME 的語句。其實還真的有,不過語句是RENAME DATABASE old_db_name TO new_db_name

小貼紙出於安全考慮,RENAME DATABASE語句在MySQL從5的部分版本已經開始舍棄該語句。有的資料說5.1.23 之前的舊版本中還可以使用,之後的不可以。筆者未能從官方文檔中,得到具體的版本號!

所以,如果您的MySQL版本是5.7、5.6或者是現在用的8.0。這個語句是無法使用的。

如果,一定要對數據庫更名!好吧,也許會發生這不該發生的情況的!1:完整備份原有數據庫;2:建立新的數據庫;3:將原數據庫備份文件,恢複到新數據庫;4:對比數據庫所有信息;5:刪除原數據庫。感覺是吃飽了撐的!

所以,創建數據庫之前,先規劃好數據庫名,如果誤操作造字不對,直接刪除後再建立正確的!在之後的文章中,我們將學習如何刪除一個已有的數據庫。

小貼紙筆者水平有限,難免有錯誤的地方,如果您發現,很希望能告訴我。raoul@foxmail.com是我的聯系方式。也期待在學習中有任何的問題,能一起來討論,期待您的來信。謝謝!

  大家在看