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

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

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

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

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

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

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

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

假設我們有一張用戶表user_info,結(jié)構(gòu)和數(shù)據(jù)如下(大家可直接復制執(zhí)行,復現(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)在,我們用上述語法復制這張表,創(chuàng)建user_info_copy

-- 復制表結(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個容易踩坑的點,一定要記牢:

主鍵、自增、索引不會被復制:新表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   |       |
+-------------+-------------+------+-----+---------------------+-------+
  • 默認值會保留,但特殊約束可能丟失:字段的默認值(如create_time的current_timestamp)會保留,但外鍵約束(foreign key)、唯一約束(unique)等會丟失。
  • 復制所有數(shù)據(jù),可通過where篩選:如果不想復制所有數(shù)據(jù),可在后面加where條件,只復制符合條件的數(shù)據(jù)(比如只復制age > 25的用戶):
-- 只復制age>25的數(shù)據(jù),不復制全量
create table user_info_copy2 select * from user_info where age > 25;

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

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

1. 語法及案例

-- 只復制表結(jié)構(gòu),不復制數(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. 補充:保留主鍵、索引的復制方式

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

-- 復制完整表結(jié)構(gòu)(保留主鍵、索引、自增等所有約束),不復制數(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   |                |
+-------------+-------------+------+-----+---------------------+----------------+

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

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

1. 實操案例

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

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

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

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

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

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

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

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

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

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

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

四、其他常用復制場景(補充)

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

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

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

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

2. 復制表并修改字段(進階)

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

-- 復制表,同時將username字段改為name,age字段默認值設為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 不復制主鍵、索引、自增,僅復制字段和數(shù)據(jù),需保留約束用like語法。

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

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

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

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

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

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

到此這篇關(guān)于MySQL實操指南之復制表及數(shù)據(jù)復制全解析的文章就介紹到這了,更多相關(guān)MySQL復制表和數(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’

    最近在維護公司服務器的時候,在關(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
  • 超詳細匯總21個值得收藏的mysql優(yōu)化實踐

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

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

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

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

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

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

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

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

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

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

    MySQL是怎么保證主備一致的

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

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

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

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

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

    MySQL和Python交互的示例

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

最新評論

公主岭市| 噶尔县| 徐闻县| 祁东县| 怀宁县| 黄浦区| 介休市| 永新县| 台湾省| 多伦县| 班玛县| 永川市| 郑州市| 新巴尔虎右旗| 南宫市| 察隅县| 板桥市| 石家庄市| 安塞县| 璧山县| 伊川县| 富平县| 建水县| 宣化县| 抚顺县| 利川市| 青龙| 克什克腾旗| 龙海市| 北川| 鲜城| 新源县| 丽江市| 吉林市| 大埔区| 林芝县| 吉安市| 新竹市| 淮滨县| 通江县| 桑日县|