中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL怎么復制表

發布時間:2021-12-04 09:49:31 來源:億速云 閱讀:139 作者:iii 欄目:MySQL數據庫

本篇內容介紹了“MySQL怎么復制表”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.MySQL中的外鍵

1)只能用于InnoDB表。
2)父表可以在另一個數據庫中。
3)父表中被參照的字段只要有索引就行,可以存在重復的值。
4)在“foreign key (colname) references tabname (colname)”后面加上on delete cascade,可以實現級聯刪除。
注:除了CASCADE,delete后面還可以跟著SET NULL,RESTRICT,NO ACTION等關鍵字。另外,還可以使用on update子句實現級聯更新,且兩者可以同時使用,這里不再贅述。

[@more@]
2.表類型

   MyISAM和InnoDB是MySQL中最重要的表類型。一個MyISAM表在文件系統中有三個對應的文件(tabname.frm, tabname.MYD, tabname.MYI),而一個InnoDB表則只有一個對應的文件(tabname.frm)。

 1)MyISAM

   MyISAM延伸了基本的ISAM類型,它可以在不同的操作系統和平臺之間進行移植,支持大表文件(大于4GB),允許對BLOB和TEXT列進行索引,可以對表和表索引進行壓縮(這個特性對于BLOB和TEXT字段很實用)。它還可以約束VARCHAR字段的長度,或者自動根據數據的情況進行動態調節,支持使用鍵前綴和使用完整的鍵搜索記錄。
   MySQL啟動時會自動檢查MyISAM表以防止崩潰,甚至可以在出現錯誤時進行修復。表數據文件和表索引文件可以存儲在不同的位置,甚至不同的文件系統中。即使進行大量的插入、更新和刪除操作的表,智能防碎片邏輯也能保證其高性能的協作性。

 2)InnoDB

   InnoDB是MySQL 5.1中的默認表類型,它完全兼容ACID,又擁有可以與MyISAM媲美的性能,完全支持MySQL的事務處理并且不會降低速度或性能,它也可以在不同的操作系統和體系結構之間移植。InnoDB提供行級和表級鎖定,也支持無鎖定讀操作(類似Oracle)和多版本。另外,它還提供對外鍵、提交、回顧和前滾的操作的支持。
   InnoDB支持在需要時自動在內存中創建散列索引來提高性能,還使用緩沖來提高可靠性和數據庫操作的速度。異步輸入/輸出和一系列的讀緩沖提高了數據檢索的速度,“伙伴算法”和Oracle類型的表空間可以進行文件的優化和內存的管理。

   此外,還有ISAM(主要是兼容舊版本)、HEAP(在內存中創建的臨時表)、BerkleyDB、MERGE(多個MyISAM表組合成一個單獨的表)等類型。


3.其他表修飾符

   除了TYPE外,還可以指定許多其他屬性來控制創建表的操作。

屬性            描述
AUTO_INCREMENT        第一次向AUTO_INCREMENT字段插入的值
CHECKSUM        是否儲存表校驗和(布爾值)
COMMENT            表的描述性注釋
MAX_ROWS        表中存儲的最大行數
MIN_ROWS        表中存儲的最小行數
PACK_KEYS        是否壓縮表索引(布爾值)
UNION            映射到一個單獨的MERGE表的表
DATA DIRECTORY        表數據文件的位置
INDEX DIRECTORY        表索引文件的位置


4.復制表

   MySQL中可以結合CREATE TABLE和SELECT語句來復制表。例如:

mysql> create table test_crttb
   -> (
   -> id tinyint(3),
   -> name varchar(15),
   -> primary key (id)
   -> );
Query OK, 0 rows affected (0.10 sec)

mysql> insert into test_crttb values (1, 'Adam');
Query OK, 1 row affected (0.04 sec)

mysql> insert into test_crttb values (2, 'Bob');
Query OK, 1 row affected (0.03 sec)

mysql> insert into test_crttb values (3, 'Clark');
Query OK, 1 row affected (0.03 sec)

mysql> select * from test_crttb;
+----+-------+
| id | name  |
+----+-------+
|  1 | Adam  |
|  2 | Bob   |
|  3 | Clark |
+----+-------+
3 rows in set (0.00 sec)

mysql> create table test_crttb2 select * from test_crttb;
Query OK, 3 rows affected (0.52 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test_crttb;
+----+-------+
| id | name  |
+----+-------+
|  1 | Adam  |
|  2 | Bob   |
|  3 | Clark |
+----+-------+
3 rows in set (0.00 sec)

   注意,select緊跟在“create table ...”后面,前面沒有as,這一點和Oracle不同。

   可以添加一個不成立的where條件,來創建一個結構相同的空表:

mysql> desc test_crttb;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | tinyint(3)  | NO   | PRI | 0       |       |
| name  | varchar(15) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> desc test_crttb3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | tinyint(3)  | NO   |     | 0       |       |
| name  | varchar(15) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.03 sec)

   但是,這種方法只能復制表本身,表上的鍵需要手動創建。要在復制表的同時復制表上的鍵,可以使用下面的方法:

mysql> create table test_crttb4 like test_crttb;
Query OK, 0 rows affected (0.13 sec)

mysql> show create table test_crttb;
+------------+------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------+
| Table      | Create Table

                 |
+------------+------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------+
| test_crttb | CREATE TABLE `test_crttb` (
 `id` tinyint(3) NOT NULL DEFAULT '0',
 `name` varchar(15) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+------------+------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------+
1 row in set (0.00 sec)

mysql> show create table test_crttb4;
+-------------+-----------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------+
| Table       | Create Table

                   |
+-------------+-----------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------+
| test_crttb4 | CREATE TABLE `test_crttb4` (
 `id` tinyint(3) NOT NULL DEFAULT '0',
 `name` varchar(15) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------------+-----------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------+
1 row in set (0.00 sec)

   這樣,就創建一個結構相同的空表,并帶有原表上的鍵。這時可以向其中插入原表中的記錄:

mysql> insert into test_crttb4 select * from test_crttb;
Query OK, 3 rows affected (0.24 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test_crttb4;
+----+-------+
| id | name  |
+----+-------+
|  1 | Adam  |
|  2 | Bob   |
|  3 | Clark |
+----+-------+
3 rows in set (0.00 sec)

   還可以創建一個既包含原表中的列,又包含新的列的“混合表”:

mysql> create table test_crttb5
   -> (
   -> tel smallint(15)
   -> )
   -> select * from test_crttb;
Query OK, 3 rows affected (0.16 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test_crttb5;
+------+----+-------+
| tel  | id | name  |
+------+----+-------+
| NULL |  1 | Adam  |
| NULL |  2 | Bob   |
| NULL |  3 | Clark |
+------+----+-------+
3 rows in set (0.00 sec)

   使用alter table語句的first和after子句可以調整字段的位置:

mysql> alter table test_crttb5 modify id tinyint(3) first;
Query OK, 3 rows affected (0.65 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> desc test_crttb5;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | tinyint(3)   | YES  |     | NULL    |       |
| tel   | smallint(15) | YES  |     | NULL    |       |
| name  | varchar(15)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> alter table test_crttb5 modify tel smallint(15) after name;
Query OK, 3 rows affected (0.56 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> desc test_crttb5;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | tinyint(3)   | YES  |     | NULL    |       |
| name  | varchar(15)  | YES  |     | NULL    |       |
| tel   | smallint(15) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

“MySQL怎么復制表”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天峨县| 寿宁县| 英德市| 五指山市| 左权县| 长白| 钟山县| 牟定县| 安吉县| 孟村| 临沂市| 读书| 敦化市| 晋宁县| 嘉义市| 怀宁县| 江永县| 弥勒县| 蒙自县| 佛坪县| 龙胜| 元谋县| 微博| 白朗县| 汝南县| 津市市| 霍邱县| 蚌埠市| 鹿泉市| 塔城市| 安陆市| 张家口市| 都兰县| 孟津县| 若羌县| 靖西县| 扬中市| 荔浦县| 广平县| 连云港市| 册亨县|