zoukankan      html  css  js  c++  java
  • 28. TRIGGERS ,29. USER_PRIVILEGES,30. VIEWS

    28. TRIGGERS

    TRIGGERS表提供有关触发器的信息。要查看有关表的触发器的信息,您必须具有该表的TRIGGER权限。

    TRIGGERS表有以下列:

    • TRIGGER_CATALOG :触发器所属目录的名称。该值始终为def。
    • TRIGGER_SCHEMA :触发器所属schema(database)的名称
    • TRIGGER_NAME :触发器名称
    • EVENT_MANIPULATION :触发事件。这是触发器激活的关联表上的操作类型。值为INSERT(已插入行),DELETE(已删除行)或UPDATE(已修改行)。
    • EVENT_OBJECT_CATALOGEVENT_OBJECT_SCHEMAEVENT_OBJECT_TABLE:如“使用触发器”中所述,每个触发器只与一个表相关联。 这些列分别表示此表所在的目录和schema(数据库)以及表名。 EVENT_OBJECT_CATALOG值始终为def。
    • ACTION_ORDER :触发器操作在具有相同EVENT_MANIPULATION和ACTION_TIMING值的同一表上的触发器列表中的序号位置。
    • ACTION_CONDITION :此值始终为NULL。
    • ACTION_STATEMENT :触发体; 也就是说,触发器激活时执行的语句。 本文使用UTF-8编码。
    • ACTION_ORIENTATION :该值始终为ROW。
    • ACTION_TIMING :触发器在触发事件之前还是之后激活。值为BEFORE或AFTER。
    • ACTION_REFERENCE_OLD_TABLE:此值始终为NULL。
    • ACTION_REFERENCE_NEW_TABLE:此值始终为NULL。
    • ACTION_REFERENCE_OLD_ROW,ACTION_REFERENCE_NEW_ROW
      分别是旧的和新的列标识符。 ACTION_REFERENCE_OLD_ROW值始终为OLD,ACTION_REFERENCE_NEW_ROW值始终为NEW。
    • CREATED :创建触发器的日期和时间。 这是在MySQL 5.7.2或更高版本中创建的触发器的TIMESTAMP(2)值(以百分之几秒为单位),对于在5.7.2之前创建的触发器为NULL。
    • SQL_MODE :创建触发器时生效的SQL模式,以及触发器执行的模式
    • DEFINER :以'user_name'@'host_name'格式创建触发器的用户的帐户。
    • CHARACTER_SET_CLIENT :创建触发器时character_set_client系统变量的会话值。
    • COLLATION_CONNECTION :创建触发器时collat​​ion_connection系统变量的会话值。
    • DATABASE_COLLATION :与触发器关联的数据库的排序规则。

    示例

    root@localhost [test] 11:27:18>CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
    Query OK, 0 rows affected (0.05 sec)
    
    root@localhost [test] 11:27:27> CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
    Query OK, 0 rows affected (0.03 sec)
    
    root@localhost [test] 11:28:12>SET @sum = 0;
    Query OK, 0 rows affected (0.00 sec)
    
    root@localhost [test] 11:28:22>INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
    Query OK, 3 rows affected (0.02 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    root@localhost [test] 11:28:28>SELECT @sum AS 'Total amount inserted';
    +-----------------------+
    | Total amount inserted |
    +-----------------------+
    |               1852.48 |
    +-----------------------+
    1 row in set (0.00 sec)
    
    
    
    root@localhost [test] 11:28:34> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA='test' AND TRIGGER_NAME='ins_sum'G
    *************************** 1. row ***************************
               TRIGGER_CATALOG: def
                TRIGGER_SCHEMA: test
                  TRIGGER_NAME: ins_sum
            EVENT_MANIPULATION: INSERT
          EVENT_OBJECT_CATALOG: def
           EVENT_OBJECT_SCHEMA: test
            EVENT_OBJECT_TABLE: account
                  ACTION_ORDER: 1
              ACTION_CONDITION: NULL
              ACTION_STATEMENT: SET @sum = @sum + NEW.amount
            ACTION_ORIENTATION: ROW
                 ACTION_TIMING: BEFORE
    ACTION_REFERENCE_OLD_TABLE: NULL
    ACTION_REFERENCE_NEW_TABLE: NULL
      ACTION_REFERENCE_OLD_ROW: OLD
      ACTION_REFERENCE_NEW_ROW: NEW
                       CREATED: 2018-08-16 11:28:12.06
                      SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
                       DEFINER: root@localhost
          CHARACTER_SET_CLIENT: utf8
          COLLATION_CONNECTION: utf8_general_ci
            DATABASE_COLLATION: utf8mb4_general_ci
    1 row in set (0.00 sec)
    
    
    root@localhost [test] 11:32:43>show triggersG
    *************************** 1. row ***************************
                 Trigger: ins_sum
                   Event: INSERT
                   Table: account
               Statement: SET @sum = @sum + NEW.amount
                  Timing: BEFORE
                 Created: 2018-08-16 11:28:12.06
                sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
                 Definer: root@localhost
    character_set_client: utf8
    collation_connection: utf8_general_ci
      Database Collation: utf8mb4_general_ci
    1 row in set (0.00 sec)
    

    29. USER_PRIVILEGES

    USER_PRIVILEGES表提供有关全局特权的信息。它从mysql.user系统表中获取其值。

    USER_PRIVILEGES表有以下列:

    • GRANTEE :授予权限的帐户的名称,格式为'user_name'@'host_name'
    • TABLE_CATALOG :目录的名称。该值始终为def。
    • PRIVILEGE_TYPE:授予的特权。该值可以是可在全局级别授予的任何特权
    • IS_GRANTABLE :如果用户具有GRANT OPTION权限,则为YES,否则为NO。输出不会将GRANT OPTION列为具有PRIVILEGE_TYPE =’GRANT OPTION’的单独行。

    Notes

    • USER_PRIVILEGES表是非标准的INFORMATION_SCHEMA表。

    以下语句不等价:

    
    mysql> select * from user_privileges;
    +-----------------------------+---------------+-------------------------+--------------+
    | GRANTEE                     | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
    +-----------------------------+---------------+-------------------------+--------------+
    | 'root'@'localhost'          | def           | SELECT                  | YES          |
    | 'root'@'localhost'          | def           | INSERT                  | YES          |
    | 'root'@'localhost'          | def           | UPDATE                  | YES          |
    | 'root'@'localhost'          | def           | DELETE                  | YES          |
    | 'root'@'localhost'          | def           | CREATE                  | YES          |
    | 'root'@'localhost'          | def           | DROP                    | YES          |
    | 'root'@'localhost'          | def           | RELOAD                  | YES          |
    | 'root'@'localhost'          | def           | SHUTDOWN                | YES          |
    | 'root'@'localhost'          | def           | PROCESS                 | YES          |
    | 'root'@'localhost'          | def           | FILE                    | YES          |
    | 'root'@'localhost'          | def           | REFERENCES              | YES          |
    | 'root'@'localhost'          | def           | INDEX                   | YES          |
    | 'root'@'localhost'          | def           | ALTER                   | YES          |
    | 'root'@'localhost'          | def           | SHOW DATABASES          | YES          |
    | 'root'@'localhost'          | def           | SUPER                   | YES          |
    | 'root'@'localhost'          | def           | CREATE TEMPORARY TABLES | YES          |
    | 'root'@'localhost'          | def           | LOCK TABLES             | YES          |
    | 'root'@'localhost'          | def           | EXECUTE                 | YES          |
    | 'root'@'localhost'          | def           | REPLICATION SLAVE       | YES          |
    | 'root'@'localhost'          | def           | REPLICATION CLIENT      | YES          |
    | 'root'@'localhost'          | def           | CREATE VIEW             | YES          |
    | 'root'@'localhost'          | def           | SHOW VIEW               | YES          |
    | 'root'@'localhost'          | def           | CREATE ROUTINE          | YES          |
    | 'root'@'localhost'          | def           | ALTER ROUTINE           | YES          |
    | 'root'@'localhost'          | def           | CREATE USER             | YES          |
    | 'root'@'localhost'          | def           | EVENT                   | YES          |
    | 'root'@'localhost'          | def           | TRIGGER                 | YES          |
    | 'root'@'localhost'          | def           | CREATE TABLESPACE       | YES          |
    | 'mysql.session'@'localhost' | def           | SUPER                   | NO           |
    | 'mysql.sys'@'localhost'     | def           | USAGE                   | NO           |
    | 'wbb'@'localhost'           | def           | USAGE                   | NO           |
    | 'wbb2'@'192.168.56.%'       | def           | USAGE                   | NO           |
    | 'bw'@'192.168.56.%'         | def           | SELECT                  | NO           |
    | 'bw'@'192.168.56.%'         | def           | INSERT                  | NO           |
    | 'bw'@'192.168.56.%'         | def           | UPDATE                  | NO           |
    | 'bw'@'192.168.56.%'         | def           | DELETE                  | NO           |
    | 'bw'@'192.168.56.%'         | def           | CREATE                  | NO           |
    | 'bw'@'192.168.56.%'         | def           | DROP                    | NO           |
    | 'bw'@'192.168.56.%'         | def           | RELOAD                  | NO           |
    | 'bw'@'192.168.56.%'         | def           | SHUTDOWN                | NO           |
    | 'bw'@'192.168.56.%'         | def           | PROCESS                 | NO           |
    | 'bw'@'192.168.56.%'         | def           | FILE                    | NO           |
    | 'bw'@'192.168.56.%'         | def           | REFERENCES              | NO           |
    | 'bw'@'192.168.56.%'         | def           | INDEX                   | NO           |
    | 'bw'@'192.168.56.%'         | def           | ALTER                   | NO           |
    | 'bw'@'192.168.56.%'         | def           | SHOW DATABASES          | NO           |
    | 'bw'@'192.168.56.%'         | def           | SUPER                   | NO           |
    | 'bw'@'192.168.56.%'         | def           | CREATE TEMPORARY TABLES | NO           |
    | 'bw'@'192.168.56.%'         | def           | LOCK TABLES             | NO           |
    | 'bw'@'192.168.56.%'         | def           | EXECUTE                 | NO           |
    | 'bw'@'192.168.56.%'         | def           | REPLICATION SLAVE       | NO           |
    | 'bw'@'192.168.56.%'         | def           | REPLICATION CLIENT      | NO           |
    | 'bw'@'192.168.56.%'         | def           | CREATE VIEW             | NO           |
    | 'bw'@'192.168.56.%'         | def           | SHOW VIEW               | NO           |
    | 'bw'@'192.168.56.%'         | def           | CREATE ROUTINE          | NO           |
    | 'bw'@'192.168.56.%'         | def           | ALTER ROUTINE           | NO           |
    | 'bw'@'192.168.56.%'         | def           | CREATE USER             | NO           |
    | 'bw'@'192.168.56.%'         | def           | EVENT                   | NO           |
    | 'bw'@'192.168.56.%'         | def           | TRIGGER                 | NO           |
    | 'bw'@'192.168.56.%'         | def           | CREATE TABLESPACE       | NO           |
    | 'wanbin'@'192.168.%'        | def           | USAGE                   | NO           |
    +-----------------------------+---------------+-------------------------+--------------+
    
    
    mysql> show grants;
    +---------------------------------------------------------------------+
    | Grants for root@localhost                                           |
    +---------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
    +---------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    

    30. VIEWS

    VIEWS表提供有关数据库中视图的信息

    VIEWS表有以下列:

    • TABLE_CATALOG :视图所属目录的名称。该值始终为def。
    • TABLE_SCHEMA :视图所属的schema(数据库)的名称
    • TABLE_NAME :视图名称
    • VIEW_DEFINITION :提供视图定义的SELECT语句。 此列包含您在SHOW CREATE VIEW生成的Create Table列中看到的大部分内容。 在SELECT之前略过单词并跳过单词WITH CHECK OPTION。 假设原始语句是:

      CREATE VIEW v AS
      SELECT s2,s1 FROM t
      WHERE s1 > 5
      ORDER BY s1
      WITH CHECK OPTION;

      然后视图定义如下所示:

      SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
    • CHECK_OPTION :CHECK_OPTION属性的值。该值是NONE,CASCADE或LOCAL之一。

    • IS_UPDATABLE :MySQL在CREATE VIEW时设置一个标志,称为视图可更新性标志。如果UPDATE和DELETE(以及类似操作)对于视图是合法的,则该标志设置为YES(true)。否则,该标志设置为NO(false)。 VIEWS表中的IS_UPDATABLE列显示此标志的状态。
      如果视图不可更新,则UPDATE,DELETE和INSERT等语句是非法的并被拒绝。 (即使视图是可更新的,也可能无法插入;有关详细信息,请参见“可更新和可插入视图”。)
      如果视图依赖于一个或多个其他视图,并且更新其中一个基础视图,则IS_UPDATABLE标志可能不可靠。无论IS_UPDATABLE值如何,服务器都会跟踪视图的可更新性,并正确拒绝对不可更新的视图的数据更改操作。如果视图的IS_UPDATABLE值由于对基础视图的更改而变得不准确,则可以通过删除并重新创建视图来更新该值。
    • DEFINER :以’user_name’@’host_name’格式创建视图的用户的帐户
    • SECURITY_TYPE :视图SQL SECURITY特性。该值是DEFINER或INVOKER之一。
    • CHARACTER_SET_CLIENT:创建视图时character_set_client系统变量的会话值。
    • COLLATION_CONNECTION:创建视图时collat​​ion_connection系统变量的会话值。

    Notes

    MySQL允许不同的sql_mode设置告诉服务器要支持的SQL语法的类型。 例如,您可以使用ANSI SQL模式来确保MySQL在查询中正确解释标准SQL并置运算符(双栏(||))。 如果您随后创建了一个连接项的视图,您可能会担心将sql_mode设置更改为与ANSI不同的值可能会导致视图无效。 但这种情况并非如此。 无论你如何编写视图定义,MySQL总是以规范的形式存储它。 下面是一个示例,显示服务器如何将双条串联运算符更改为CONCAT()函数:

    mysql> SET sql_mode = 'ANSI';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> CREATE VIEW test.v AS SELECT 'a' || 'b' as col1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from information_schema.views where table_schema='test'G
    *************************** 1. row ***************************
           TABLE_CATALOG: def
            TABLE_SCHEMA: test
              TABLE_NAME: v
         VIEW_DEFINITION: select concat('a','b') AS `col1`
            CHECK_OPTION: NONE
            IS_UPDATABLE: NO
                 DEFINER: root@localhost
           SECURITY_TYPE: DEFINER
    CHARACTER_SET_CLIENT: utf8
    COLLATION_CONNECTION: utf8_general_ci
    1 row in set (0.00 sec)
    
  • 相关阅读:
    天明闹钟开发过程3
    降低 TCP ACK 延迟造成的网络性能损失
    TCP SYN,ACK 详解
    TCP的SEQ和ACK的生成
    python之线程(threading)
    python之进程(multiprocess)
    python之发送邮件~
    python之函数参数问题(参数为可变对象)
    python之斐波那契数列递归推导在性能方面的反思
    linux中一些简便的命令之tac/comm
  • 原文地址:https://www.cnblogs.com/wanbin/p/9514624.html
Copyright © 2011-2022 走看看