本系列在之前的文章中我们为大家介绍了sys 系统库的快捷视图、函数,本期开始我们将为大家介绍 sys 系统库的函数。
PS:下文中如果函数定义文本较短的会列出部分函数的定义文本,以便大家更直观地学习它们。过长的函数定义文本请自行按照《初相识|全方位认识 sys 系统库》一文中介绍的下载路径下载查看。
| extract_schema_from_file_name()
从给定文件的绝对路径中提取schema名称,该函数在sys.x$ps_schema_table_statistics_io视图中调用,当然你也可以在自定义视图中调用
-
此函数假定给定的所有数据文件都位于datadir目录下,因此,如果说表是分区表或者使用了单独的表选项定义了自己的DATA_DIRECTORY路径,那么虽然能够正确返回数据库的名称,但是后续使用这个数据库名称与其他视图联结使用时将无法在datadir下找到相应的表数据文件
-
该函数在拥有一个数据文件的完整路径时用这个路径作为传入参数提取performance_schema中的文件I/O信息非常实用, 它提供了一种便捷的方式来获取schema名,比完整路径名更容易理解,并且该返回的schema名称字符串值后续可以用于联结查询
参数:
-
path VARCHAR(512):一个用于提取schema名称的完整数据文件路径
返回值:是一个VARCHAR(64)字符串,即schema名称字符串
函数定义语句文本
DROP FUNCTION IF EXISTS extract_schema_from_file_name;
DELIMITER $$
CREATE DEFINER='root'@'localhost' FUNCTION extract_schema_from_file_name (
path VARCHAR(512)
)
RETURNS VARCHAR(64)
COMMENT '
Description
-----------
Takes a raw file path, and attempts to extract the schema name from it.
Useful for when interacting with Performance Schema data
concerning IO statistics, for example.
Currently relies on the fact that a table data file will be within a
specified database directory (will not work with partitions or tables
that specify an individual DATA_DIRECTORY).
Parameters
-----------
path (VARCHAR(512)):
The full file path to a data file to extract the schema name from.
Returns
-----------
VARCHAR(64)
Example
-----------
mysql> SELECT sys.extract_schema_from_file_name(\'/var/lib/mysql/employees/employee.ibd\');
+----------------------------------------------------------------------------+
| sys.extract_schema_from_file_name(\'/var/lib/mysql/employees/employee.ibd\') |
+----------------------------------------------------------------------------+
| employees |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)
'
SQL SECURITY INVOKER
DETERMINISTIC
NO SQL
BEGIN
RETURN LEFT(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(path, '\\', '/'), '/', -2), '/', 1), 64);
END$$
DELIMITER ;
| extract_table_from_file_name()
从给定文件绝对路径名中提取表名,该函数在sys.x$ps_schema_table_statistics_io视图中调用,当然你也可以在自定义视图中调用
-
该函数在拥有一个数据文件的完整路径时用这个路径作为传入参数提取performance_schema中的文件I/O信息非常实用, 它提供了一种便捷的方式来获取表名,比完整路径名更容易理解,并且该返回的表名称字符串值后续可以用于联结查询
参数:
-
path VARCHAR(512):一个用于提取表名称的完整数据文件路径
返回值:是一个VARCHAR(64)字符串,即表名称字符串
函数定义语句文本
DROP FUNCTION IF EXISTS extract_table_from_file_name;
DELIMITER $$
CREATE DEFINER='root'@'localhost' FUNCTION extract_table_from_file_name (
path VARCHAR(512)
)
RETURNS VARCHAR(64)
COMMENT '
Description
-----------
Takes a raw file path, and extracts the table name from it.
Useful for when interacting with Performance Schema data
concerning IO statistics, for example.
Parameters
-----------
path (VARCHAR(512)):
The full file path to a data file to extract the table name from.
Returns
-----------
VARCHAR(64)
Example
-----------
mysql> SELECT sys.extract_table_from_file_name(\'/var/lib/mysql/employees/employee.ibd\');
+---------------------------------------------------------------------------+
| sys.extract_table_from_file_name(\'/var/lib/mysql/employees/employee.ibd\') |
+------------------