1.2 批量生成MySQL建表语句
生活随笔
收集整理的這篇文章主要介紹了
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í)際情況修改)
2、 表后的字符排序?qū)傩評tf8_bin需要批量修改成utf8_general_ci
shell腳本如下
3、 表后的屬性去掉,跟隨數(shù)據(jù)庫的默認(rèn)屬性。
shell腳本如下
總結(jié)
以上是生活随笔為你收集整理的1.2 批量生成MySQL建表语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EMS问题
- 下一篇: mysql建表语句注释_MySQL建表语