查詢單個 指定數據庫和數據庫表
SET @db_name = 'test';
SET @table_name = 'sys_user';
SELECT
COLUMN_NAME 字段名稱,
COLUMN_TYPE 字段類型,
IF
(
COLUMN_NAME IN ( SELECT COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE AS T WHERE T.table_schema = @db_name AND T.table_name = @table_name ),
'PRIMARY KEY',
IF
( IS_NULLABLE = 'NO', 'NOT NULL', 'NULL' )
) AS 字段約束,
COLUMN_COMMENT 字段註釋
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
table_schema = @db_name
AND table_name = @table_name;
查詢多個 指定數據庫
SET @db_name = 'test';
SELECT
CONCAT( 'SELECT COLUMN_NAME 字段名稱, COLUMN_TYPE 字段類型, IF ( COLUMN_NAME IN ( SELECT COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE AS T WHERE T.table_schema = \'', @db_name, '\' AND T.table_name = \'', table_name, '\' ), \'PRIMARY KEY\', IF ( IS_NULLABLE = \'NO\', \'NOT NULL\', \'NULL\' ) ) AS 字段約束, COLUMN_COMMENT 字段註釋 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = \'', @db_name, '\' AND table_name = \'', table_name, '\';' )
FROM
information_schema.TABLES
WHERE
table_schema = @db_name;
但是還不夠方便 如下爲使用EXECUTE執行GROUP_CONCAT拼接的OUTFILE語句直接輸出到文件
PS: 搞了好長時間 主要是修改配置文件和一些報錯
SET @db_name = 'test';
SELECT
@SQL := CONCAT(
'SELECT * INTO OUTFILE \'/data/all.xlsx\' FIELDS TERMINATED BY \'\t\' FROM (',
GROUP_CONCAT(
CONCAT( 'SELECT \'表名 -> ', table_name, '\' AS 字段名稱, \'描述 -> ',table_comment,'\' AS 字段類型, \'+\' AS 字段約束, \'-\' AS 字段註釋 UNION ALL SELECT COLUMN_NAME, COLUMN_TYPE, IF ( COLUMN_NAME IN ( SELECT COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE AS T WHERE T.table_schema = \'', @db_name, '\' AND T.table_name = \'', table_name, '\' ), \'PRIMARY KEY\', IF ( IS_NULLABLE = \'NO\', \'NOT NULL\', \'NULL\' ) ), COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = \'', @db_name, '\' AND table_name = \'', table_name, '\'' ) SEPARATOR ' UNION ALL '
),
') a'
)
FROM
information_schema.TABLES
WHERE
table_schema = @db_name # 此處條件可自行修改
AND table_name NOT LIKE '%act_%';
PREPARE _sql
FROM
@SQL;
EXECUTE _sql;
如下配置生效要重啓mysql服務 systemctl restart mysql
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
需要配置secure-file-priv 編輯mysql的my.cnf在[mysqld]修改或添加 無[mysqld]請手動創建
secure-file-priv爲null(默認值) 不允許導入|導出
secure_file_priv爲/data 導入|導出只能發生在/tmp/目錄下
secure_file_priv沒有值 表示不對導入|導出做限制
Can’t create/write to file ‘/data/text.csv’ (Errcode: 13 - Permission denied)
說明沒有權限操作 好像是上面的配置沒有全部生效 通過設置tmpdir可解決 有更好的解決方式我在更新
tmpdir = /data # 同樣是在[mysqld]下修改或增加
如果最後顯示的sql語句不全可能是GROUP_CONCAT的限制太小 有的人說設爲-1爲無限制 但是我的還是顯示不全
group_concat_max_len=99999 # 同樣是在[mysqld]下修改或增加
Duplicate column name ‘xxxx’ 別名重複 重複字段名稱起個別名即可
結果圖如下