MySQL复制表

2022-11-30 16:26:11 浏览数 (1)

代码语言:javascript复制
基于现有的表创建新表是一项很容易的任务。以下代码将得到tb_test表的一个副本,名为tb_test2:
代码语言:javascript复制
 mysql> create table tb_test2 select * from db_test.tb_test;     Query OK, 0 rows affected (0.03 sec)                            Records: 0  Duplicates: 0  Warnings: 0 

将向数据库增加一个相同的表tb_test2。而有的时候,可能希望只基于现有表的几个列创建一个表。通过create select语句中指定列就可以实现:

代码语言:javascript复制
mysql> describe tb_test;                                                        
 ----------- ------------------ ------ ----- --------- ----------------         
| Field     | Type             | Null | Key | Default | Extra                   
 ----------- ------------------ ------ ----- --------- ----------------         
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |        
| firstname | varchar(25)      | NO   |     | NULL    |                |        
| lastname  | varchar(25)      | NO   |     | NULL    |                |        
| email     | varchar(45)      | NO   |     | NULL    |                |        
| phone     | varchar(10)      | NO   |     | NULL    |                |        
 ----------- ------------------ ------ ----- --------- ----------------         
5 rows in set (0.01 sec)                                                        
mysql> create table tb_test2 select id, firstname, lastname, email from tb_test;
Query OK, 0 rows affected (0.03 sec)                                            
Records: 0  Duplicates: 0  Warnings: 0                                          
mysql> describe tb_test2;                                                       
 ----------- ------------------ ------ ----- --------- -------                  
| Field     | Type             | Null | Key | Default | Extra |                 
 ----------- ------------------ ------ ----- --------- -------                  
| id        | int(10) unsigned | NO   |     | 0       |       |                 
| firstname | varchar(25)      | NO   |     | NULL    |       |                 
| lastname  | varchar(25)      | NO   |     | NULL    |       |                 
| email     | varchar(45)      | NO   |     | NULL    |       |                 
 ----------- ------------------ ------ ----- --------- -------                  
4 rows in set (0.01 sec) 
代码语言:javascript复制
代码语言:javascript复制
创建临时表

有的时候,当工作在非常大的表上
时,可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录保存到一个临时表
可能更快一些,然后对这些临时表进行查询操作。可以通过使用temporary关键字和create table语句来实现。
代码语言:javascript复制
 mysql> create temporary table emp_temp select firstname, lastname from tb_test;     Query OK, 0 rows affected (0.02 sec)                                                Records: 0  Duplicates: 0  Warnings: 0 

临时表的创建与其它表一样,只是它们存储在操作系统指定的临时目录中。临时表将在你连接MySQL期间存在,当你断开时,MySQL将自动删除表并释放所有的内存空间;当然了,你也可以手动的使用drop table命令删除临时表。 查看数据库中可用的表 可以使用show tables命令完成。例如:

代码语言:javascript复制
 mysql> show tables;     
     -------------------    
    | Tables_in_db_test |   
     -------------------    
    | tb_test           |   
    | tb_test2          |   
     -------------------    
    2 rows in set (0.00 sec)

查看表结构 可以使用describe语句查看表结构,例如:

代码语言:javascript复制
mysql> describe tb_test;                                                
 ----------- ------------------ ------ ----- --------- ---------------- 
| Field     | Type             | Null | Key | Default | Extra          |
 ----------- ------------------ ------ ----- --------- ---------------- 
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| firstname | varchar(25)      | NO   |     | NULL    |                |
| lastname  | varchar(25)      | NO   |     | NULL    |                |
| email     | varchar(45)      | NO   |     | NULL    |                |
| phone     | varchar(10)      | NO   |     | NULL    |                |
 ----------- ------------------ ------ ----- --------- ---------------- 
5 rows in set (0.00 sec) 

另外,使用show命令也能得到相同的结果,例如:

代码语言:javascript复制
mysql> show columns in tb_test;                                         
 ----------- ------------------ ------ ----- --------- ---------------- 
| Field     | Type             | Null | Key | Default | Extra          |
 ----------- ------------------ ------ ----- --------- ---------------- 
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| firstname | varchar(25)      | NO   |     | NULL    |                |
| lastname  | varchar(25)      | NO   |     | NULL    |                |
| email     | varchar(45)      | NO   |     | NULL    |                |
| phone     | varchar(10)      | NO   |     | NULL    |                |
 ----------- ------------------ ------ ----- --------- ---------------- 
5 rows in set (0.00 sec) 

删除表 删除表是使用drop table语句实现的,其语法如下:

代码语言:javascript复制
 drop [temporary] table [if exists] tbl_name [, tbl_name, ...]

更改表结构 我 们会发现,我们会经常修改和改进表结构,特别是在开发初期;但是,每次进行修改时不必都先删除再重新创建表。相反,可以使用alter语句修改表的结构。 利用这个语句,可以再必要时删除、修改和增加列。和create table一样,alter table提供了很多子句、关键字和选项。这里只是会说一 些简单的使用,比如在表tb_demo表中插入一列,表示email,代码如下:

代码语言:javascript复制
 mysql> alter table tb_demo add column email varchar(45);
    Query OK, 0 rows affected (0.14 sec)                    
    Records: 0  Duplicates: 0  Warnings: 0 

新的列放在表的最后位置。不过,还可以使用适当的关键字(包括first、after和last)来控制新列的位置。如果想修改表,比如,刚刚加的email,我想加入一个not null控制,代码可以是这样的:

代码语言:javascript复制
 mysql> alter table tb_demo change email email varchar(45) not null;
    Query OK, 0 rows affected (0.11 sec)                               
    Records: 0  Duplicates: 0  Warnings: 0 

如果觉的这个email这列没有存在的必要了,可以使用下面的代码删除它,例如:

代码语言:javascript复制
 mysql> alter table tb_demo drop email;  
    Query OK, 0 rows affected (0.09 sec)    
    Records: 0  Duplicates: 0  Warnings: 0 

0 人点赞