在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:
MySQL4.1 提供了information_schema 数据字典。从此可以很简单的用SQL语句来检索需要的系统元数据了。
MySQL5.5 提供了performance_schema 性能字典。 但是这个字典比较专业,一般人可能也就看看就不了了之了。
MySQL5.7 提供了 sys系统数据库。 sys数据库里面包含了一系列的存储过程、自定义函数以及视图来帮助我们快速的了解系统的元数据信息。
sys系统数据库结合了information_schema和performance_schema的相关数据,让我们更加容易的检索元数据。 现在呢,我就示范下几种场景下如何快速的使用。
第一,
比如之前想要知道某个表是否存在与否,可以用以下两种方法:
A, 悲观的方法,写SQL从information_schema中拿信息:mysql> SELECT IF(COUNT(*) = 0,'Not exists!','Exists!') AS 'result' FROM information_schema.tables WHERE table_schema = 'new_feature' AND table_name = 't1';
+-------------+
| result |
+-------------+
| Not exists! |
+-------------+
1 row in set (0.00 sec)
B,乐观的方法,假设表存在,写一个存储过程:DELIMITER $$
USE `new_feature`$$
DROP PROCEDURE IF EXISTS `sp_table_exists`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_table_exists`(
IN db_name VARCHAR(64),
IN tb_name VARCHAR(64),
OUT is_exists VARCHAR(60)</