最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL實操指南之復(fù)制表及數(shù)據(jù)復(fù)制全解析

 更新時間:2026年04月21日 09:18:30   作者:君九@DBA  
在MySQL日常開發(fā)和運(yùn)維中,復(fù)制表和復(fù)制數(shù)據(jù)是高頻操作,本文就來帶大家吃透MySQL復(fù)制表和復(fù)制數(shù)據(jù)的所有常用語法,結(jié)合實操案例拆解,新手也能快速上手,再也不用踩坑

在MySQL日常開發(fā)和運(yùn)維中,復(fù)制表和復(fù)制數(shù)據(jù)是高頻操作——比如備份表數(shù)據(jù)、創(chuàng)建測試表、同步核心表結(jié)構(gòu)及數(shù)據(jù)等場景,都離不開相關(guān)語法。其中create table xxx select * from aaa;是最常用的復(fù)制表方式,但很多同學(xué)只知其然,不知其所以然,比如復(fù)制后主鍵、索引會丟失嗎?如何只復(fù)制結(jié)構(gòu)不復(fù)制數(shù)據(jù)?如何只復(fù)制部分?jǐn)?shù)據(jù)?

今天這篇博客,就帶大家吃透MySQL復(fù)制表和復(fù)制數(shù)據(jù)的所有常用語法,結(jié)合實操案例拆解,新手也能快速上手,再也不用踩坑!

一、最常用:create table xxx select * from aaa(復(fù)制表+數(shù)據(jù))

先從大家最熟悉的語法入手——create table xxx select * from aaa;,這行代碼的核心作用是:創(chuàng)建一張新表xxx,同時將原表aaa的所有結(jié)構(gòu)(字段名、字段類型)和所有數(shù)據(jù),完整復(fù)制到新表中。

1. 實操案例(直接可用)

假設(shè)我們有一張用戶表user_info,結(jié)構(gòu)和數(shù)據(jù)如下(大家可直接復(fù)制執(zhí)行,復(fù)現(xiàn)測試):

-- 原表:user_info
create table user_info(
    id int primary key auto_increment,
    username varchar(50) not null,
    age int,
    create_time datetime default current_timestamp
);

-- 插入測試數(shù)據(jù)
insert into user_info(username, age) values('zhangsan', 22),('lisi', 25),('wangwu', 28);

現(xiàn)在,我們用上述語法復(fù)制這張表,創(chuàng)建user_info_copy

-- 復(fù)制表結(jié)構(gòu)+所有數(shù)據(jù)
create table user_info_copy select * from user_info;

執(zhí)行后,查詢新表數(shù)據(jù),會發(fā)現(xiàn)和原表完全一致:

mysql> select * from user_info_copy;
+----+----------+-----+---------------------+
| id | username | age | create_time         |
+----+----------+-----+---------------------+
|  1 | zhangsan |  22 | 2026-04-20 10:00:00 |
|  2 | lisi     |  25 | 2026-04-20 10:00:00 |
|  3 | wangwu   |  28 | 2026-04-20 10:00:00 |
+----+----------+-----+---------------------+
3 rows in set (0.00 sec)

2. 關(guān)鍵注意點(必看避坑)

這行語法雖然簡單,但有3個容易踩坑的點,一定要記牢:

主鍵、自增、索引不會被復(fù)制:新表user_info_copy雖然字段類型和數(shù)據(jù)和原表一致,但原表的主鍵約束(primary key)、自增屬性(auto_increment)、索引(index)都會丟失。我們用desc查看表結(jié)構(gòu)就能驗證:

mysql> desc user_info_copy;
+-------------+-------------+------+-----+---------------------+-------+
| Field       | Type        | Null | Key | Default             | Extra |
+-------------+-------------+------+-----+---------------------+-------+
| id          | int         | YES  |     | NULL                |       |  -- 沒有主鍵、不自增
| username    | varchar(50) | NO   |     | NULL                |       |
| age         | int         | YES  |     | NULL                |       |
| create_time | datetime    | YES  |     | current_timestamp   |       |
+-------------+-------------+------+-----+---------------------+-------+
  • 默認(rèn)值會保留,但特殊約束可能丟失:字段的默認(rèn)值(如create_time的current_timestamp)會保留,但外鍵約束(foreign key)、唯一約束(unique)等會丟失。
  • 復(fù)制所有數(shù)據(jù),可通過where篩選:如果不想復(fù)制所有數(shù)據(jù),可在后面加where條件,只復(fù)制符合條件的數(shù)據(jù)(比如只復(fù)制age > 25的用戶):
-- 只復(fù)制age>25的數(shù)據(jù),不復(fù)制全量
create table user_info_copy2 select * from user_info where age > 25;

二、進(jìn)階用法:只復(fù)制表結(jié)構(gòu),不復(fù)制數(shù)據(jù)

很多場景下,我們只需要復(fù)制原表的結(jié)構(gòu)(字段、類型、約束),不需要復(fù)制數(shù)據(jù)(比如創(chuàng)建測試表、備用表),這時候就需要對上面的語法做一點修改——在select后面加where 1=0(1=0永遠(yuǎn)為假,不會查詢到任何數(shù)據(jù))。

1. 語法及案例

-- 只復(fù)制表結(jié)構(gòu),不復(fù)制數(shù)據(jù)(核心:where 1=0)
create table user_info_struct select * from user_info where 1=0;

執(zhí)行后,新表user_info_struct有和原表完全一致的字段結(jié)構(gòu),但沒有任何數(shù)據(jù):

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

mysql> desc user_info_struct;
+-------------+-------------+------+-----+---------------------+-------+
| Field       | Type        | Null | Key | Default             | Extra |
+-------------+-------------+------+-----+---------------------+-------+
| id          | int         | YES  |     | NULL                |       |
| username    | varchar(50) | NO   |     | NULL                |       |
| age         | int         | YES  |     | NULL                |       |
| create_time | datetime    | YES  |     | current_timestamp   |       |
+-------------+-------------+------+-----+---------------------+-------+

2. 補(bǔ)充:保留主鍵、索引的復(fù)制方式

如果想復(fù)制表結(jié)構(gòu)的同時,保留原表的主鍵、索引、自增等所有約束,上面的方法就不夠用了,這時候推薦用create table xxx like aaa;語法,這是保留完整表結(jié)構(gòu)的最優(yōu)方式。

-- 復(fù)制完整表結(jié)構(gòu)(保留主鍵、索引、自增等所有約束),不復(fù)制數(shù)據(jù)
create table user_info_like like user_info;

驗證表結(jié)構(gòu),會發(fā)現(xiàn)和原表完全一致(主鍵、自增都保留):

mysql> desc user_info_like;
+-------------+-------------+------+-----+---------------------+----------------+
| Field       | Type        | Null | Key | Default             | Extra          |
+-------------+-------------+------+-----+---------------------+----------------+
| id          | int         | NO   | PRI | NULL                | auto_increment |  -- 主鍵+自增保留
| username    | varchar(50) | NO   |     | NULL                |                |
| age         | int         | YES  |     | NULL                |                |
| create_time | datetime    | YES  |     | current_timestamp   |                |
+-------------+-------------+------+-----+---------------------+----------------+

三、單獨(dú)復(fù)制數(shù)據(jù):insert into xxx select * from aaa(表已存在)

如果新表已經(jīng)創(chuàng)建好(結(jié)構(gòu)和原表一致),我們只需要單獨(dú)復(fù)制數(shù)據(jù),就可以用insert into xxx select * from aaa;語法,這是表已存在時復(fù)制數(shù)據(jù)的核心用法。

1. 實操案例

先創(chuàng)建一張和原表結(jié)構(gòu)一致的空表(比如用上面的like語法),再復(fù)制數(shù)據(jù):

-- 1. 創(chuàng)建空表(保留完整結(jié)構(gòu))
create table user_info_data like user_info;

-- 2. 單獨(dú)復(fù)制原表所有數(shù)據(jù)到新表
insert into user_info_data select * from user_info;

執(zhí)行后,新表就會擁有和原表完全一致的數(shù)據(jù),且表結(jié)構(gòu)完整(主鍵、自增都在)。

2. 常用拓展(實用場景)

只復(fù)制部分字段:不需要復(fù)制所有字段時,指定要復(fù)制的字段(注意字段順序和類型要和新表一致):

-- 只復(fù)制username和age兩個字段的數(shù)據(jù)
insert into user_info_data(username, age) select username, age from user_info;

復(fù)制數(shù)據(jù)并去重:如果原表有重復(fù)數(shù)據(jù),復(fù)制時可加distinct去重:

-- 復(fù)制數(shù)據(jù)并去重(避免新表出現(xiàn)重復(fù)記錄)
insert into user_info_data select distinct * from user_info;

條件復(fù)制數(shù)據(jù):和之前一樣,可加where條件,只復(fù)制符合要求的數(shù)據(jù):

-- 只復(fù)制username包含"li"的用戶數(shù)據(jù)
insert into user_info_data select * from user_info where username like '%li%';

四、其他常用復(fù)制場景(補(bǔ)充)

除了上面的核心用法,還有兩個高頻場景,大家可以按需使用:

1. 跨數(shù)據(jù)庫復(fù)制表

如果需要從A數(shù)據(jù)庫復(fù)制表到B數(shù)據(jù)庫,只需在表名前加上數(shù)據(jù)庫名前綴即可:

-- 從db1數(shù)據(jù)庫的user_info,復(fù)制到db2數(shù)據(jù)庫,創(chuàng)建user_info_copy(表+數(shù)據(jù))
create table db2.user_info_copy select * from db1.user_info;

2. 復(fù)制表并修改字段(進(jìn)階)

復(fù)制表的同時,可對字段進(jìn)行簡單修改(比如修改字段名、調(diào)整默認(rèn)值),適合快速創(chuàng)建變體表:

-- 復(fù)制表,同時將username字段改為name,age字段默認(rèn)值設(shè)為18
create table user_info_modify 
select id, username as name, ifnull(age, 18) as age, create_time 
from user_info;

五、常見坑匯總(避坑必看)

整理了4個大家最容易踩的坑,看完少走彎路:

坑1:create table xxx select * from aaa 不復(fù)制主鍵、索引、自增,僅復(fù)制字段和數(shù)據(jù),需保留約束用like語法。

坑2:復(fù)制數(shù)據(jù)時,新表字段類型、順序必須和select查詢的字段一致,否則會報錯(比如新表age是int,原表查詢字段是varchar)。

坑3:自增字段復(fù)制后,新表的自增起始值不會繼承原表,需要手動用alter table xxx auto_increment = 起始值調(diào)整。

坑4:復(fù)制大量數(shù)據(jù)時,盡量避免在業(yè)務(wù)高峰期執(zhí)行,會占用數(shù)據(jù)庫資源,影響業(yè)務(wù)正常運(yùn)行。

六、總結(jié)(快速選型指南)

最后用一張表格,幫大家快速理清不同場景該用哪種語法,一目了然:

需求場景推薦語法關(guān)鍵說明
復(fù)制表結(jié)構(gòu)+全量數(shù)據(jù)create table xxx select * from aaa;不保留主鍵、索引
只復(fù)制表結(jié)構(gòu)(保留所有約束)create table xxx like aaa;不復(fù)制數(shù)據(jù),保留主鍵、自增、索引
只復(fù)制表結(jié)構(gòu)(不保留約束)create table xxx select * from aaa where 1=0;不復(fù)制數(shù)據(jù),不保留約束
表已存在,單獨(dú)復(fù)制數(shù)據(jù)insert into xxx select * from aaa;可加where、distinct篩選
跨數(shù)據(jù)庫復(fù)制表create table db2.xxx select * from db1.aaa;加上數(shù)據(jù)庫名前綴

到此這篇關(guān)于MySQL實操指南之復(fù)制表及數(shù)據(jù)復(fù)制全解析的文章就介紹到這了,更多相關(guān)MySQL復(fù)制表和數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL無法重啟報錯Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解決方法

    MySQL無法重啟報錯Warning: World-writable config file ‘/etc/my.cnf’

    最近在維護(hù)公司服務(wù)器的時候,在關(guān)閉數(shù)據(jù)庫的命令發(fā)現(xiàn)mysql關(guān)不了了,提示錯誤為Warning: World-writable config file '/etc/my.cnf' is ignored,通過查找網(wǎng)上的資料終于解決了,現(xiàn)在將解決的方法分享給大家,同樣遇到這個問題的朋友們可以參考借鑒。
    2016-12-12
  • 超詳細(xì)匯總21個值得收藏的mysql優(yōu)化實踐

    超詳細(xì)匯總21個值得收藏的mysql優(yōu)化實踐

    這篇文章主要分享的是超詳細(xì)匯總21個值得收藏的mysql優(yōu)化實踐,對正在學(xué)習(xí)的同學(xué)有一定的參考價值,需要的同學(xué)可以參考一下
    2022-01-01
  • Mysql中文亂碼問題的最佳解決方法

    Mysql中文亂碼問題的最佳解決方法

    這篇文章主要介紹了Mysql中文亂碼問題的最佳解決方法,需要的朋友可以參考下
    2014-07-07
  • 詳細(xì)解讀MySQL中COUNT函數(shù)的用法

    詳細(xì)解讀MySQL中COUNT函數(shù)的用法

    這篇文章主要介紹了詳細(xì)解讀MySQL中COUNT函數(shù)的用法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Mysql中基本語句優(yōu)化的十個原則小結(jié)

    Mysql中基本語句優(yōu)化的十個原則小結(jié)

    這篇文章主要給大家總結(jié)介紹了Mysql中基本語句優(yōu)化的十個原則,通過學(xué)習(xí)與記住它們,在構(gòu)造sql時可以養(yǎng)成良好的習(xí)慣,文中介紹的相對比較詳細(xì)與簡單明了,需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • MySQL?索引從入門到精通示例詳解(核心概念、類型與實戰(zhàn)優(yōu)化)

    MySQL?索引從入門到精通示例詳解(核心概念、類型與實戰(zhàn)優(yōu)化)

    本文詳細(xì)介紹了MySQL索引的概念、類型及其在實際應(yīng)用中的優(yōu)化策略,索引可以顯著提升查詢效率,但過多的索引會增加寫操作的開銷,文章涵蓋了索引的創(chuàng)建、維護(hù)和使用技巧,幫助讀者更好地理解和應(yīng)用索引,以優(yōu)化數(shù)據(jù)庫性能,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • MySQL是怎么保證主備一致的

    MySQL是怎么保證主備一致的

    大家知道 binlog 可以用來歸檔,也可以用來做主備同步,但它的內(nèi)容是什么樣的呢?為什么備庫執(zhí)行了 binlog 就可以跟主庫保持一致了呢,本文就詳細(xì)的介紹一下
    2021-09-09
  • MySQL表鎖定問題的原因、檢測與解決方案

    MySQL表鎖定問題的原因、檢測與解決方案

    在數(shù)據(jù)庫管理系統(tǒng)中,鎖是保證數(shù)據(jù)一致性和事務(wù)隔離性的重要機(jī)制,然而,鎖的使用也可能導(dǎo)致性能問題,尤其是在高并發(fā)場景下,表鎖定(Table Locking)可能會成為系統(tǒng)的瓶頸,本文將深入探討MySQL中表鎖定的原因、如何檢測表鎖定問題,并提供有效的解決方案
    2025-01-01
  • mysql遷移達(dá)夢列長度超出定義的簡單解決方法

    mysql遷移達(dá)夢列長度超出定義的簡單解決方法

    這篇文章主要介紹了mysql遷移達(dá)夢列長度超出定義解決方法的相關(guān)資料,,在達(dá)夢數(shù)據(jù)庫中,字符串長度的存儲方式與MySQL不同,導(dǎo)致遷移過程中出現(xiàn)數(shù)據(jù)長度不足的錯誤,解決方法包括在MySQL中將varchar類型修改為varchar(10char)以強(qiáng)制字符存儲,需要的朋友可以參考下
    2024-12-12
  • MySQL和Python交互的示例

    MySQL和Python交互的示例

    這篇文章主要介紹了MySQL和Python交互的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03

最新評論

双辽市| 云龙县| 兴宁市| 墨玉县| 宣武区| 逊克县| 崇信县| 连州市| 元谋县| 溧阳市| 济宁市| 临湘市| 南川市| 吐鲁番市| 铜陵市| 古蔺县| 澄江县| 丰台区| 嘉荫县| 汾阳市| 肃宁县| 财经| 天祝| 奈曼旗| 德钦县| 双峰县| 高淳县| 九台市| 米泉市| 嘉义县| 乌审旗| 北流市| 安达市| 札达县| 班戈县| 庆云县| 紫阳县| 武平县| 奎屯市| 中牟县| 利川市|