mysql如何查看表中的所有约束和触发器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql如何查看表中的所有约束和触发器?相关的知识,希望对你有一定的参考价值。

对应的语句是什么?
谢谢

可以从information_schema架构下的系统表查看

-- 查看约束
SELECT * FROM information_schema.`TABLE_CONSTRAINTS`;

-- 查看触发器
SELECT * FROM information_schema.`TRIGGERS`;
参考技术A 最简单的方法是安装一个mysql工具,如:sql font ,一目了然了。 参考技术B 下载安装一个第三方工具吧,navicat for mysql 还不错 一直用着 参考技术C show trigger status;

使用 Mysql 中的触发器跟踪日志表中 DB 的所有 DML/DDL 更改

【中文标题】使用 Mysql 中的触发器跟踪日志表中 DB 的所有 DML/DDL 更改【英文标题】:Track all the DML/DDL changes of DB in a log table using trigger in Mysql 【发布时间】:2016-11-20 23:23:44 【问题描述】:

我想使用一个日志表跟踪特定数据库上发生的所有数据库更改。

我检查了许多解决方案,但它们都为 DB 中的每个表提供了一个审计表。我们如何在触发器的帮助下在一个表中跟踪它们?

表格列可能有:

  id - primary key
  db_name -- DB Name
  version, -- Ignore it(i have a column in my table)
  event_type, -- DDL/DML command name
  object_name, -- Table/Procedure/Trigger/Function name which is changed
  object_type, -- TYpe like table,procedure,trigger
  sql_command, -- query executed by user
  username, -- who executed it
  updated_on -- timestamp

提前致谢。

【问题讨论】:

【参考方案1】:

执行 ddl 命令时调用的触发器(以便您可以记录它们)在 mysql 中不存在。但你可能想使用logfiles,尤其是The General Query Log:

一般查询日志是mysqld正在做什么的一般记录。服务器在客户端连接或断开连接时将信息写入此日志,并记录从客户端接收到的每个 SQL 语句。当您怀疑客户端出现错误并想确切了解客户端发送到 mysqld 的内容时,通用查询日志非常有用。

默认情况下禁用日志,启用它可能会降低性能。并且它不会包括间接更改(例如,在过程中执行的 ddls)。

如果您可以安装插件,一个稍微更可配置(并且性能更高)的替代方案是使用审计插件,请参阅MySQL Enterprise Audit,或任何免费实现,例如this one,也可以写成your own,不过基本上会和一般的log一样记录。

另一个重要的信息来源可能是information schema 和performance schema。从那里您基本上可以收集您需要的所有信息(尤其是log of recently executed queries)并从中生成您的日志表,但是需要一些工作来收集您想要的所有数据 - 它不会被操作触发,所以您必须自己定期检查更改(例如,将INFORMATION_SCHEMA.TABLES 中的数据与保存的副本进行比较,以跟踪添加、删除和重命名的表)。 另一方面,定期发送mysql_dump 后跟diff 到最新版本可能要容易得多。

【讨论】:

以上是关于mysql如何查看表中的所有约束和触发器?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看SQL表中都存在哪些约束?

如何查看MySQL执行计划呢?

如何在导入过程中禁用Oracle约束条件和触发器

mysql怎样查询一个表中所有数据

如何禁用和启用表 mysql 中的所有约束,包括。 PK FK CHK UNI 等

关于MySQL的检查约束不生效的问题