0
点赞
收藏
分享

微信扫一扫

MySQL 系统表INFORMATION_SCHEMA.TABLE_CONSTRAINTS 使用示例


INFORMATION_SCHEMA.TABLE_CONSTRAINTS 是一个系统表,它存储了关于数据库中所有表的约束信息。这个表是SQL标准的一部分,大多数关系型数据库管理系统(如MySQL、PostgreSQL、SQL Server等)都提供了类似的表来存储元数据信息。

表结构

以下是 INFORMATION_SCHEMA.TABLE_CONSTRAINTS 表的一些主要列及其含义:

  • CONSTRAINT_CATALOG: 约束所在的目录(通常是数据库名)。
  • CONSTRAINT_SCHEMA: 约束所在的模式名。
  • CONSTRAINT_NAME: 约束的名称。
  • TABLE_CATALOG: 表所在的目录(通常是数据库名)。
  • TABLE_SCHEMA: 表所在的模式名。
  • TABLE_NAME: 表的名称。
  • CONSTRAINT_TYPE: 约束的类型。常见的值包括:
  • PRIMARY KEY: 主键约束。
  • FOREIGN KEY: 外键约束。
  • UNIQUE: 唯一性约束。
  • CHECK: 检查约束。
  • NOT NULL: 非空约束(某些数据库系统可能不支持此类型)。
  • IS_DEFERRABLE: 表示该约束是否可以延迟到事务的末尾进行检查。值为 YESNO
  • INITIALLY_DEFERRED: 表示该约束是否在事务开始时默认延迟检查。值为 YESNO

示例查询

查找所有主键约束

SELECT 
    CONSTRAINT_NAME, 
    TABLE_SCHEMA, 
    TABLE_NAME, 
    CONSTRAINT_TYPE
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE 
    CONSTRAINT_TYPE = 'PRIMARY KEY';

查找所有外键约束

SELECT 
    CONSTRAINT_NAME, 
    TABLE_SCHEMA, 
    TABLE_NAME, 
    CONSTRAINT_TYPE
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE 
    CONSTRAINT_TYPE = 'FOREIGN KEY';

查找特定表的所有约束

SELECT 
    CONSTRAINT_NAME, 
    TABLE_SCHEMA, 
    TABLE_NAME, 
    CONSTRAINT_TYPE
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE 
    TABLE_SCHEMA = 'your_schema_name' 
    AND TABLE_NAME = 'your_table_name';

查找没有主键的表

SELECT 
    TABLE_SCHEMA, 
    TABLE_NAME
FROM 
    INFORMATION_SCHEMA.TABLES
WHERE 
    TABLE_SCHEMA = 'your_schema_name'
    AND TABLE_NAME NOT IN (
        SELECT TABLE_NAME 
        FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
        WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' 
          AND TABLE_SCHEMA = 'your_schema_name'
    );


举报

相关推荐

0 条评论