information_schema系列二(列,列權限,事件,存儲引擎)
阿新 • • 發佈:2018-12-15
排序 nod order 由於 inno sql_mod html 我想 emp
CHARACTER_OCTET_LENGTH 和CHARACTER_MAXIMUM_LENGTH大部分情況是相同的,除非是多字節字符集,一般情況下,了解這些信息也算足夠一個DBA是用了,不過個人還是比較建議使用desc來查看表結構。
2:COLUMN_PRIVILEGES
我們看一下授權信息:
第一步:授權
這個系列的文章主要是為了能夠讓自己了解MySQL5.7的一些系統表,統一做一下備註和使用,也希望分享出來讓大家能夠有一點點的受益。 1:COLUMNS 老規矩。查一下這個表,看一下記錄,由於這個是看表的結構的我們就拿qiandai數據庫的一張表作為例子。
root@localhost [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‘@‘%‘;
授權以後就會有信息出現了,一般情況這個表是空的。
root@localhost [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 老規矩看一下數據
root@localhost [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層做一些控制。大概就是這個樣子。information_schema系列二(列,列權限,事件,存儲引擎)