暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 复制表结构和数据详解与示例

跟谁学编程 2021-10-22
950
MySQL 复制或克隆表是一项功能,允许我们为现有表创建复制表,包括表结构、索引、约束、默认值等。将现有表的数据复制到新表中非常有用。
我们可以使用CREATE TABLESELECT语句将现有表复制到新表,如下所示:
CREATE TABLE new_table_name
SELECT column1, column2, column3
FROM existing_table_name;
CREATE TABLE 语句会根据SELECT语句的结果集创建新的表结构,然后 MySQL 将从 SELECT 语句获取的数据填充到新创建的表中。
如果只需要将现有表中的部分数据复制到新表中,请使用WHERE 子句使用 SELECT 语句,如下所示:
CREATE TABLE new_table_name
SELECT column1, column2, column3
FROM existing_table_name
WHERE condition;
需要注意的是,以上语句只是复制表和数据。不会复制表所依赖的对象,例如索引、触发器、主键约束、外键约束等。
如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。仅仅使用CREATE TABLE … SELECT 命令,是无法实现的。我们可以参考以下两种方式实现表和数据的完全复制。

完全复制表方法一

步骤一:根据现有表直接创建复制表。
CREATE TABLE IF NOT EXISTS new_table_name LIKE existing_table_name;
mysql> CREATE TABLE clone_runoon
LIKE runoon_tbl;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table clone_runoon\G
*************************** 1. row ***************************
Table: clone_runoon
Create Table: CREATE TABLE `clone_runoon` (
`runoon_id` int(11) NOT NULL AUTO_INCREMENT,
`runoon_title` varchar(100) NOT NULL,
`runoon_author` varchar(40) NOT NULL,
`submission_date` date DEFAULT NULL,
PRIMARY KEY (`runoon_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

步骤一:从现有表中选择数据插入复制表。
INSERT new_table_name SELECT * FROM existing_table_name;
mysql> insert into clone_runoon
select * from runoon_tbl;
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> select * from clone_runoon;
+-----------+---------------+---------------+-----------------+
| runoon_id | runoon_title | runoon_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1 | 学习 PHP | 奔月教程 | 2021-10-16 |
| 2 | 学习 MySQL | 奔月教程 | 2021-10-16 |
| 3 | 学习 Java | RUNOON.COM | 2021-05-01 |
| 4 | 学习 Python | RUNOON.COM | 2016-03-06 |
+-----------+---------------+---------------+-----------------+
4 rows in set (0.00 sec)


完全复制表方法二

  • 使用 SHOW CREATE TABLE 命令获取创建数据表(CREATE TABLE) 语句,该语句包含了原数据表的结构,索引等。
  •  复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。
  • 如果你想复制表的内容,你就可以使用 INSERT INTO … SELECT 语句来实现。
步骤一:获取数据表的完整结构。
mysql> SHOW CREATE TABLE runoon_tbl \G;
*************************** 1. row ***************************
Table: runoon_tbl
Create Table: CREATE TABLE `runoon_tbl` (
`runoon_id` int(11) NOT NULL auto_increment,
`runoon_title` varchar(100) NOT NULL default '',
`runoon_author` varchar(40) NOT NULL default '',
`submission_date` date default NULL,
PRIMARY KEY (`runoon_id`),
UNIQUE KEY `AUTHOR_INDEX` (`runoon_author`)
) ENGINE=InnoDB
1 row in set (0.00 sec)

ERROR:
No query specified

步骤二:修改SQL语句的数据表名,并执行SQL语句。
mysql> CREATE TABLE `clone_tbl` (
-> `runoon_id` int(11) NOT NULL auto_increment,
-> `runoon_title` varchar(100) NOT NULL default '',
-> `runoon_author` varchar(40) NOT NULL default '',
-> `submission_date` date default NULL,
-> PRIMARY KEY (`runoon_id`),
-> UNIQUE KEY `AUTHOR_INDEX` (`runoon_author`)
-> ) ENGINE=InnoDB;
Query OK, 0 rows affected (1.80 sec)

步骤三:执行完第二步骤后,你将在数据库中创建新的克隆表 clone_tbl。 如果你想拷贝数据表的数据你可以使用 INSERT INTO… SELECT 语句来实现。
mysql> INSERT INTO clone_tbl (runoon_id,
-> runoon_title,
-> runoon_author,
-> submission_date)
-> SELECT runoon_id,runoon_title,
-> runoon_author,submission_date
-> FROM runoon_tbl;
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0

执行以上步骤后,会完整的复制表的内容,包括表结构及表数据。

长按二维码关注公众号,查阅更多教程

文章转载自跟谁学编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论