mysql 查詢沒有主鍵的表

關(guān)于查找沒有主鍵的表這件事,我在網(wǎng)上看了一大堆,基本都是互相抄,全都一個(gè)樣,而且那SQL寫的也不好,我想查個(gè)沒有主鍵的表,還得手動(dòng)替換庫名,那我要是有20個(gè)庫我得查20次?更何況排除系統(tǒng)表的方式也很奇怪……所以我就自己寫了一個(gè),能查所有庫的所有表,舒服了。
壓縮版

SELECT a.TABLE_SCHEMA,a.TABLE_NAME FROM (SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema','sys','sysdb')) as a LEFT JOIN (SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY' AND TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema','sys','sysdb')) as b ON a.TABLE_SCHEMA=b.TABLE_SCHEMA AND a.TABLE_NAME=b.TABLE_NAME WHERE b.TABLE_NAME IS NULL;

美化版

SELECT
    a.TABLE_SCHEMA,
    a.TABLE_NAME 
FROM
    (
    SELECT
        TABLE_SCHEMA,
        TABLE_NAME 
    FROM
        information_schema.TABLES 
    WHERE
    TABLE_SCHEMA NOT IN ( 'mysql', 'information_schema', 'performance_schema', 'sys', 'sysdb' )) AS a
    LEFT JOIN (
    SELECT
        TABLE_SCHEMA,
        TABLE_NAME 
    FROM
        information_schema.TABLE_CONSTRAINTS 
    WHERE
        CONSTRAINT_TYPE = 'PRIMARY KEY' 
    AND TABLE_SCHEMA NOT IN ( 'mysql', 'information_schema', 'performance_schema', 'sys', 'sysdb' )) AS b 
    ON a.TABLE_SCHEMA = b.TABLE_SCHEMA 
    AND a.TABLE_NAME = b.TABLE_NAME 
WHERE
    b.TABLE_NAME IS NULL;

sql解釋
查詢結(jié)果中TABLE_SCHEMA是庫名,TABLE_NAME就是表名。
其查詢?cè)砭褪莍nformation_schema庫中存儲(chǔ)了各個(gè)庫與表的結(jié)構(gòu),在information_schema.TABLES表中存儲(chǔ)了所有表,information_schema.TABLE_CONSTRAINTS表中存儲(chǔ)了表相關(guān)的約束,主鍵就是一種約束,所以CONSTRAINT_TYPE字段為PRIMARY KEY值的就是擁有主鍵的表。
有了所有表的表名,還有了所有擁有主鍵的表,那么就簡(jiǎn)單了,以查詢出的全部表為主表,左聯(lián)一下,右表為空的就是沒有主鍵的表。
SQL中排除了mysql自帶的五個(gè)庫,同時(shí)解決了不同名的庫擁有相同名的表的情況,還有優(yōu)化空間,不過我覺得不是業(yè)務(wù)SQL,沒必要優(yōu)化了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容