MySql 表结构、索引、触发器 相关语句

本文档详述了如何使用SQL语句进行数据库操作,包括查询表结构、索引、触发器以及表和字段的注释。同时展示了获取数据库记录数、数据及索引容量的方法,适用于数据库管理和优化。

查询表结构

desc 表名;

查询表索引

show index from 表名;

查看触发器

show triggers like ‘表名’;

查询数据库所有表注释已经表字段注释

  • 查询数据库 “mammothcode” 下所有 表名 以及 表注释
/* 查询数据库 ‘mammothcode’ 所有表注释 */
SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema='mammothcode';
  • 查询指定表字段的注释
/* 查询数据库 ‘mammothcode’ 下表 ‘t_adminuser’ 所有字段注释 */
SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='t_adminuser' AND table_schema='mammothcode'

查询数据库表记录数

SELECT 
TABLE_SCHEMA AS '数据库', 
SUM(TABLE_ROWS) '记录总数',
SUM(TRUNCATE(DATA_LENGTH/1024/1024/1024, 2)) AS '数据容量GB',
SUM(TRUNCATE(INDEX_LENGTH/1024/1024/1024, 2)) AS '索引容量GB'
FROM information_schema.TABLES
WHERE TABLE_SCHEMA IN('数据库名称', 'q_frame_api')
GROUP BY TABLE_SCHEMA
<think>我们正在使用Java连接MySQL数据库,并获取表的结构(包括列名、数据类型、约束等)和相关触发器信息。 步骤: 1. 使用JDBC连接数据库。 2. 获取数据库的元数据(DatabaseMetaData)。 3. 使用元数据获取表的结构信息(列信息)。 4. 通过查询信息模式(information_schema)数据库中的触发器表来获取触发器信息。 注意:我们需要两个主要部分: - 表结构:可以通过DatabaseMetaData的getColumns方法获取。 - 触发器:需要查询information_schema.TRIGGERS表。 我们将编写一个Java程序,输入数据库连接参数和表名,然后输出该表的结构和相关触发器信息。 代码步骤: 1. 加载驱动(对于较新的JDBC驱动,可以省略,但为了兼容性可以保留)。 2. 建立数据库连接。 3. 获取DatabaseMetaData对象。 4. 使用getColumns方法获取列信息。 5. 使用SQL查询information_schema.TRIGGERS表(注意:MySQL触发器信息存储在TRIGGERS表中)。 6. 打印结果。 注意:在查询触发器时,我们需要指定表所在的数据库和表名。 我们将编写一个方法,接收数据库连接信息(URL, 用户名, 密码)和表名,然后输出信息。 由于触发器信息可能涉及多个数据库,我们应当指定当前数据库(或从连接中获取当前数据库名)。 另外,我们还可以获取主键信息、外键信息等,但问题要求表结构触发器。 让我们开始编写代码。</think>以下是使用Java获取MySQL表结构触发器信息的完整解决方案: ### 解决方案 通过JDBC连接MySQL,结合`DatabaseMetaData`和`information_schema`查询实现: ```java import java.sql.*; public class MySQLMetadataExtractor { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database"; String user = "your_username"; String password = "your_password"; String tableName = "your_table"; try (Connection conn = DriverManager.getConnection(url, user, password)) { // 1. 获取表结构 System.out.println("===== 表结构信息 ====="); extractTableStructure(conn, tableName); // 2. 获取触发器信息 System.out.println("\n===== 关联触发器 ====="); extractTriggers(conn, tableName); } catch (SQLException e) { e.printStackTrace(); } } // 提取表结构信息 private static void extractTableStructure(Connection conn, String tableName) throws SQLException { DatabaseMetaData metaData = conn.getMetaData(); try (ResultSet columns = metaData.getColumns(null, null, tableName, null)) { System.out.printf("%-20s %-15s %-10s %-10s\n", "列名", "数据类型", "是否为空", "默认值"); while (columns.next()) { String columnName = columns.getString("COLUMN_NAME"); String dataType = columns.getString("TYPE_NAME"); String isNullable = columns.getString("IS_NULLABLE"); String defaultValue = columns.getString("COLUMN_DEF"); System.out.printf("%-20s %-15s %-10s %-10s\n", columnName, dataType, isNullable, defaultValue); } } } // 提取触发器信息 private static void extractTriggers(Connection conn, String tableName) throws SQLException { String query = "SELECT TRIGGER_NAME, EVENT_MANIPULATION, ACTION_STATEMENT, ACTION_TIMING " + "FROM information_schema.TRIGGERS " + "WHERE EVENT_OBJECT_TABLE = ?"; try (PreparedStatement stmt = conn.prepareStatement(query)) { stmt.setString(1, tableName); try (ResultSet triggers = stmt.executeQuery()) { System.out.printf("%-20s %-10s %-10s %-60s\n", "触发器名", "触发事件", "触发时机", "执行语句"); while (triggers.next()) { String triggerName = triggers.getString("TRIGGER_NAME"); String event = triggers.getString("EVENT_MANIPULATION"); String timing = triggers.getString("ACTION_TIMING"); String action = triggers.getString("ACTION_STATEMENT"); System.out.printf("%-20s %-10s %-10s %-60s\n", triggerName, event, timing, action); } } } } } ``` ### 关键步骤说明 1. **表结构获取**: - 使用`DatabaseMetaData.getColumns()`获取列信息 - 包含列名、数据类型、是否可为空、默认值等 - 元数据方法直接提供标准化信息 2. **触发器获取**: - 查询`information_schema.TRIGGERS`系统表[^1] - 过滤条件为`EVENT_OBJECT_TABLE = 表名` - 获取触发器名称、触发事件(INSERT/UPDATE/DELETE)、触发时机(BEFORE/AFTER)、执行语句 3. **输出格式**: - 表结构按列格式化输出 - 触发器信息包含完整定义语句 - 使用`printf`对齐数据提高可读性 ### 使用前准备 1. 添加MySQL JDBC驱动依赖(Maven): ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> ``` 2. 修改连接参数: - `your_database`:数据库名 - `your_table`:目标表名 - `your_username`/`your_password`:数据库凭证 ### 输出示例 ``` ===== 表结构信息 ===== 列名 数据类型 是否为空 默认值 id INT NO null name VARCHAR YES null created_at TIMESTAMP NO CURRENT_TIMESTAMP ===== 关联触发器 ===== 触发器名 触发事件 触发时机 执行语句 before_insert INSERT BEFORE BEGIN SET NEW.created_at = NOW(); END ``` 此方案通过标准JDBC接口实现,兼容MySQL 5.7+版本,可扩展获取外键、索引等信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strggle_bin

一毛不嫌少,十元不嫌多

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值