日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

1.2 批量生成MySQL建表语句

發布時間:2023/12/10 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.2 批量生成MySQL建表语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL數據庫服務器為Linux系統
數據庫用戶名:root
數據庫密碼:123456
數據庫庫名:test

一、 要求

將test庫所有表的建表SQL腳本生成到服務器“/opt/tables”目錄,CREATE之前加DROP TABLE IF EXISTS語句,若表存在則先刪表,一個表對應一個腳本,以表名命名對應文件。

二、 實現方法

創建一個shell腳本執行即可,腳本內容如下。

#!/bin/bash ### 數據庫連接,用戶名:root, 密碼:root dbcn='mysql -uroot -p123456'; #### 數據庫名 db=test; ### 獲取數據庫中表個數 ct=`$dbcn -N -e " SELECT COUNT(1) FROM information_schema.TABLES AS t WHERE t.TABLE_SCHEMA = '$db' AND t.TABLE_TYPE = 'BASE TABLE' ; "`; echo '數據庫表總數量:'$ct; ## shell 文件所在目錄 workdir=$(cd $(dirname $0); pwd);## 創建建表語句存放文件夾 sqldir=/opt/tables; mkdir -p $sqldir;# 遍歷數據庫中的所有表 ii=0; while [ $ii -lt $ct ]; do p=$ii; let ii++; echo '----------------第'$ii'張表------------------';## 獲取表名table_name=`$dbcn -N -e " SELECT t.TABLE_NAME FROM information_schema.TABLES AS t where t.TABLE_SCHEMA = '$db' AND t.TABLE_TYPE = 'BASE TABLE' limit $p,1;"`; echo '表名:'$table_name;## 獲取建表語句table_ddl=`$dbcn $db -N -e "SHOW CREATE TABLE $table_name ;"`;echo '建表語句:'${table_ddl#*${table_name}};## 根據表名,把建表語句放入指定文件中echo -e "DROP TABLE IF EXISTS ${table_name};" > $sqldir/${table_name}.sql; echo -e "${table_ddl#*${table_name}};" >> $sqldir/${table_name}.sql ; done echo '數據庫建表語句導出完畢!';

三、其他要求實現

如表的字符集為utf8,排序規則為utf8_bin(字符比較時大小寫敏感),建表語句和字符串字段后會跟utf8和utf8_bin。

DROP TABLE IF EXISTS TEST_INST; CREATE TABLE `TEST_INST` (`INST_CODE` VARCHAR(32) COLLATE utf8_bin DEFAULT NULL COMMENT '機構代碼',`INST_ATTRIBUTE` VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '機構屬性',KEY `INDEX_TEST_INST_1` (`INST_CODE`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

1、 需要把所有建表腳本字段后跟的utf8和utf8_bin去掉,只留表后的字符屬性,字段屬性跟隨表。
shell腳本如下(具體要替換哪些字符串根據實際情況修改)

#!/bin/bash for file_name in `grep "COLLATE utf8_bin" -rl /opt/tables`do# echo $file_name sed -i 's#COLLATE utf8_bin##' $file_name;done

2、 表后的字符排序屬性utf8_bin需要批量修改成utf8_general_ci
shell腳本如下

#!/bin/bash for file_name in `grep "utf8_bin" -rl /opt/tables`do# echo $file_name sed -i 's#utf8_bin#utf8_general_ci#' $file_name;done

3、 表后的屬性去掉,跟隨數據庫的默認屬性。
shell腳本如下

#!/bin/bash for file_name in `grep "ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin" -rl /opt/tables`do# echo $file_name sed -i 's#ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin##' $file_name;done

總結

以上是生活随笔為你收集整理的1.2 批量生成MySQL建表语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。