mysql復(fù)制表的幾種常用方式總結(jié)
mysql復(fù)制表的幾種方式
所描述的方法還請實際測試一下再使用.
1、復(fù)制表結(jié)構(gòu)及數(shù)據(jù)到新表
CREATE TABLE 新表SELECT * FROM 舊表
這種方法會將oldtable中所有的內(nèi)容都拷貝過來,當然我們可以用delete from newtable;來刪除。
新表中沒有了舊表的primary key、Extra(auto_increment)等屬性。需要自己用"alter"添加,而且容易搞錯。
2、只復(fù)制表結(jié)構(gòu)到新表
CREATE TABLE 新表SELECT * FROM 舊表WHERE 1=2
或CREATE TABLE 新表LIKE 舊表
3、復(fù)制舊表的數(shù)據(jù)到新表(假設(shè)兩個表結(jié)構(gòu)一樣)
INSERT INTO 新表SELECT * FROM 舊表
4、復(fù)制舊表的數(shù)據(jù)到新表(假設(shè)兩個表結(jié)構(gòu)不一樣)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 舊表
5、可以將表1結(jié)構(gòu)復(fù)制到表2
SELECT * INTO 表2 FROM 表1 WHERE 1=2
6、可以將表1內(nèi)容全部復(fù)制到表2
SELECT * INTO 表2 FROM 表1
7、 show create table 舊表;
這樣會將舊表的創(chuàng)建命令列出。我們只需要將該命令拷貝出來,更改table的名字,就可以建立一個完全一樣的表
8、mysqldump
用mysqldump將表dump出來,改名字后再導(dǎo)回去或者直接在命令行中運行
9、復(fù)制舊數(shù)據(jù)庫到新數(shù)據(jù)庫(復(fù)制全部表結(jié)構(gòu)并且復(fù)制全部表數(shù)據(jù))
#mysql -u root -ppassword >CREATE DATABASE new_db; #mysqldump old_db -u root -ppassword--skip-extended-insert --add-drop-table | mysql new_db -u root -ppassword
10、表不在同一數(shù)據(jù)庫中(如,db1 table1, db2 table2)
sql: insert into db1.table1 select * from db2.table2 (完全復(fù)制) insert into db1.table1 select distinct * from db2.table2(不復(fù)制重復(fù)紀錄) insert into tdb1.able1 select top 5 * from db2.table2 (前五條紀錄)
MySQL拷貝表的幾種方式
1、拷貝結(jié)構(gòu)-添加數(shù)據(jù)
## 拷貝結(jié)構(gòu) CREATE TABLE newTable LIKE oldTable; ## 添加數(shù)據(jù) INSERT INTO newTable SELECT * FROM oldTable;
2、拷貝結(jié)構(gòu)和數(shù)據(jù)
CREATE TABLE newTable SELECT * FROM oldTable;
注:新表中沒有了舊表的primary key、Extra(auto_increment)等屬性。需要自己用"alter"添加,而且容易搞錯。
3、拷貝部分字段和部分數(shù)據(jù)
## 拷貝部分字段 CREATE TABLE newTable AS ( SELECT 字段1, 字段2,... FROM oldTable ) ## 拷貝部分數(shù)據(jù) CREATE TABLE 新表 AS<br>(<br>SELECT * FROM 舊表 WHERE id='1'
4、不同數(shù)據(jù)庫拷貝表
CREATE TABLE newTable LIKE base1.oldTable; CREATE TABLE base1.newTable LIKE base2.oldTable;
表復(fù)制/合并查詢/外連接
1. 表復(fù)制
自我復(fù)制數(shù)據(jù)(蠕蟲復(fù)制)
有時,為了對某個sql語句進行效率測試,我們需要海量的數(shù)據(jù)時,可以使用此法為表創(chuàng)建海量數(shù)據(jù)
演示如何自我復(fù)制
思考:如何去掉一張表中的重復(fù)數(shù)據(jù)
思路:
先創(chuàng)建一張臨時表 my_tmp,該表的結(jié)構(gòu)和 my_tab02 一樣
把 my_tmp 的記錄,通過 distinct 關(guān)鍵字 處理后 , 把記錄復(fù)制到 my_tmp
清除 my_tab02 中的所有記錄
把 my_tmp 中的記錄 復(fù)制到 my_tab02 中
drop 掉臨時表 my_tmp
2. 合并查詢
有時在實際應(yīng)用中,為了合并多個 select 語句的結(jié)果,可以使用集合操作符號 union,union all
union all
該操作符用于取得兩個結(jié)果集的并集,當使用該操作符時,不會取消重復(fù)行。
union
該操作符用于取得兩個結(jié)果集的并集,當使用該操作符時,會取消重復(fù)行。
3. 外連接
左外連接:如果左側(cè)的表完全顯示我們就說是左外連接右外連接:如果右側(cè)的表完全顯示我們就說是右外連接舉例說明: 創(chuàng)建兩張表,一張存放名字,一張存放分數(shù)
要求:顯示所有人的成績,如果沒有成績,也要顯示該人的姓名和id號,成績顯示為空
若用多表查詢的方式,則無法查詢到成績?yōu)榭盏娜说慕Y(jié)果
用左外連接的方式來查找,就可以將成績?yōu)榭盏娜说拿忠诧@示出來
說明:左外連接就是左側(cè)表完全顯示,所以會把stu的內(nèi)容全部顯示出來
用右外連接的方式來查找,就可以將成績?yōu)榭盏娜说拿忠诧@示出來
說明:右外連接就是右側(cè)表完全顯示,即使和左表沒有匹配的記錄,也會把exam的內(nèi)容全部顯示出來
問題:列出部門名稱和這些部門的員工名稱和工作,同時要求顯示出那些沒有員工的部門
在實際開發(fā)中,我們絕大多數(shù)情況下使用的是內(nèi)連接
總結(jié)
到此這篇關(guān)于mysql復(fù)制表的幾種常用方式的文章就介紹到這了,更多相關(guān)mysql復(fù)制表方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql高效查詢left join和group by(加索引)
這篇文章主要給大家介紹了關(guān)于mysql高效查詢left join和group by,這個的前提是加了索引,以及如何在MySQL高效的join3個表 的相關(guān)資料,需要的朋友可以參考下2021-06-06Docker搭建MySQL并掛載數(shù)據(jù)的全過程
環(huán)境搭建費時費力,但要必不可少,這篇文章主要給大家介紹了關(guān)于Docker搭建MySQL并掛載數(shù)據(jù)的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01一文總結(jié)MySQL中數(shù)學(xué)函數(shù)有哪些
MySQL函數(shù)包括數(shù)學(xué)函數(shù)、字符串函數(shù)、日期和時間函數(shù)、條件判斷函數(shù)、系統(tǒng)信息函數(shù)、加密函數(shù)等,下面這篇文章主要給大家介紹了關(guān)于MySQL中數(shù)學(xué)函數(shù)有哪些的相關(guān)資料,需要的朋友可以參考下2023-02-02