mysql 查询指定数据库所有表, 指定表所有列, 指定列所有表 所有外键及索引, 以及索引的创建和删除

查询指定 数据库 中所有  (指定数据库的,所有表)

// 可以把 TABLE_NAME 换成 * 号, 查看更丰富的信息
SELECT
    TABLE_NAME
FROM
    information_schema. TABLES
WHERE
    table_schema = '数据库名'

    //where 后面还有更多的条件选择,比如只查出以 oauth_表开头的表
    AND TABLE_NAME LIKE 'oauth_%';

查询指定 数据库 中,指定 表 的所有 字段 (指定表的,所有列)

SELECT
    COLUMN_NAME
FROM
    information_schema.COLUMNS
WHERE
    table_schema = '数据库名'
    AND table_name = '表名'

查询指定 数据库 所有表中, 含有 某个字段 的表 (指定列的,所有表)

SELECT
    table_name
FROM
    information_schema. COLUMNS
WHERE
    table_schema = '数据库名'
    AND table_name in (
        SELECT
            TABLE_NAME
        FROM
            information_schema. TABLES
        WHERE
            table_schema = '数据库名'
) AND COLUMN_NAME = '字段名';

查询指定 数据库 中所有 表 的 外键

SELECT
    *
FROM
    information_schema.TABLE_CONSTRAINTS
WHERE
        //注意指定约束类型, 是为了过滤掉 "PRIMARY KEY, UNIQUE"这两个索引
    CONSTRAINT_TYPE = 'FOREIGN KEY'
    AND CONSTRAINT_SCHEMA = '数据库名'

        //如果只查询外键是以 fk_开头命名的 (如果你的外键命名以 fk_开头的话)
    AND CONSTRAINT_NAME LIKE 'fk_%';

查询指定 数据库 中所有 表 的 索引 (主键,唯一,普通等, 除了外键)

SELECT
    *
FROM
    INFORMATION_SCHEMA.STATISTICS
WHERE
    TABLE_SCHEMA = '数据库名';

//对常用的几个字段进行说明
//TABLE_SCHEMA, 表所在库
//TABLE_NAME, 表名

//NON_UNIQUE, 该索引能否包含重复, 1代表可以, 0代表不可以, 注意PRIMARY ,UNIQUE 为0,
//用INDEX_NAME 字段将两者区分

//INDEX_NAME,  索引名
//COLUMN_NAME  表字段名,(表示此字段上加了索引)

如果只想查出 某个表 的 索引

//以下两个 sql 是等价的,
//注意 表名和数据库名 顺序 以及 是否加引号 ''
SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = '表名'
  AND table_schema = '数据库名'

SHOW INDEX
  FROM 表名
  FROM 数据库名

创建索引

1. ALTER TABLE
//唯一索引 (文本字段不能添加索引)
ALTER TABLE `表名` ADD UNIQUE `索引名` (`字段`, `字段`);
//普通索引 (文本字段不能添加索引)
ALTER TABLE `表名` ADD INDEX `索引名` (`字段`, `字段`);
//主键索引
ALTER TABLE `表名` ADD PRIMARY KEY (`字段`);

2. CREATE INDEX
CREATE INDEX `索引名` ON `表名` (`字段`, `字段`)

CREATE UNIQUE INDEX `索引名` ON `表名` (`字段`, `字段`)

删除索引

//删除普通索引或唯一索引
1. DROP INDEX index_name ON talbe_name
2. ALTER TABLE table_name DROP INDEX index_name

注意: 按照一般情况, 主键我们一般都是设置为自增的, 所以删除主键索引前, 要先删掉自增

//删除自增
ALTER TABLE `表名` CHANGE `列名` `列名` int(10)
//删除主键索引
3. ALTER TABLE table_name DROP PRIMARY KEY
(0)

相关推荐

  • dvwa-sql注入(blind)

    SQL Injection(Blind): SQL Injection(Blind),即SQL盲注. 与一般注入的区别在于: 一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常 ...

  • 数据库索引详解

    什么是索引 索引是对 数据库中一列或者多列的值进行排序的一中结构,使用索引可以快速访问数据库中表的特定信息.索引的一个主要的目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录的 ...

  • Sqlite—数据库管理与表管理

    数据库管理 创建数据库,创建完成之后自动进入 [root@localhost ~]# sqlite3 /www/wwwroot/task.db 使用数据库,如果 /www/wwwroot 路径下面没有 ...

  • MySQL查询某个数据库某个表的字段

    MySQL查询某个数据库某个表的字段

  • Mysql中查询某个数据库中所有表的字段信息

    前言有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢?在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUMNS ...

  • 数据透视表切片器可以按照指定的顺序排列吗?

    用数据透视表切片器可以制作动态图表,便于看出数据变化情况. 操作步骤如下: Step1:原始表格有产品名称.季度.收入三个字段,点击"插入"→"数据透视表",将 ...

  • Excel VBA 7.51玩转工作表的拆分,按照指定行数拆分成为独立的工作表

    一起学习,一起进步~~ 前景提要() 今天我们来继续玩转工作表的拆分,昨天我们分享了关于工作表的拆分中的一个操作,按照指定的行数将总表的数据拆分成为多个工作表的格式,但是有小伙伴觉得这样还不够满足他们 ...

  • VBA的工作薄中不同的工作表怎么汇总到一个指定的工作表中

    还要使用Range对象的属性Resize Resize有两个可选参数. 第一个参数RowSize,表示新的区域中的行数. 如果省略,就表示区域中的行数保持不变. 第二个参数ColumnSize,表示新 ...

  • MySQL 查询指定时间范围内的数据

    时间字段名均不引 当天 SELECT * FROM 表名 WHERE TO_DAYS(时间字段名) = TO_DAYS(NOW()); 几天前 -- 昨天.几天前就<=几SELECT * FRO ...

  • 外键与单表查询

    日期类型 datetimedatetimeyear 枚举与集合 多选一enum gender enum()多选多(多选一)set hobbies set() 创建表的完整语法 create table ...

  • 获取数据库中用户表所有列和列的数据类型

    获取数据库中,所有用户表中每一列名和其数据类型. SELECT OBJECT_NAME(c.OBJECT_ID) AS [Table_Name], c.[name] AS [Column_Name] ...

  • 都是名表,为什么瑞士要分两场表展?

    这是在今日头条上被邀请回答的问题,"为什么巴展没有积家.朗格?SIHH没有劳力士?" 表迷们不要笑,大部分人还真是搞不清楚两个表展是咋回事,今天我们来认真回答一下这个问题. 巴展, ...