• mysql 查询没有主键的表


    关于查找没有主键的表这件事,我在网上看了一大堆,基本都是互相抄,全都一个样,而且那SQL写的也不好,我想查个没有主键的表,还得手动替换库名,那我要是有20个库我得查20次?更何况排除系统表的方式也很奇怪……所以我就自己写了一个,能查所有库的所有表,舒服了。
    压缩版

    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解释
    查询结果中TABLE_SCHEMA是库名,TABLE_NAME就是表名。
    其查询原理就是information_schema库中存储了各个库与表的结构,在information_schema.TABLES表中存储了所有表,information_schema.TABLE_CONSTRAINTS表中存储了表相关的约束,主键就是一种约束,所以CONSTRAINT_TYPE字段为PRIMARY KEY值的就是拥有主键的表。
    有了所有表的表名,还有了所有拥有主键的表,那么就简单了,以查询出的全部表为主表,左联一下,右表为空的就是没有主键的表。
    SQL中排除了mysql自带的五个库,同时解决了不同名的库拥有相同名的表的情况,还有优化空间,不过我觉得不是业务SQL,没必要优化了。



    作者:May22Night
    链接:https://www.jianshu.com/p/f484c63e5c96


  • 相关阅读:
    支持向量机(SVM)相关免费学习视频集锦
    《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)
    《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
    OpenCV 轮廓基本特征
    !!破解灯塔线取点与画线的“难点”
    理工科应该的知道的C/C++数学计算库(转)
    521. 最长特殊序列 Ⅰ
    520. 检测大写字母
    459. 重复的子字符串
    443. 压缩字符串
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16033349.html
Copyright © 2020-2023  润新知