Skip to content

ROUTINES

xiaoboluo768 edited this page Jun 7, 2020 · 2 revisions
  • 该表提供查询关于存储过程和存储函数的信息(不包括用户自定义函数UDF)
  • 该表中的信息与“mysql.proc”中记录的信息相对应(如果该表中有值的话)
  • 该表为InnoDB引擎临时表
  • 表定义语句
CREATE TEMPORARY TABLE `ROUTINES` (
  `SPECIFIC_NAME` varchar(64) NOT NULL DEFAULT '',
  `ROUTINE_CATALOG` varchar(512) NOT NULL DEFAULT '',
  `ROUTINE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
  `ROUTINE_NAME` varchar(64) NOT NULL DEFAULT '',
  `ROUTINE_TYPE` varchar(9) NOT NULL DEFAULT '',
  `DATA_TYPE` varchar(64) NOT NULL DEFAULT '',
  `CHARACTER_MAXIMUM_LENGTH` int(21) DEFAULT NULL,
  `CHARACTER_OCTET_LENGTH` int(21) DEFAULT NULL,
  `NUMERIC_PRECISION` bigint(21) unsigned DEFAULT NULL,
  `NUMERIC_SCALE` int(21) DEFAULT NULL,
  `DATETIME_PRECISION` bigint(21) unsigned DEFAULT NULL,
  `CHARACTER_SET_NAME` varchar(64) DEFAULT NULL,
  `COLLATION_NAME` varchar(64) DEFAULT NULL,
  `DTD_IDENTIFIER` longtext,
  `ROUTINE_BODY` varchar(8) NOT NULL DEFAULT '',
  `ROUTINE_DEFINITION` longtext,
  `EXTERNAL_NAME` varchar(64) DEFAULT NULL,
  `EXTERNAL_LANGUAGE` varchar(64) DEFAULT NULL,
  `PARAMETER_STYLE` varchar(8) NOT NULL DEFAULT '',
  `IS_DETERMINISTIC` varchar(3) NOT NULL DEFAULT '',
  `SQL_DATA_ACCESS` varchar(64) NOT NULL DEFAULT '',
  `SQL_PATH` varchar(64) DEFAULT NULL,
  `SECURITY_TYPE` varchar(7) NOT NULL DEFAULT '',
  `CREATED` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `LAST_ALTERED` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `SQL_MODE` varchar(8192) NOT NULL DEFAULT '',
  `ROUTINE_COMMENT` longtext NOT NULL,
  `DEFINER` varchar(93) NOT NULL DEFAULT '',
  `CHARACTER_SET_CLIENT` varchar(32) NOT NULL DEFAULT '',
  `COLLATION_CONNECTION` varchar(32) NOT NULL DEFAULT '',
  `DATABASE_COLLATION` varchar(32) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 表字段含义(部分字段)
  • SPECIFIC_NAME:存储程序名称
  • ROUTINE_CATALOG:该字段总是为def
  • ROUTINE_SCHEMA:存储程序所在的数据库名称
  • ROUTINE_NAME:存储程序名称
  • ROUTINE_TYPE:存储程序类型,有效值为:PROCEDURE和FUNCTION
  • DTD_IDENTIFIER:如果存储程序为函数,则该字段为返回数据类型的值,如果为存储过程,则该字段为空
  • ROUTINE_BODY:存储程序的主体内容,总是为"SQL"
  • ROUTINE_DEFINITION:存储程序的具体的定义SQL文本
  • EXTERNAL_LANGUAGE:表示是否使用外部语言。如果mysql.proc.language ='SQL',则EXTERNAL_LANGUAGE字段值为NULL,否则,EXTERNAL_LANGUAGE字段值和mysql.proc.language中的值相同。但是,当前MySQL Server还不支持除了SQL意外的其他预研,所以EXTERNAL_LANGUAGE字段值始终为NULL
  • EXTERNAL_NAME:该字段总是为NULL
  • EXTERNAL_LANGUAGE:存储程序的外部语言,由于目前MySQL 只支持SQL,所以该字段总是为NULL
  • PARAMETER_STYLE:该字段总是为SQL
  • IS_DETERMINISTIC:有效值为YES和NO,具体值依赖于定义存储程序时是否使用了DETERMINISTIC关键字来指定相关的特性
  • SQL_DATA_ACCESS:表示存储程序数据访问特性,有效值为:CONTAINS SQL、NO SQL、READS SQL DATA、MODIFIES SQL DATA
  • SQL_PATH:该字段总是为NULL
  • SECURITY_TYPE:表示存储程序的安全特性,有效值为:DEFINER、INVOKER
  • CREATED:表示创建存储程序的日期和时间。是一个TIMESTAMP值
  • LAST_ALTERED:表示存储过程最近一次修改的日期和时间。也是一个TIMESTAMP值。如果自存储程序创建以来从未修改过,则该列值与CREATED列值相同
  • SQL_MODE:表示创建或修改存储程序时MySQL Server的sql_mode值(该字段为 "MySQL extension" 列)
  • ROUTINE_COMMENT:存储程序的注释信息(该字段为 "MySQL extension" 列)
  • DEFINER:存储程序的创建者账户名(该字段为 "MySQL extension" 列)
  • CHARACTER_SET_CLIENT:表示创建存储程序时的character_set_client系统变量会话值(该字段为 "MySQL extension" 列)
  • COLLATION_CONNECTION:表示创建纯粹程序时的collation_connection系统变量会话值(该字段为 "MySQL extension" 列)
  • DATABASE_COLLATION:表示创建存储程序时所在的数据库的排序规则(该字段为 "MySQL extension" 列)
  • DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,CHARACTER_OCTET_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,DATETIME_PRECISION,CHARACTER_SET_NAME和COLLATION_NAME:这些字段含义和columns表的字段含义相同。这些字段提供有关存储函数(注意不是存储过程)的RETURNS子句的数据类型相关的信息。如果存储程序是存储过程,则这些列的值为NULL
* 有关存储的函数RETURNS数据类型的信息也可在PARAMETERS表中查询到一些信息。当存储程序为存储函数时,PARAMETERS.ORDINAL_POSITION列值为0
  • 表记录内容示例
admin@localhost : information_schema 06:10:43> select * from ROUTINES limit 1\G;
*************************** 1. row ***************************
          SPECIFIC_NAME: create_synonym_db
        ROUTINE_CATALOG: def
          ROUTINE_SCHEMA: sys
            ROUTINE_NAME: create_synonym_db
            ROUTINE_TYPE: PROCEDURE
              DATA_TYPE: 
CHARACTER_MAXIMUM_LENGTH: NULL
  CHARACTER_OCTET_LENGTH: NULL
      NUMERIC_PRECISION: NULL
          NUMERIC_SCALE: NULL
      DATETIME_PRECISION: NULL
      CHARACTER_SET_NAME: NULL
          COLLATION_NAME: NULL
          DTD_IDENTIFIER: NULL
            ROUTINE_BODY: SQL
      ROUTINE_DEFINITION: BEGIN DECLARE v_done bool DEFAULT FALSE; DECLARE v_db_name_check VARCHAR(64); DECLARE v_db_err_msg TEXT; DECLARE v_table VARCHAR(64); DECLARE v_views_created INT DEFAULT 0;  DECLARE db_doesnt_exist CONDITION FOR SQLSTATE '42000'; DECLARE db_name_exists CONDITION FOR SQLSTATE 'HY000';  DECLARE c_table_names CURSOR FOR  SELECT TABLE_NAME  FROM INFORMATION_SCHEMA.TABLES  WHERE TABLE_SCHEMA = in_db_name;  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;  SELECT SCHEMA_NAME INTO v_db_name_check FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = in_db_name;  IF v_db_name_check IS NULL THEN SET v_db_err_msg = CONCAT('Unknown database ', in_db_name); SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = v_db_err_msg; END IF;  SELECT SCHEMA_NAME INTO v_db_name_check FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = in_synonym;  IF v_db_name_check = in_synonym THEN SET v_db_err_msg = CONCAT('Can't create database ', in_synonym, '; database exists'); SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = v_db_err_msg; END IF;  SET @create_db_stmt := CONCAT('CREATE DATABASE ', sys.quote_identifier(in_synonym)); PREPARE create_db_stmt FROM @create_db_stmt; EXECUTE create_db_stmt; DEALLOCATE PREPARE create_db_stmt;  SET v_done = FALSE; OPEN c_table_names; c_table_names: LOOP FETCH c_table_names INTO v_table; IF v_done THEN LEAVE c_table_names; END IF;  SET @create_view_stmt = CONCAT( 'CREATE SQL SECURITY INVOKER VIEW ', sys.quote_identifier(in_synonym), '.', sys.quote_identifier(v_table), ' AS SELECT * FROM ', sys.quote_identifier(in_db_name), '.', sys.quote_identifier(v_table) ); PREPARE create_view_stmt FROM @create_view_stmt; EXECUTE create_view_stmt; DEALLOCATE PREPARE create_view_stmt;  SET v_views_created = v_views_created + 1; END LOOP; CLOSE c_table_names;  SELECT CONCAT( 'Created ', v_views_created, ' view', IF(v_views_created != 1, 's', ''), ' in the ', sys.quote_identifier(in_synonym), ' database' ) AS summary;  END
          EXTERNAL_NAME: NULL
      EXTERNAL_LANGUAGE: NULL
        PARAMETER_STYLE: SQL
        IS_DETERMINISTIC: NO
        SQL_DATA_ACCESS: MODIFIES SQL DATA
                SQL_PATH: NULL
          SECURITY_TYPE: INVOKER
                CREATED: 2017-07-06 12:43:53
            LAST_ALTERED: 2017-07-06 12:43:53
                SQL_MODE: 
        ROUTINE_COMMENT: 
Description

Takes a source database name and synonym name, and then creates the 
synonym database with views that point to all of the tables within
the source database.

......

                DEFINER: mysql.sys@localhost
    CHARACTER_SET_CLIENT: utf8
    COLLATION_CONNECTION: utf8_general_ci
      DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)

上一篇:REFERENTIAL_CONSTRAINTS表 |下一篇:SCHEMATA表

Clone this wiki locally