日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

1.2 批量生成MySQL建表语句

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

MySQL數(shù)據(jù)庫服務(wù)器為Linux系統(tǒng)
數(shù)據(jù)庫用戶名:root
數(shù)據(jù)庫密碼:123456
數(shù)據(jù)庫庫名:test

一、 要求

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

二、 實(shí)現(xiàn)方法

創(chuàng)建一個shell腳本執(zhí)行即可,腳本內(nèi)容如下。

#!/bin/bash ### 數(shù)據(jù)庫連接,用戶名:root, 密碼:root dbcn='mysql -uroot -p123456'; #### 數(shù)據(jù)庫名 db=test; ### 獲取數(shù)據(jù)庫中表個數(shù) 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 '數(shù)據(jù)庫表總數(shù)量:'$ct; ## shell 文件所在目錄 workdir=$(cd $(dirname $0); pwd);## 創(chuàng)建建表語句存放文件夾 sqldir=/opt/tables; mkdir -p $sqldir;# 遍歷數(shù)據(jù)庫中的所有表 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}};## 根據(jù)表名,把建表語句放入指定文件中echo -e "DROP TABLE IF EXISTS ${table_name};" > $sqldir/${table_name}.sql; echo -e "${table_ddl#*${table_name}};" >> $sqldir/${table_name}.sql ; done echo '數(shù)據(jù)庫建表語句導(dǎo)出完畢!';

三、其他要求實(shí)現(xiàn)

如表的字符集為utf8,排序規(guī)則為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 '機(jī)構(gòu)代碼',`INST_ATTRIBUTE` VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '機(jī)構(gòu)屬性',KEY `INDEX_TEST_INST_1` (`INST_CODE`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

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

#!/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、 表后的字符排序?qū)傩評tf8_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、 表后的屬性去掉,跟隨數(shù)據(jù)庫的默認(rèn)屬性。
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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。