mysql复制表

http://database.51cto.com/art/201011/234776.htm

mysql拷贝表操作我们会常常用到,下面就为您详细介绍几种mysql拷贝表的方式,希望对您学习mysql拷贝表方面能够有所帮助。

假如我们有以下这样一个表:

id      username    password 
----------------------------------- 
1       admin       ************* 
2       sameer      ************* 
3       stewart     *************

  1. CREATE TABLE IF NOT EXISTS `admin` (   
  2. `id` int(6) unsigned NOT NULL auto_increment,   
  3. `username` varchar(50) NOT NULL default '',   
  4. `password` varchar(100) default NULL,   
  5. PRIMARY KEY (`id`)   
  6. ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;  

1. 下面这个语句会拷贝表结构到新表newadmin中。 (不会拷贝表中的数据)

  1. CREATE TABLE newadmin LIKE admin  
  2.  

2. 下面这个语句会拷贝数据到新表中。 注意:这个语句其实只是把select语句的结果建一个表。所以newadmin这个表不会有主键,索引。

  1. CREATE TABLE newadmin AS   
  2. (   
  3. SELECT *   
  4. FROM admin   
  5. )  
  6.  

3. 如果你要真正的复制一个表。可以用下面的语句。

  1. CREATE TABLE newadmin LIKE admin;   
  2. INSERT INTO newadmin SELECT * FROM admin;  
  3.  

4. 我们可以操作不同的数据库。

  1. CREATE TABLE newadmin LIKE shop.admin;   
  2. CREATE TABLE newshop.newadmin LIKE shop.admin;  
  3.  

5. 我们也可以拷贝一个表中其中的一些字段。

  1. CREATE TABLE newadmin AS   
  2. (   
  3. SELECT username, password FROM admin   
  4. )  
  5.  

6. 我们也可以讲新建的表的字段改名。

  1. CREATE TABLE newadmin AS   
  2. (   
  3. SELECT id, username AS uname, password AS pass FROM admin   
  4. )  
  5.  

7. 我们也可以拷贝一部分数据。

  1. CREATE TABLE newadmin AS   
  2. (   
  3. SELECT * FROM admin WHERE LEFT(username,1) = 's'   
  4. )  
  5.  

8. 我们也可以在创建表的同时定义表中的字段信息。

    1. CREATE TABLE newadmin   
    2. (   
    3. id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY   
    4. )   
    5. AS   
    6. (   
    7. SELECT * FROM admin   
    8. )  

http://blog.51yip.com/mysql/1311.html

 

mysql 复制表数据,表结构的3种方法

张映 发表于 2011-06-03

分类目录: mysql

标签:mysql复制表

什么时候我们会用到复制表?例如:我现在对一张表进行操作,但是怕误删数据,所以在同一个数据库中建一个表结构一样,表数据也一样的表,以作备份。如果用mysqldump比较麻烦,备份.MYD,.MYI这样的文件呢,操作起来也还是麻烦。

 

一,复制表结构

方法1:

  1. mysql> create table a like users;         //复制表结构  
  2. Query OK, 0 rows affected (0.50 sec)  
  3.   
  4. mysql> show tables;  
  5. +----------------+  
  6. | Tables_in_test |  
  7. +----------------+  
  8. | a              |  
  9. | users          |  
  10. +----------------+  
  11. 2 rows in set (0.00 sec)  

方法2:

  1. mysql> create table b select * from users limit 0;   //复制表结构  
  2. Query OK, 0 rows affected (0.00 sec)  
  3. Records: 0  Duplicates: 0  Warnings: 0  
  4.   
  5. mysql> show tables;  
  6. +----------------+  
  7. | Tables_in_test |  
  8. +----------------+  
  9. | a              |  
  10. | b              |  
  11. | users          |  
  12. +----------------+  
  13. 3 rows in set (0.00 sec)  

方法3:

  1. mysql> show create table users\G;          //显示创表的sql  
  2. *************************** 1. row ***************************  
  3.  Table: users  
  4. Create Table: CREATE TABLE `users` (       //改表名  
  5.  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
  6.  `user_name` varchar(60) NOT NULL DEFAULT '',  
  7.  `user_pass` varchar(64) NOT NULL DEFAULT '',  
  8.  PRIMARY KEY (`ID`)  
  9. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8  //改auto_increment  
  10. 1 row in set (0.00 sec)  

把sql语句copy出来,改一下表名和atuo_increment,然后在执行一下。

二,复制表数据,以及表结构

方法1:

  1. mysql> create table c select * from users;      //复制表的sql  
  2. Query OK, 4 rows affected (0.00 sec)  
  3. Records: 4  Duplicates: 0  Warnings: 0  

方法2:

  1. mysql> create table d select user_name,user_pass from users where id=1;  
  2. Query OK, 1 row affected (0.00 sec)  
  3. Records: 1  Duplicates: 0  Warnings: 0  

上面的2种方法,方便,快捷,灵活性强。

方法3:

先创建一个空表, INSERT INTO 新表 SELECT * FROM 旧表 ,或者

INSERT INTO 新表(字段1,字段2,…….) SELECT 字段1,字段2,…… FROM 旧表

这种方法不是很方便,也是我以前经常用的。

     

posted @ 2015-01-05 13:17  陳聽溪  阅读(162)  评论(0编辑  收藏  举报