information_schema系列二(列,列許可權,事件,儲存引擎)
阿新 • • 發佈:2018-12-15
information_schema系列二(列,列許可權,事件,儲存引擎)
這個系列的文章主要是為了能夠讓自己瞭解MySQL5.7的一些系統表,統一做一下備註和使用,也希望分享出來讓大家能夠有一點點的受益。 1:COLUMNS 老規矩。查一下這個表,看一下記錄,由於這個是看錶的結構的我們就拿qiandai資料庫的一張表作為例子。[email protected] [information_schema]>select * from COLUMNS where TABLE_SCHEMA='qiandai' and TABLE_NAME= 'articles'\G; *************************** 1. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: qiandai TABLE_NAME: articles COLUMN_NAME: FTS_DOC_ID ORDINAL_POSITION: 1 COLUMN_DEFAULT: NULL IS_NULLABLE: NO DATA_TYPE: bigint CHARACTER_MAXIMUM_LENGTH: NULL CHARACTER_OCTET_LENGTH: NULL NUMERIC_PRECISION: 20 NUMERIC_SCALE: 0 DATETIME_PRECISION: NULL CHARACTER_SET_NAME: NULL COLLATION_NAME: NULL COLUMN_TYPE: bigint(20) unsigned COLUMN_KEY: PRI EXTRA: auto_increment PRIVILEGES: select,insert,update,references COLUMN_COMMENT: GENERATION_EXPRESSION: *************************** 2. row ***************************
我們可以通過TABLE_SCHEMA和TABLE_NAME定位到某一張表進行檢視,這樣還是很方便能看到一張表的記錄的,不過如果要查看錶結構的話我們一板也可以通過以下兩種方式檢視: show create table tablename desc tablename 以上兩種方式都可以滿足基本的查看錶結構的需求,為什麼還要有一張系統表來記錄呢,首先這個表更加的全面,其次MySQL本身內部也是要有一個統計資訊來統計列的。我們看一下這個表記錄的資訊,欄位名,所屬於的型別,屬於哪張表,在表中建立的時候排序是第幾位等資訊。貼一下官網對於這張表的解釋:
INFORMATION_SCHEMA Name | SHOW Name | Remarks |
TABLE_CATALOG | def | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | Field | |
ORDINAL_POSITION | see notes | |
COLUMN_DEFAULT | Default | |
IS_NULLABLE | Null | |
DATA_TYPE | Type | |
CHARACTER_MAXIMUM_LENGTH | Type | |
CHARACTER_OCTET_LENGTH | ||
NUMERIC_PRECISION | Type | |
NUMERIC_SCALE | Type | |
DATETIME_PRECISION | Type | |
CHARACTER_SET_NAME | ||
COLLATION_NAME | Collation | |
COLUMN_TYPE | Type | MySQL extension |
COLUMN_KEY | Key | MySQL extension |
EXTRA | Extra | MySQL extension |
PRIVILEGES | Privileges | MySQL extension |
COLUMN_COMMENT | Comment | MySQL extension |
GENERATION_EXPRESSION | MySQL extension |
grant select on qiandai.articles(title) to 'replication'@'%';
授權以後就會有資訊出現了,一般情況這個表是空的。
[email protected] [information_schema]>select * from COLUMN_PRIVILEGES limit 10; +------------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | PRIVILEGE_TYPE | IS_GRANTABLE | +------------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | 'replication'@'172.16.88.42' | def | qiandai | articles | title | SELECT | NO | +------------------------------+---------------+--------------+------------+-------------+----------------+--------------+
我們這樣看的話很清楚就能看到表授權的使用者的物件,那張表那個庫以及授予的是什麼許可權,如果授權的時候加上with grant option的話,我們可以看得到PRIVILEGE_TYPE這個值必須是YES,篩選的時候可以根據TABLE_NAME 和COLUMN_NAME 進行篩選,比如:
select * from COLUMN_PRIVILEGES where TABLE_NAME =‘’ and COLUMN_NAME=‘’;
3:ENGINES 老規矩看一下資料
[email protected] [information_schema]>select * from ENGINES limit 10; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | ENGINE | SUPPORT | COMMENT | TRANSACTIONS | XA | SAVEPOINTS | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
引擎型別,是否支援這個引擎,描述,是否支援事物,是否支援分散式事務,是否能夠支援事物的回滾點。這個就比較簡了。不過多的解釋了。
4:EVENTS 看一下記錄吧筒子們,我只查詢一條就可以了,因為這個記錄的是MySQL的事件,一般情況我們是很少使用事件的,中間有一些加*因為是涉及到公司的東西,不過會解釋一下,在後面標註上漢字解釋。mysql> select * from EVENTS limit 1\G; *************************** 1. row *************************** EVENT_CATALOG: def EVENT_SCHEMA: ******所在的資料庫 EVENT_NAME: name 事件的名字 DEFINER: root 哪一個使用者定義的這個事件 TIME_ZONE: SYSTEM 該事件的時區,這是用於排程事件的時區,這是有效的事件中,因為它執行。預設值是系統。 EVENT_BODY: SQL MYSQL5.7這個記錄統一為SQL EVENT_DEFINITION: call day_statistic() 表示事件要做什麼操作,這個很好理解,就是啟動day_statistic這個方法,做一系列的處理 EVENT_TYPE: RECURRING 本次活動的重複型別,是ONE TIME(瞬態)或重複(重複) 。 EXECUTE_AT: NULL 單次的話就是定義的時間或最後一次修改事件,如果事件的時序由一個EVERY子句代替AT子句值就是NULL INTERVAL_VALUE: 1 對於週期性事件,該列包含事件的EVERY子句的數字部分。 INTERVAL_FIELD: DAY 對於週期性事件,該列包含管理事件的時機了EVERY子句的單位部分。如年月日天等 SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION STARTS: 2016-08-16 01:00:00 對於重複發生的事件,其定義包括STARTS子句,該列包含相應的DATETIME值。 ENDS: NULL STATUS: ENABLED 有以下三個值 ENABLED, DISABLED, or SLAVESIDE_DISABLED. ON_COMPLETION: NOT PRESERVE 是保留還是不保留 CREATED: 2016-08-15 05:11:12 LAST_ALTERED: 2016-08-15 05:11:12 LAST_EXECUTED: 2016-08-28 01:00:00 EVENT_COMMENT: 註釋文字 ORIGINATOR: 1 在其上建立事件的MySQL伺服器的伺服器ID,也就是server ID ;在複製中使用。預設值是0 CHARACTER_SET_CLIENT: utf8 COLLATION_CONNECTION: utf8_general_ci DATABASE_COLLATION: utf8_general_ci 1 row in set (0.00 sec)
好了,我們已經解釋完了,接下來看一下建立一個事件怎麼建立吧,也就給個例子:
CREATE DEFINER=`root`@`%` EVENT `money_day_statistic` ON SCHEDULE EVERY 1 DAY STARTS '2016-08-16 01:00:00' ON COMPLETION NOT PRESERVE ENABLE DO call day_statistic()
這個語句就是對應上面的查詢語句。
最後看一下上面的表結構: COLUMNS,EVENTS的儲存引擎是MyISAM,這是為了長久的儲存,不能夠重啟後就沒有啊 COLUMN_PRIVILEGES,ENGINES的儲存引擎是MEMORY,引擎也是一樣的按照版本自動可以生成,至於列為什麼會是MEMORY,我想大概是因為這樣對於許可權的控制都是在MySQL的SQL層。每次重啟應該是會從其他user表讀取到記憶體,所以他只是在SQL層做一些控制。大概就是這個樣子。 這個系列的文章主要是為了能夠讓自己瞭解MySQL5.7的一些系統表,統一做一下備註和使用,也希望分享出來讓大家能夠有一點點的受益。 1:COLUMNS 老規矩。查一下這個表,看一下記錄,由於這個是看錶的結構的我們就拿qiandai資料庫的一張表作為例子。[email protected] [information_schema]>select * from COLUMNS where TABLE_SCHEMA='qiandai' and TABLE_NAME= 'articles'\G; *************************** 1. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: qiandai TABLE_NAME: articles COLUMN_NAME: FTS_DOC_ID ORDINAL_POSITION: 1 COLUMN_DEFAULT: NULL IS_NULLABLE: NO DATA_TYPE: bigint CHARACTER_MAXIMUM_LENGTH: NULL CHARACTER_OCTET_LENGTH: NULL NUMERIC_PRECISION: 20 NUMERIC_SCALE: 0 DATETIME_PRECISION: NULL CHARACTER_SET_NAME: NULL COLLATION_NAME: NULL COLUMN_TYPE: bigint(20) unsigned COLUMN_KEY: PRI EXTRA: auto_increment PRIVILEGES: select,insert,update,references COLUMN_COMMENT: GENERATION_EXPRESSION: *************************** 2. row ***************************
我們可以通過TABLE_SCHEMA和TABLE_NAME定位到某一張表進行檢視,這樣還是很方便能看到一張表的記錄的,不過如果要查看錶結構的話我們一板也可以通過以下兩種方式檢視: show create table tablename desc tablename 以上兩種方式都可以滿足基本的查看錶結構的需求,為什麼還要有一張系統表來記錄呢,首先這個表更加的全面,其次MySQL本身內部也是要有一個統計資訊來統計列的。我們看一下這個表記錄的資訊,欄位名,所屬於的型別,屬於哪張表,在表中建立的時候排序是第幾位等資訊。貼一下官網對於這張表的解釋:
INFORMATION_SCHEMA Name | SHOW Name | Remarks |
TABLE_CATALOG | def | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | Field | |
ORDINAL_POSITION | see notes | |
COLUMN_DEFAULT | Default | |
IS_NULLABLE | Null | |
DATA_TYPE | Type | |
CHARACTER_MAXIMUM_LENGTH | Type | |
CHARACTER_OCTET_LENGTH | ||
NUMERIC_PRECISION | Type | |
NUMERIC_SCALE | Type | |
DATETIME_PRECISION | Type | |
CHARACTER_SET_NAME | ||
COLLATION_NAME | Collation | |
COLUMN_TYPE | Type | MySQL extension |
COLUMN_KEY | Key | MySQL extension |
EXTRA | Extra | MySQL extension |
PRIVILEGES | Privileges | MySQL extension |
COLUMN_COMMENT | Comment | MySQL extension |
GENERATION_EXPRESSION | MySQL extension |
grant select on qiandai.articles(title) to 'replication'@'%';
授權以後就會有資訊出現了,一般情況這個表是空的。
[email protected] [information_schema]>select * from COLUMN_PRIVILEGES limit 10; +------------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | PRIVILEGE_TYPE | IS_GRANTABLE | +------------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | 'replication'@'172.16.88.42' | def | qiandai | articles | title | SELECT | NO | +------------------------------+---------------+--------------+------------+-------------+----------------+--------------+
我們這樣看的話很清楚就能看到表授權的使用者的物件,那張表那個庫以及授予的是什麼許可權,如果授權的時候加上with grant option的話,我們可以看得到PRIVILEGE_TYPE這個值必須是YES,篩選的時候可以根據TABLE_NAME 和COLUMN_NAME 進行篩選,比如:
select * from COLUMN_PRIVILEGES where TABLE_NAME =‘’ and COLUMN_NAME=‘’;
3:ENGINES 老規矩看一下資料
[email protected] [information_schema]>select * from ENGINES limit 10; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | ENGINE | SUPPORT | COMMENT | TRANSACTIONS | XA | SAVEPOINTS | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
引擎型別,是否支援這個引擎,描述,是否支援事物,是否支援分散式事務,是否能夠支援事物的回滾點。這個就比較簡了。不過多的解釋了。
4:EVENTS 看一下記錄吧筒子們,我只查詢一條就可以了,因為這個記錄的是MySQL的事件,一般情況我們是很少使用事件的,中間有一些加*因為是涉及到公司的東西,不過會解釋一下,在後面標註上漢字解釋。mysql> select * from EVENTS limit 1\G; *************************** 1. row *************************** EVENT_CATALOG: def EVENT_SCHEMA: ******所在的資料庫 EVENT_NAME: name 事件的名字 DEFINER: root 哪一個使用者定義的這個事件 TIME_ZONE: SYSTEM 該事件的時區,這是用於排程事件的時區,這是有效的事件中,因為它執行。預設值是系統。 EVENT_BODY: SQL MYSQL5.7這個記錄統一為SQL EVENT_DEFINITION: call day_statistic() 表示事件要做什麼操作,這個很好理解,就是啟動day_statistic這個方法,做一系列的處理 EVENT_TYPE: RECURRING 本次活動的重複型別,是ONE TIME(瞬態)或重複(重複) 。 EXECUTE_AT: NULL 單次的話就是定義的時間或最後一次修改事件,如果事件的時序由一個EVERY子句代替AT子句值就是NULL INTERVAL_VALUE: 1 對於週期性事件,該列包含事件的EVERY子句的數字部分。 INTERVAL_FIELD: DAY 對於週期性事件,該列包含管理事件的時機了EVERY子句的單位部分。如年月日天等 SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION STARTS: 2016-08-16 01:00:00 對於重複發生的事件,其定義包括STARTS子句,該列包含相應的DATETIME值。 ENDS: NULL STATUS: ENABLED 有以下三個值 ENABLED, DISABLED, or SLAVESIDE_DISABLED. ON_COMPLETION: NOT PRESERVE 是保留還是不保留 CREATED: 2016-08-15 05:11:12 LAST_ALTERED: 2016-08-15 05:11:12 LAST_EXECUTED: 2016-08-28 01:00:00 EVENT_COMMENT: 註釋文字 ORIGINATOR: 1 在其上建立事件的MySQL伺服器的伺服器ID,也就是server ID ;在複製中使用。預設值是0 CHARACTER_SET_CLIENT: utf8 COLLATION_CONNECTION: utf8_general_ci DATABASE_COLLATION: utf8_general_ci 1 row in set (0.00 sec)
好了,我們已經解釋完了,接下來看一下建立一個事件怎麼建立吧,也就給個例子:
CREATE DEFINER=`root`@`%` EVENT `money_day_statistic` ON SCHEDULE EVERY 1 DAY STARTS '2016-08-16 01:00:00' ON COMPLETION NOT PRESERVE ENABLE DO call day_statistic()
這個語句就是對應上面的查詢語句。
最後看一下上面的表結構: COLUMNS,EVENTS的儲存引擎是MyISAM,這是為了長久的儲存,不能夠重啟後就沒有啊 COLUMN_PRIVILEGES,ENGINES的儲存引擎是MEMORY,引擎也是一樣的按照版本自動可以生成,至於列為什麼會是MEMORY,我想大概是因為這樣對於許可權的控制都是在MySQL的SQL層。每次重啟應該是會從其他user表讀取到記憶體,所以他只是在SQL層做一些控制。大概就是這個樣子。