程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 關於mysql合並表的詳細介紹

關於mysql合並表的詳細介紹

編輯:關於MYSQL數據庫

mysql創建合並表和分區表有點相似,他是mysql 的一種特性,可以把多個結構相同的myisam表合並為一個虛表,存續引擎必須是merge,當從合並表中查詢就像從子表中查詢一樣,和視圖有寫相似,當創建合並表時也有自己的frm和mrg 文件。
合並表創建方法
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個子表中有相同的列時,創建合並表並不會唯一
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;
同時如果你的子表定義不一致的話,父表能創建成功,但是不能正常訪問。

合並表比非合並表含有更多的文件描述符,他的訪問其實是打開了子表,所以緩存中的數據可能對應有多個文件描述符,在合並表中雖然有可能有相同的值,但是只要查詢找到了第一個想要的值,查詢就會停止

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved