MySQL 常用的拼接語(yǔ)句匯總
前言:在MySQL中 CONCAT ()函數(shù)用于將多個(gè)字符串連接成一個(gè)字符串,利用此函數(shù)我們可以將原來(lái)一步無(wú)法得到的sql拼接出來(lái),在工作中也許會(huì)方便很多,下面主要介紹下幾個(gè)常用的場(chǎng)景。
注:適用于5.7版本 低版本可能稍許不同。
1.拼接查詢(xún)所有用戶(hù)
SELECT DISTINCT
CONCAT(
'User: \'',
USER,
'\'@\'',
HOST,
'\';'
) AS QUERY
FROM
mysql.USER;
# 當(dāng)拼接字符串中出現(xiàn)'時(shí) 需使用\轉(zhuǎn)義符
2.拼接DROP table
SELECT
CONCAT(
'DROP table ',
TABLE_NAME,
';'
)
FROM
information_schema. TABLES
WHERE
TABLE_SCHEMA = 'test';
3.拼接kill連接
SELECT
concat('KILL ', id, ';')
FROM
information_schema. PROCESSLIST
WHERE
STATE LIKE 'Creating sort index';
4.拼接創(chuàng)建數(shù)據(jù)庫(kù)語(yǔ)句
SELECT
CONCAT(
'create database ',
'`',
SCHEMA_NAME,
'`',
' DEFAULT CHARACTER SET ',
DEFAULT_CHARACTER_SET_NAME,
';'
) AS CreateDatabaseQuery
FROM
information_schema.SCHEMATA
WHERE
SCHEMA_NAME NOT IN (
'information_schema',
'performance_schema',
'mysql',
'sys'
);
5.拼接創(chuàng)建用戶(hù)的語(yǔ)句
SELECT
CONCAT(
'create user \'',
user,
'\'@\'',
Host,
'\''
' IDENTIFIED BY PASSWORD \'',
authentication_string,
'\';'
) AS CreateUserQuery
FROM
mysql.`user`
WHERE
`User` NOT IN (
'root',
'mysql.session',
'mysql.sys'
);
#有密碼字符串哦 在其他實(shí)例執(zhí)行 可直接創(chuàng)建出與本實(shí)例相同密碼的用戶(hù)
6.導(dǎo)出權(quán)限腳本 這個(gè)shell腳本也用到了拼接
#!/bin/bash
#Function export user privileges
pwd=yourpass
expgrants()
{
mysql -B -u'root' -p${pwd} -N $@ -e "SELECT CONCAT( 'SHOW GRANTS FOR ''', user, '''@''', host, ''';' ) AS query FROM mysql.user" | \
mysql -u'root' -p${pwd} $@ | \
sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/-- \1 /;/--/{x;p;x;}'
}
expgrants > /tmp/grants.sql
echo "flush privileges;" >> /tmp/grants.sql
7.查找表碎片
SELECT t.TABLE_SCHEMA,
t.TABLE_NAME,
t.TABLE_ROWS,
concat(round(t.DATA_LENGTH / 1024 / 1024, 2), 'M') AS size,
t.INDEX_LENGTH,
concat(round(t.DATA_FREE / 1024 / 1024, 2), 'M') AS datafree
FROM information_schema.tables t
WHERE t.TABLE_SCHEMA = 'test' order by DATA_LENGTH desc;
8.查找無(wú)主鍵表 這個(gè)沒(méi)用到拼接 也分享出來(lái)吧
#查找某一個(gè)庫(kù)無(wú)主鍵表
SELECT
table_schema,
table_name
FROM
information_schema.TABLES
WHERE
table_schema = 'test'
AND TABLE_NAME NOT IN (
SELECT
table_name
FROM
information_schema.table_constraints t
JOIN information_schema.key_column_usage k USING (
constraint_name,
table_schema,
table_name
)
WHERE
t.constraint_type = 'PRIMARY KEY'
AND t.table_schema = 'test'
);
#查找除系統(tǒng)庫(kù)外 無(wú)主鍵表
SELECT
t1.table_schema,
t1.table_name
FROM
information_schema. TABLES t1
LEFT OUTER JOIN information_schema.TABLE_CONSTRAINTS t2 ON t1.table_schema = t2.TABLE_SCHEMA
AND t1.table_name = t2.TABLE_NAME
AND t2.CONSTRAINT_NAME IN ('PRIMARY')
WHERE
t2.table_name IS NULL
AND t1.TABLE_SCHEMA NOT IN (
'information_schema',
'performance_schema',
'mysql',
'sys'
) ;
以上就是MySQL 常用的拼接語(yǔ)句匯總的詳細(xì)內(nèi)容,更多關(guān)于MySQL 拼接語(yǔ)句的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
數(shù)據(jù)庫(kù)中的sql完整性約束語(yǔ)句解析
這篇文章主要介紹了數(shù)據(jù)庫(kù)中的sql完整性約束語(yǔ)句解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
MySQL連接被阻塞的問(wèn)題分析與解決方案(從錯(cuò)誤到修復(fù))
在Java應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)庫(kù)連接是必不可少的一環(huán),然而,在使用MySQL時(shí),我們可能會(huì)遇到MySQL服務(wù)器由于檢測(cè)到過(guò)多的連接失敗,自動(dòng)阻止了來(lái)自該主機(jī)的連接請(qǐng)求,本文將深入分析該問(wèn)題的原因,并提供完整的解決方案,需要的朋友可以參考下2025-04-04
MySQL中常見(jiàn)的六個(gè)約束類(lèi)型詳解
數(shù)據(jù)類(lèi)型是為了節(jié)約內(nèi)存,提高計(jì)算, 數(shù)據(jù)約束是為了完整性(存儲(chǔ)關(guān)系),下面這篇文章主要給大家介紹了關(guān)于MySQL中常見(jiàn)的六個(gè)約束類(lèi)型的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
MySql如何實(shí)現(xiàn)遠(yuǎn)程登錄MySql數(shù)據(jù)庫(kù)過(guò)程解析
這篇文章主要介紹了MySql如何實(shí)現(xiàn)遠(yuǎn)程登錄MySql數(shù)據(jù)庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
在MySQL中使用LIMIT進(jìn)行分頁(yè)的方法
這篇文章主要介紹了在MySQL中使用LIMIT進(jìn)行分頁(yè)的方法,作者列舉出了三種方法,并且針對(duì)跳頁(yè)等常見(jiàn)問(wèn)題做出了提示,需要的朋友可以參考下2015-05-05
MySQL分區(qū)建索引以及分區(qū)介紹總結(jié)
當(dāng)mysql一張數(shù)據(jù)表中的數(shù)據(jù)達(dá)到一定的量時(shí),在其中查詢(xún)某一個(gè)數(shù)據(jù),需要花費(fèi)大量的時(shí)間,下面這篇文章主要給大家介紹了關(guān)于MySQL分區(qū)建索引以及分區(qū)介紹的相關(guān)資料,需要的朋友可以參考下2022-04-04

