關(guān)于mysql合并表的詳細介紹
mysql創(chuàng)建合并表和分區(qū)表有點相似,他是mysql 的一種特性,可以把多個結(jié)構(gòu)相同的myisam表合并為一個虛表,存續(xù)引擎必須是merge,當從合并表中查詢就像從子表中查詢一樣,和視圖有寫相似,當創(chuàng)建合并表時也有自己的frm和mrg 文件。
合并表創(chuàng)建方法
create table t3(a int primary key );
create table t4(a int primary key );
create table mrg(a int primary key ) union=(t3,t4) insert_method=last;
這里需要注意,當2個子表中有相同的列時,創(chuàng)建合并表并不會唯一
mysql> select * from mrg;
+---+
| a |
+---+
| 1 |
| 2 |
| 2 |
| 3 |
| 4 |
+---+
5 rows in set (0.00 sec)
mysql> select * from t3;
+---+
| a |
+---+
| 1 |
| 2 |
+---+
2 rows in set (0.00 sec)
mysql> select * from t4;
+---+
| a |
+---+
| 2 |
| 3 |
| 4 |
+---+
3 rows in set (0.00 sec)
a=2的列在父表里面并不唯一即使你使用了PRIMARY KEY 約束也一樣。
insert_method=last選項有2個值,first 和 last 他說明插入值時是在第一個表還是最有一個,一般查詢訪問時是順序訪問union中的表順序的。
當刪除了父表,子表任然可以訪問
mysql> drop table mrg;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t3;
+---+
| a |
+---+
| 1 |
| 2 |
+---+
2 rows in set (0.00 sec);
當刪除子表父表不能訪問
mysql> drop table t3;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from mrg;
ERROR 1168 (HY000): Unable to open underlying table which is differently define
or of non-MyISAM type or doesn't exist;
同時如果你的子表定義不一致的話,父表能創(chuàng)建成功,但是不能正常訪問。
合并表比非合并表含有更多的文件描述符,他的訪問其實是打開了子表,所以緩存中的數(shù)據(jù)可能對應(yīng)有多個文件描述符,在合并表中雖然有可能有相同的值,但是只要查詢找到了第一個想要的值,查詢就會停止
相關(guān)文章
一文教你快速學(xué)會使用DDL對數(shù)據(jù)庫和表的操作
SQL是一種操作關(guān)系型數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言,今天這篇文章將詳細講述數(shù)據(jù)定義語言DDL對數(shù)據(jù)庫和表的相關(guān)操作,有感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧2023-07-07
SQLyog錯誤號碼MySQL?plugin?caching_sha2_password?could?not?
這篇文章主要介紹了SQLyog錯誤號碼?plugin?caching_sha2_password?could?not?be?loaded的解決方法,需要的朋友可以參考下2023-06-06
淺談MySQL中授權(quán)(grant)和撤銷授權(quán)(revoke)用法詳解
下面小編就為大家?guī)硪黄獪\談MySQL中授權(quán)(grant)和撤銷授權(quán)(revoke)用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
從創(chuàng)建數(shù)據(jù)庫到存儲過程與用戶自定義函數(shù)的小感
從創(chuàng)建數(shù)據(jù)庫到存儲過程與用戶自定義函數(shù)的小感,深入的學(xué)習(xí)mysql2011-09-09

