mysql复制表结构与表数据实例教程

发布时间:2020-07-05编辑:脚本学堂
有关mysql复制表结构与复制表数据的方法,在mysql数据库中复制表结构会经常用到,复制表结构及数据到新表,只复制表结构到新表,复制旧表的数据到新表,需要的朋友参考下。

mysql复制表结构与表数据方法举例

1、复制表结构及数据到新表
 

create table 新表 select * from 旧表
 

将oldtable中所有的内容都拷贝过来,当然可以用delete from newtable;来删除。

缺点:
新表中没有了旧表的primary key、extra(auto_increment)等属性。需要自己用“alter”添加,而且容易搞错。

2、只复制表结构到新表
 

create table 新表 select * from 旧表 where 1=2
或create table 新表 like 旧表

3、复制旧表的数据到新表(假设两个表结构一样)
 

insert into 新表 select * from 旧表

4、复制旧表的数据到新表(假设两个表结构不一样)
 

insert into 新表(字段1,字段2,…….) select 字段1,字段2,…… from 旧表

5、将表1结构复制到表2
 

select * into 表2 from 表1 where 1=2

6、将表1内容全部复制到表2
 

select * into 表2 from 表1

7、

show create table 旧表;
 

将旧表的创建命令列出。
只需要将该命令拷贝出来,更改table的名字,即可建立一个完全一样的表。

8、mysqldump
用mysqldump将表dump出来,改名字后再导回去或者直接在命令行中运行。
mysql 中如何在同一张表中复制记录。

例1,复制完全相同的记录(条件是表结构中没有auto_increment,和uniq字段)
 

mysql> select * from president;
+————+—————+——–+———————+——-+————+————+
| last_name  | first_name    | suffix | city                | state | birth      | death      |
+————+—————+——–+———————+——-+————+————+
| Washington | George        | NULL   | Wakefield           | VA    | 1732-02-22 | 1799-12-14 |
| Adams      | John          | NULL   | Braintree           | MA    | 1735-10-30 | 1826-07-04 |
| Jefferson  | Thomas        | NULL   | Albemarle County    | VA    | 1743-04-13 | 1826-07-04 |
| Madison    | James         | NULL   | Port Conway         | VA    | 1751-03-16 | 1836-06-28 |
mysql> desc president;
+————+————-+——+—–+———+——-+
| Field      | Type        | Null | Key | Default | Extra |
+————+————-+——+—–+———+——-+
| last_name  | varchar(15) | NO   | MUL | NULL    |       |
| first_name | varchar(15) | NO   |     | NULL    |       |
| suffix     | varchar(5)  | YES  |     | NULL    |       |
| city       | varchar(20) | NO   |     | NULL    |       |
| state      | varchar(2)  | NO   |     | NULL    |       |
| birth      | date        | NO   |     | NULL    |       |
| death      | date        | YES  |     | NULL    |       |
+————+————-+——+—–+———+——-+
 

在这种情况下要在表中复制一条Washington  George 的记录,输入以下命令即可:
 

mysql> insert into president select * from president where last_name=’Washington’;

例2,新增部分字段相同的记录。
 

mysql> select * from manager;
+—-+————-+——-+————-+———-+————+———————+
| id | enable_flag | types | account     | password | location   | reg_date            |
+—-+————-+——-+————-+———-+————+———————+
|  1 |           1 |     1 | abcd        | 1234567  |            | 0000-00-00 00:00:00 |
| 13 |           1 |     2 | anonymous   | 654123   | 0100000000 | 2003-06-30 17:29:04 |

其表结构:
 

mysql> desc manager;
+————-+————-+——+—–+———————+—————-+
| Field       | Type        | Null | Key | Default             | Extra          |
+————-+————-+——+—–+———————+—————-+
| id          | int(4)      | NO   | PRI | NULL                | auto_increment |
| enable_flag | smallint(2) | NO   |     | 0                   |                |
| types       | smallint(2) | NO   |     | 0                   |                |
| account     | varchar(50) | NO   | UNI |                     |                |
| password    | varchar(50) | NO   |     |                     |                |
| location    | varchar(10) | NO   |     |                     |                |
| reg_date    | datetime    | NO   |     | 0000-00-00 00:00:00 |                |
————+————-+——+—–+———————+—————-+
 

若想通过新增一条和manager 表中的anonymous这条记录,其它字段内容相同,但名字不同的记录(account为test)。

全用方法:
因为manager表的 id字段是auto_increment,而且account字段是具有唯一性的(UNI),具体指定这两个字段的值。
 

mysql>  insert into manager select ’22′,enable_flag,types,’test’,password, location,reg_date from manager where account=’anonymous’;