真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL5.5存儲(chǔ)引擎介紹

存儲(chǔ)引擎是MySQL組件,用于處理不同類型的表的SQL操作。

InnoDB存儲(chǔ)引擎

默認(rèn)和應(yīng)用最廣泛的存儲(chǔ)引擎。支持事務(wù),具有crash-recovery特性;支持行級鎖;支持主鍵和外鍵。
InnoDB是MySQL中具有可靠性和高性能的一種通用存儲(chǔ)引擎。

優(yōu)點(diǎn):
DML操作遵循ACID模型(原子性、一致性、隔離性和持久性),支持事務(wù),支持crash-recovery特性(當(dāng)MySQL發(fā)生故障重啟后,對于InnoDB表,沒有完成的事務(wù)將通過redo日志重新進(jìn)行,已經(jīng)提交但是沒有寫到數(shù)據(jù)文件中的數(shù)據(jù),將從doublewrite buffer中重新構(gòu)建)以保護(hù)數(shù)據(jù)。

InnoDB buffer pool 緩存被訪問的表和索引信息,經(jīng)常使用的數(shù)據(jù)直接從內(nèi)存中讀取。

inserts,update,deletes操作被一種稱為change buffering的機(jī)制所優(yōu)化。InnoDB不僅允許多并發(fā)讀寫同一張表,它還會(huì)緩存發(fā)生改變的數(shù)據(jù),優(yōu)化磁盤I/O。

當(dāng)數(shù)據(jù)庫運(yùn)行大表的長時(shí)間查詢且反復(fù)訪問相同表的相同行時(shí),一種叫做Adaptive Hash Index的特性使這些查詢更快,就像數(shù)據(jù)從哈希表中查詢出來一樣。

可以壓縮表和相關(guān)的索引。

可以對性能和可用性造成很小影響地創(chuàng)建和刪除索引。

可以很快TRUNCATE掉一個(gè)file_per_table表空間,釋放出磁盤空間供操作系統(tǒng)使用,而不必釋放出僅能供InnoDB所重用的系統(tǒng)表空間。

支持行級鎖和一致性讀,提高多用戶的并發(fā)性和性能。

支持主鍵,提高查詢性能。

為了保持?jǐn)?shù)據(jù)的完整性,InnoDB也支持外鍵。

你可以將InnoDB表與MySQL其他存儲(chǔ)引擎的表自由組合在一起使用。例如,在一個(gè)SQL中,你可以關(guān)聯(lián)一張InnoDB表和一個(gè)內(nèi)存表。

在處理大量數(shù)據(jù)的時(shí)候,InnoDB引擎可以有效的發(fā)揮CPU效率和提升性能。

MyISAM存儲(chǔ)引擎

表級鎖會(huì)限制讀寫的性能,所以這個(gè)存儲(chǔ)引擎通常用于只讀或以讀為主的網(wǎng)站數(shù)據(jù)和數(shù)據(jù)倉庫配置中。

MyISAM表有下面特點(diǎn):

所有數(shù)據(jù)的值會(huì)先以低字節(jié)存儲(chǔ),這使得存放數(shù)據(jù)的機(jī)器和操作系統(tǒng)相互獨(dú)立。

所有數(shù)字鍵值會(huì)先以高字節(jié)存儲(chǔ),這樣會(huì)使索引更好地壓縮。

支持文件系統(tǒng)和操作系統(tǒng)上面的大文件(63位文件長度)。

MyISAM表中行數(shù)的限制是(232)2 (1.844E+19)。

每張MyISAM表最多可以創(chuàng)建64個(gè)索引,聯(lián)合索引做多支持16個(gè)字段。

最大鍵長度為1000字節(jié),這個(gè)可以通過源碼重新編譯。如果想讓一個(gè)鍵的長度大于250字節(jié),需要使用大于默認(rèn)1024字節(jié)的鍵塊。

當(dāng)行按順序插入到MyISAM表中的時(shí)候,例如你使用了AUTO_INCREMENT字段,索引樹會(huì)被分割,高節(jié)點(diǎn)會(huì)只包含一個(gè)鍵值,這會(huì)提高索引樹空間的利用。

支持每個(gè)表AUTO INCREMENT字段的內(nèi)部處理。MyISAM會(huì)自動(dòng)更新這個(gè)字段的插入和更新操作。這使得AUTO INCREMENT字段序列處理能力更快(至少10%)。當(dāng)序列被刪除后,序列的最高值不會(huì)被重用。

當(dāng)MYISAM表的delete操作和update和update操作同時(shí)存在時(shí),會(huì)在表中產(chǎn)生碎片,動(dòng)態(tài)分配大小的行可以有效減少碎片。這個(gè)是數(shù)據(jù)庫通過把已刪除的相鄰行合并在一起以及擴(kuò)展刪除的塊自動(dòng)實(shí)現(xiàn)的。

MyISAM表支持并發(fā)插入。如果一張表沒有空閑的數(shù)據(jù)塊了,你可以在其他線程正在讀這張表的同時(shí),插入新的行到這張表中。

你可以把數(shù)據(jù)文件和索引文件放在不同的物理設(shè)備上,這樣可以提高對表的讀寫速度。

--在不同的路徑下指定分區(qū)表的不同分區(qū)位置
mysql> create table t_partition(id int,name varchar(30),adate date) engine=myisam
    -> partition by list(year(adate))
    -> (
    ->   PARTITION p1999 VALUES IN (1995, 1999, 2003)
    ->     DATA DIRECTORY = '/appdata/95/data'
    ->     INDEX DIRECTORY = '/appdata/95/idx',
    ->   PARTITION p2000 VALUES IN (1996, 2000, 2004)
    ->     DATA DIRECTORY = '/appdata/96/data'
    ->     INDEX DIRECTORY = '/appdata/96/idx',
    ->   PARTITION p2001 VALUES IN (1997, 2001, 2005)
    ->     DATA DIRECTORY = '/appdata/97/data'
    ->     INDEX DIRECTORY = '/appdata/97/idx',
    ->   PARTITION p2002 VALUES IN (1998, 2002, 2006)
    ->     DATA DIRECTORY = '/appdata/98/data'
    ->     INDEX DIRECTORY = '/appdata/98/idx'
    -> ) ;
Query OK, 0 rows affected (0.11 sec)

mysql> insert into t_partition values(100,'Neo',date'2016-04-12');
ERROR 1526 (HY000): Table has no partition for value 2016
mysql> insert into t_partition values(100,'Neo',date'1995-04-12');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_partition values(200,'Tom',date'1997-04-12');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_partition;
+------+------+------------+
| id   | name | adate      |
+------+------+------------+
|  100 | Neo  | 1995-04-12 |
|  200 | Tom  | 1997-04-12 |
+------+------+------------+
2 rows in set (0.06 sec)

[root@localhost data]# ls /appdata/95/data/
t_partition#P#p1999.MYD
[root@localhost data]# ls /appdata/95/idx/
t_partition#P#p1999.MYI
[root@localhost data]# ls /appdata/97/data/
t_partition#P#p2001.MYD
[root@localhost data]# ls /appdata/97/idx/
t_partition#P#p2001.MYI
[root@localhost data]# ls /appdata/98/idx/
t_partition#P#p2002.MYI
[root@localhost data]# ls /appdata/98/data
t_partition#P#p2002.MYD

可以為BLOB和TEXT創(chuàng)建索引。

索引字段可以包括空值,每個(gè)鍵占據(jù)0到1字節(jié)。

每個(gè)字符字段可以使用不同的字符集。

在MyISAM索引文件中有一個(gè)標(biāo)識,這個(gè)標(biāo)識可以判斷表是否正確關(guān)閉。如果mysqld啟動(dòng)服務(wù)的時(shí)候帶上了--myisam-recover-options 參數(shù),當(dāng)數(shù)據(jù)庫打開的時(shí)候,MyISAM表會(huì)自動(dòng)檢查,當(dāng)MyISAM表沒有正確關(guān)閉的時(shí)候會(huì)自動(dòng)修復(fù)。

可以通過 myisamchk 工具來檢查MyISAM表。

可以通過myisampack工具來壓縮BLOB和VARCHAR字段。

支持真VARCHAR類型,一個(gè)VARCHAR字段可以存儲(chǔ)一個(gè)或兩個(gè)字節(jié)。

帶有VARCHAR字段的表可以有固定或動(dòng)態(tài)的行長。

--創(chuàng)建測試表

mysql> create table t_myd5(id int,v1 char(10)) engine=myisam;
Query OK, 0 rows affected (0.83 sec)

mysql> show table status like 't_myd5'\G
*************************** 1. row ***************************
           Name: t_myd5
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 9851624184872959
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2016-04-13 06:03:53
    Update_time: 2016-04-13 06:03:53
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.08 sec)

mysql> create table t_myd6(id int,v1 char(10)) row_format=fixed engine=myisam;
Query OK, 0 rows affected (0.01 sec)

mysql> show table status like 't_myd6'\G
*************************** 1. row ***************************
           Name: t_myd6
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 9851624184872959
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2016-04-13 06:05:47
    Update_time: 2016-04-13 06:05:47
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: row_format=FIXED
        Comment: 
1 row in set (0.02 sec)

mysql> create table t_myd7(id int,v1 char(10)) row_format=dynamic engine=myisam;
Query OK, 0 rows affected (0.06 sec)

mysql> show table status like 't_myd7'\G
*************************** 1. row ***************************
           Name: t_myd7
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 281474976710655
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2016-04-13 06:08:13
    Update_time: 2016-04-13 06:08:13
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: row_format=DYNAMIC
        Comment: 
1 row in set (0.00 sec)

在一張表中,VARCHAR或CHAR字段總長度為64K。

--創(chuàng)建測試表
mysql> create table t_myd2(id int) engine=myisam;
Query OK, 0 rows affected (0.07 sec)

--查看創(chuàng)建的數(shù)據(jù)文件,.frm文件存放表結(jié)構(gòu)文件,.MYI文件存放索引文件,.MYD文件存放數(shù)據(jù)文件
[root@localhost fire]# ls -trl
total 656
-rw-rw----. 1 mysql mysql   8556 Apr 12 00:28 t_myd2.frm
-rw-rw----. 1 mysql mysql   1024 Apr 12 00:28 t_myd2.MYI
-rw-rw----. 1 mysql mysql      0 Apr 12 00:28 t_myd2.MYD

MEMORY存儲(chǔ)引擎

將所有的數(shù)據(jù)存放在內(nèi)存(RAM)中,應(yīng)用的場景:非關(guān)鍵數(shù)據(jù)實(shí)現(xiàn)快速訪問。這個(gè)存儲(chǔ)引擎原來被稱為HEAP引擎。它的應(yīng)用場合在減少,因?yàn)镮nnoDB可以通過buffer pool memory將大多數(shù)的數(shù)據(jù)保留在內(nèi)存中,并且更加的可靠安全;同時(shí)NDBCLUSTER對大的數(shù)據(jù)集提供了基于鍵值的快速查詢。

這個(gè)存儲(chǔ)引擎適合存放短暫、非核心的數(shù)據(jù),當(dāng)MySQL服務(wù)器停止或重啟時(shí),內(nèi)存中的數(shù)據(jù)將會(huì)丟失。

它可以實(shí)現(xiàn)數(shù)據(jù)的快速訪問和低延遲,可以將數(shù)據(jù)完全加載到內(nèi)存中,而不會(huì)導(dǎo)致操作系統(tǒng)虛擬內(nèi)存頁的交換。

它適合只讀或以讀為主的數(shù)據(jù)訪問模式(數(shù)據(jù)更新很少)。

它默認(rèn)使用哈希索引,而不是B+樹索引。

內(nèi)存表最大的容量不能超過max_heap_table_size這個(gè)系統(tǒng)參數(shù),默認(rèn)值時(shí)16MB。

雖然Memory存儲(chǔ)引擎速度非???,但在使用上還是有一定的限制。比如,其只支持表鎖,并發(fā)性能較差,并且不支持TEXT和BLOB列類型。最重要的是,存儲(chǔ)變長字段(varchar)時(shí)是按照字段(char)的方式進(jìn)行的,因此會(huì)浪費(fèi)內(nèi)存。此外有一點(diǎn)常被忽視的是,MySQL數(shù)據(jù)庫使用Memory存儲(chǔ)引擎作為臨時(shí)表來存放查詢的中間結(jié)果集(intermediate result)。如果中間結(jié)果集大于Memory存儲(chǔ)引擎表的容量設(shè)置,又或者中間結(jié)果含有TEXT或BLOB列類型字段,則MySQL數(shù)據(jù)庫會(huì)把其轉(zhuǎn)換到MyISAM存儲(chǔ)引擎表而存放到磁盤。MyISAM不緩存數(shù)據(jù)文件,因此這時(shí)產(chǎn)生的臨時(shí)表的性能對于查詢會(huì)有損失。

CSV存儲(chǔ)引擎

使用這個(gè)存儲(chǔ)引擎的表實(shí)際上是用逗號分隔的文本文件。CSV表可以讓你以CSV格式導(dǎo)入和導(dǎo)出數(shù)據(jù)。CSV表不能創(chuàng)建索引,你可以在正常的操作時(shí)使用InnoDB表,只在導(dǎo)出和導(dǎo)出數(shù)據(jù)階段使用CSV表。

--創(chuàng)建測試表
mysql> create table t_csv1 (id int not null default 0,v1 varchar(20) not null default '') engine=csv;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t_csv1 values(1,'a');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_csv1 values(2,'b');
Query OK, 1 row affected (0.00 sec)

--查看數(shù)據(jù)文件中生成的表結(jié)構(gòu)文件(.frm)、元數(shù)據(jù)文件(.CSM)和表數(shù)據(jù)文件(.CSV)
[root@localhost firedb]# ls -trl
total 172
-rw-rw----. 1 mysql mysql  8582 Apr  9 19:09 t_csv1.frm
-rw-rw----. 1 mysql mysql    35 Apr  9 19:11 t_csv1.CSM
-rw-rw----. 1 mysql mysql    12 Apr  9 19:11 t_csv1.CSV

可以通過check語句來檢查CSV表中數(shù)據(jù)的有效性,檢查的時(shí)候會(huì)掃描字段分隔符,判斷出正確的字段以及格式不匹配的數(shù)據(jù)。

mysql> check table t_csv1;
+---------------+-------+----------+----------+
| Table         | Op    | Msg_type | Msg_text |
+---------------+-------+----------+----------+
| firedb.t_csv1 | check | status   | OK       |
+---------------+-------+----------+----------+
1 row in set (0.06 sec)

可以通過REPAIR語句來修復(fù)損壞的CSV表。這個(gè)操作會(huì)修復(fù)表中的有限數(shù)據(jù),同時(shí)表中損壞的數(shù)據(jù)將會(huì)丟失。

mysql> repair table t_csv1;
+---------------+--------+----------+----------+
| Table         | Op     | Msg_type | Msg_text |
+---------------+--------+----------+----------+
| firedb.t_csv1 | repair | status   | OK       |
+---------------+--------+----------+----------+
1 row in set (0.01 sec)

Archive存儲(chǔ)引擎

使用這個(gè)存儲(chǔ)引擎的表,數(shù)據(jù)排列緊湊而不能創(chuàng)建索引,用于存放和查詢數(shù)據(jù)量大的歷史、歸檔或安全審計(jì)信息。
Archive存儲(chǔ)引擎支持INSERT, REPLACE, and SELECT操作,不支持DELETE和UPDATE操作,也不支持排序、BLOB字段。
Archive存儲(chǔ)引擎使用行級鎖。插入的Archive表中的數(shù)據(jù)會(huì)被壓縮,Archive存儲(chǔ)引擎使用zlib數(shù)據(jù)壓縮方法。

--創(chuàng)建測試表,兩個(gè)表中存放相同的數(shù)據(jù),使用Myisam引擎的表使用了517696字節(jié),而使用Archive引擎的表使用了68904字節(jié)

mysql> create table t_mi1 engine=myisam as select * from information_schema.columns;
Query OK, 509 rows affected (0.12 sec)
Records: 509  Duplicates: 0  Warnings: 0

mysql> insert into t_mi1 select * from t_mi1;
Query OK, 509 rows affected (0.00 sec)
Records: 509  Duplicates: 0  Warnings: 0

mysql> insert into t_mi1 select * from t_mi1;
Query OK, 1018 rows affected (0.01 sec)
Records: 1018  Duplicates: 0  Warnings: 0

mysql> insert into t_mi1 select * from t_mi1;
Query OK, 2036 rows affected (0.01 sec)
Records: 2036  Duplicates: 0  Warnings: 0

mysql> show table status like 't_mi1'\G
*************************** 1. row ***************************
           Name: t_mi1
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 4072
 Avg_row_length: 127
    Data_length: 517696
Max_data_length: 281474976710655
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2016-04-11 23:55:41
    Update_time: 2016-04-11 23:55:54
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.11 sec)

mysql> create table t_arc1 engine=archive as select * from t_mi1;
Query OK, 4072 rows affected (0.21 sec)
Records: 4072  Duplicates: 0  Warnings: 0

mysql> show table status like 't_arc1'\G
*************************** 1. row ***************************
           Name: t_arc1
         Engine: ARCHIVE
        Version: 10
     Row_format: Compressed
           Rows: 4072
 Avg_row_length: 16
    Data_length: 68904
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: NULL
    Update_time: 2016-04-12 00:05:26
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.20 sec)

--查看創(chuàng)建的表文件,表的定義文件是.frm文件,實(shí)際存放數(shù)據(jù)的文件是.ARZ文件
[root@localhost fire]# ls -trl
total 640
-rw-rw----. 1 mysql mysql  13552 Apr 12 00:05 t_arc1.frm
-rw-rw----. 1 mysql mysql  68904 Apr 12 00:05 t_arc1.ARZ

Blackhole存儲(chǔ)引擎

這個(gè)存儲(chǔ)引擎接受數(shù)據(jù)的插入但是并不儲(chǔ)存數(shù)據(jù),有點(diǎn)類似Unix下的/dev/null設(shè)備。對Blackhole表的查詢通常返回值為空。Blackhole表可以用在復(fù)制的配置中,當(dāng)DML語句發(fā)送到備用服務(wù)器時(shí),主服務(wù)器不保存它自己的數(shù)據(jù)拷貝。
Blackhole存儲(chǔ)引擎支持各種索引。插入到Blackhole表的數(shù)據(jù)將不會(huì)存在于此表中,但是如果數(shù)據(jù)庫開啟了二進(jìn)制日志,相關(guān)的SQL語句會(huì)被記錄并復(fù)制到備用服務(wù)器。這個(gè)特性在將某個(gè)MySQL數(shù)據(jù)庫當(dāng)作中繼器或過濾器的時(shí)候很有用。

--創(chuàng)建測試表

mysql> create table t_bl1(i int,c char(10)) engine=blackhole;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t_bl1 values(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t_bl1;
Empty set (0.00 sec)

--數(shù)據(jù)文件中只有表的定義文件

[root@localhost firedb]# ls -trl
total 728
-rw-rw----. 1 mysql mysql   8578 Apr 10 06:01 t_bl1.frm

Merge存儲(chǔ)引擎

這個(gè)存儲(chǔ)引擎也被稱為MRG_MyISAM存儲(chǔ)引擎,可以將一系列具有相同列和索引的MyISAM表邏輯地組合成一個(gè)數(shù)據(jù)對象,對于數(shù)據(jù)倉庫環(huán)境很有用。當(dāng)要組合的表中的列的順序不一致時(shí),不能使用Merge存儲(chǔ)引擎。和Merge表相對應(yīng)的是分區(qū)表,分區(qū)表將單個(gè)表中的數(shù)據(jù)存放到不同的文件中。

--創(chuàng)建兩張結(jié)構(gòu)相同的Mysiam表

mysql> create table t_mg1 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
Query OK, 0 rows affected (0.06 sec)

mysql> create table t_mg2 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t_mg1(v1) values('This'),('ls'),('mysl');
Query OK, 3 rows affected (0.09 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t_mg1(v1) values('This'),('ls'),('mys2');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t_mg1;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mysl |
|  4 | This |
|  5 | ls   |
|  6 | mys2 |
+----+------+
6 rows in set (0.00 sec)

mysql> insert into t_mg2(v1) values('This'),('ls'),('mys3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t_mg2(v1) values('This'),('ls'),('mys4');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t_mg1;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mysl |
|  4 | This |
|  5 | ls   |
|  6 | mys2 |
+----+------+
6 rows in set (0.00 sec)

mysql> select * from t_mg2;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mys3 |
|  4 | This |
|  5 | ls   |
|  6 | mys4 |
+----+------+
6 rows in set (0.00 sec)

--創(chuàng)建MERGE表,將之前創(chuàng)建的兩張表合并到一起

mysql> create table t_mer1(id int not null auto_increment primary key,v1 varchar(20)) engine=merge union=(t_mg1,t_mg2);
Query OK, 0 rows affected (0.06 sec)

mysql> select * from t_mer1;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mysl |
|  4 | This |
|  5 | ls   |
|  6 | mys2 |
|  1 | This |
|  2 | ls   |
|  3 | mys3 |
|  4 | This |
|  5 | ls   |
|  6 | mys4 |
+----+------+
12 rows in set (0.00 sec)

--查看創(chuàng)建的生成文件
.frm里面存放的是表結(jié)構(gòu)信息,.MRG里面存放的是數(shù)據(jù)來源于哪些表,實(shí)際上創(chuàng)建出來的MERGE表里面使用的還是源表的數(shù)據(jù)

[root@localhost firedb]# ls -trl
total 804
-rw-rw----. 1 mysql mysql   8582 Apr 10 07:10 t_mg1.frm
-rw-rw----. 1 mysql mysql   8582 Apr 10 07:10 t_mg2.frm
-rw-rw----. 1 mysql mysql   2048 Apr 10 07:11 t_mg1.MYI
-rw-rw----. 1 mysql mysql    120 Apr 10 07:11 t_mg1.MYD
-rw-rw----. 1 mysql mysql   2048 Apr 10 07:13 t_mg2.MYI
-rw-rw----. 1 mysql mysql    120 Apr 10 07:13 t_mg2.MYD
-rw-rw----. 1 mysql mysql   8582 Apr 10 07:15 t_mer1.frm
-rw-rw----. 1 mysql mysql     12 Apr 10 07:15 t_mer1.MRG

[root@localhost firedb]# cat t_mer1.MRG 
t_mg1
t_mg2

--向源表t_mg1里面插入兩條記錄,數(shù)據(jù)會(huì)直接出現(xiàn)在MERGE表t_mer1中

mysql> insert into t_mg1 values(8,'car');
Query OK, 1 row affected (0.02 sec)
mysql> insert into t_mg1(v1) values('car2');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_mg1;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mysl |
|  4 | This |
|  5 | ls   |
|  6 | mys2 |
|  8 | car  |
|  9 | car2 |
+----+------+
8 rows in set (0.00 sec)

mysql> select * from t_mer1;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mysl |
|  4 | This |
|  5 | ls   |
|  6 | mys2 |
|  8 | car  |
|  9 | car2 |
|  1 | This |
|  2 | ls   |
|  3 | mys3 |
|  4 | This |
|  5 | ls   |
|  6 | mys4 |
+----+------+
14 rows in set (0.06 sec)

--可以向MERGE表插入數(shù)據(jù),通過insert_method屬性決定向源表的哪張表插入數(shù)據(jù),insert_method last代表的是最后一張?jiān)幢?br />
mysql> alter table t_mer1 insert_method last;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from t_mg2;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mys3 |
|  4 | This |
|  5 | ls   |
|  6 | mys4 |
+----+------+
6 rows in set (0.00 sec)

mysql> insert into t_mer1(v1) values('car5')
    -> ;
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_mg2;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mys3 |
|  4 | This |
|  5 | ls   |
|  6 | mys4 |
| 10 | car5 |
+----+------+
7 rows in set (0.00 sec)

mysql> select * from t_mer1;
+----+------+
| id | v1   |
+----+------+
|  1 | This |
|  2 | ls   |
|  3 | mysl |
|  4 | This |
|  5 | ls   |
|  6 | mys2 |
|  8 | car  |
|  9 | car2 |
|  1 | This |
|  2 | ls   |
|  3 | mys3 |
|  4 | This |
|  5 | ls   |
|  6 | mys4 |
| 10 | car5 |
+----+------+
15 rows in set (0.00 sec)


MariaDB [test]> create table payment_2006(
    -> country_id smallint,
    -> payment_date datetime,
    -> amount decimal(15,2),
    -> key idx_fk_country_id(country_id))
    -> engine=myisam;
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]> create table payment_2007(
    -> country_id smallint,
    -> payment_date datetime,
    -> amount decimal(15,2),
    -> key idx__fk_country_id(country_id))
    -> engine=myisam;
Query OK, 0 rows affected (0.01 sec)

MariaDB [test]> create table payment_all(
    -> country_id smallint,
    -> payment_date datetime,
    -> amount decimal(15,2),
    -> index(country_id))
    -> engine=merge union=(payment_2006,payment_2007) insert_method=last;
Query OK, 0 rows affected (0.09 sec)

MariaDB [test]> insert into payment_2006 values(1,'2006-05-01',100000),(2,'2006-08-15',150000);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> insert into payment_2007 values(1,'2007-02-20',35000),(2,'2007-07-15',220000);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> select * from payment_2006;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2006-05-01 00:00:00 | 100000.00 |
|          2 | 2006-08-15 00:00:00 | 150000.00 |
+------------+---------------------+-----------+
2 rows in set (0.00 sec)

MariaDB [test]> select * from payment_2007;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2007-02-20 00:00:00 |  35000.00 |
|          2 | 2007-07-15 00:00:00 | 220000.00 |
+------------+---------------------+-----------+
2 rows in set (0.00 sec)

MariaDB [test]> select * from payment_all;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2006-05-01 00:00:00 | 100000.00 |
|          2 | 2006-08-15 00:00:00 | 150000.00 |
|          1 | 2007-02-20 00:00:00 |  35000.00 |
|          2 | 2007-07-15 00:00:00 | 220000.00 |
+------------+---------------------+-----------+
4 rows in set (0.00 sec)

--由于使用的是LAST方法,向MERGE表中插入數(shù)據(jù),會(huì)向建表時(shí)的最后一張表插入數(shù)據(jù)

MariaDB [test]> insert into payment_all values(3,'2006-03-31',112200);
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from payment_all;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2006-05-01 00:00:00 | 100000.00 |
|          2 | 2006-08-15 00:00:00 | 150000.00 |
|          1 | 2007-02-20 00:00:00 |  35000.00 |
|          2 | 2007-07-15 00:00:00 | 220000.00 |
|          3 | 2006-03-31 00:00:00 | 112200.00 |
+------------+---------------------+-----------+
5 rows in set (0.00 sec)

MariaDB [test]> select * from payment_2006;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2006-05-01 00:00:00 | 100000.00 |
|          2 | 2006-08-15 00:00:00 | 150000.00 |
+------------+---------------------+-----------+
2 rows in set (0.00 sec)

MariaDB [test]> select * from payment_2007;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2007-02-20 00:00:00 |  35000.00 |
|          2 | 2007-07-15 00:00:00 | 220000.00 |
|          3 | 2006-03-31 00:00:00 | 112200.00 |
+------------+---------------------+-----------+
3 rows in set (0.00 sec)

MariaDB [test]> show keys from payment_2006;
+--------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table        | Non_unique | Key_name          | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| payment_2006 |          1 | idx_fk_country_id |            1 | country_id  | A         |        NULL |     NULL | NULL   | YES  | BTREE      |         |               |
+--------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

MariaDB [test]> show keys from payment_2007;
+--------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table        | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| payment_2007 |          1 | idx__fk_country_id |            1 | country_id  | A         |        NULL |     NULL | NULL   | YES  | BTREE      |         |               |
+--------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

MariaDB [test]> show keys from payment_all;
+-------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table       | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| payment_all |          1 | country_id |            1 | country_id  | A         |        NULL |     NULL | NULL   | YES  | BTREE      |         |               |
+-------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)
Federated存儲(chǔ)引擎

這個(gè)存儲(chǔ)引擎使提供連接到其他MySQL服務(wù)器來創(chuàng)建邏輯數(shù)據(jù)庫的能力,對于分布式數(shù)據(jù)庫或數(shù)據(jù)集市很有用。

--在目標(biāo)端創(chuàng)建表
mysql> create table poll_vote(id int(10) not null auto_increment,parents_id int(10) not null,
    -> vote_count mediumint(10) not null default 0,vote_month_count mediumint(10) not null default 0,
    -> vote_month mediumint(10) not null,primary key(id),unique key ind_poll_vote_baike(parents_id,vote_month))
    -> engine=innodb auto_increment=26020 default charset=latin1;
Query OK, 0 rows affected (0.03 sec)
mysql> insert into poll_vote(parents_id,vote_count,vote_month_count,vote_month) values(10,100,100,100);
Query OK, 1 row affected (0.07 sec)

--在源端創(chuàng)建表,結(jié)構(gòu)和目標(biāo)端的表結(jié)構(gòu)一致
mysql> create table poll_vote(id int(10) not null auto_increment,parents_id int(10) not null,
    -> vote_count mediumint(10) not null default 0,vote_month_count mediumint(10) not null default 0,
    -> vote_month mediumint(10) not null,primary key(id),unique key ind_poll_vote_baike(parents_id,vote_month))
    -> engine=federated auto_increment=26020 default charset=latin1
    -> connection='mysql://test:System#2013@192.168.78.137/fire/poll_vote';
Query OK, 0 rows affected (0.08 sec)
mysql> select * from poll_vote;
+-------+------------+------------+------------------+------------+
| id    | parents_id | vote_count | vote_month_count | vote_month |
+-------+------------+------------+------------------+------------+
| 26020 |         10 |        100 |              100 |        100 |
+-------+------------+------------+------------------+------------+
1 row in set (2.01 sec)

--當(dāng)你創(chuàng)建了一張F(tuán)EDERATED表時(shí),表的定義文件(.frm文件)會(huì)存在于本地,表的實(shí)際數(shù)據(jù)文件則存放在遠(yuǎn)程數(shù)據(jù)庫服務(wù)器。
--查看創(chuàng)建出來的表
[root@localhost fire]# ls -trl
total 28
-rw-rw----. 1 mysql mysql   61 Apr 11 07:06 db.opt
-rw-rw----. 1 mysql mysql 8736 Apr 11 19:39 poll_vote.frm

連接的示例
connection='mysql://username:password@hostname:port/database/tablename'
connection='mysql://username@hostname/database/tablename'
connection='mysql://username:password@hostname/database/tablename'

使用另外一種方式創(chuàng)建表

如果你在相同的服務(wù)器上創(chuàng)建了多張F(tuán)EDERATED表,或者你想簡化創(chuàng)建FEDERATED表的流程,可以使用CREATE SERVER語句來定義要連接的服務(wù)器參數(shù)。

mysql> create server db_01 foreign data wrapper mysql 
    -> options (user 'test',password 'System#2013', host '192.168.78.137', port 3306,database 'fire');
Query OK, 1 row affected (0.07 sec)

mysql> select * from mysql.servers\G
*************************** 1. row ***************************
Server_name: db_01
       Host: 192.168.78.137
         Db: fire
   Username: test
   Password: System#2013
       Port: 3306
     Socket: 
    Wrapper: mysql
      Owner: 
1 row in set (0.00 sec)

mysql> create table poll_vote_2(id int(10) not null auto_increment,parents_id int(10) not null,
    -> vote_count mediumint(10) not null default 0,vote_month_count mediumint(10) not null default 0,
    -> vote_month mediumint(10) not null,primary key(id),unique key ind_poll_vote_baike(parents_id,vote_month))
    -> engine=federated auto_increment=26020 default charset=latin1
    -> connection='db_01/poll_vote';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from poll_vote_2;
+-------+------------+------------+------------------+------------+
| id    | parents_id | vote_count | vote_month_count | vote_month |
+-------+------------+------------+------------------+------------+
| 26020 |         10 |        100 |              100 |        100 |
+-------+------------+------------+------------------+------------+
1 row in set (0.08 sec)

當(dāng)前題目:MySQL5.5存儲(chǔ)引擎介紹
文章起源:http://weahome.cn/article/ghpcgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部