mysql复制表的数据和结构(可跨越数据库)

转载自:    https://blog.csdn.net/luyaran/article/details/80939467

将数据从现有表复制到新的数据,在某些情况下非常有用,例如备份数据和复制生产数据进行测试。我们要想将数据从旧表复制到新表,那我们需要使用的sql案例如下:

CREATE TABLE new_table 
SELECT col, col2, col3 
FROM
    existing_table;

 

    上面的sql大致的意思就是,首先使用create table语句中指定的名称创建一个新表,完事嘞,新表的结构由SELECT语句的结果集定义,再来就是,MySQL会自动将来自SELECT语句的数据填充到新表中。大致的意思和流程就是这样了。就这个案例的sql来说,对于大多数情况是满足的,但是,我们有时候需要的仅仅是部分满足需要的数据,那么,我们要将部分数据从现有表复制到新表中,就需要在SELECT语句中使用where子句来完成操作了。大家来看个案例:


CREATE TABLE new_table 
SELECT col1, col2, col3 
FROM
    existing_table
WHERE
    conditions;

    完事,大概就差不多了。但是我们在创建之前,检查我们要创建的表是否已存在是非常重要的。 为此,我们可以在CREATE TABLE语句中使用IF NOT EXIST子句。 所以我们来看将数据从现有表复制到新的表的完整命令:


CREATE TABLE IF NOT EXISTS new_table 
SELECT col1, col2, col3 
FROM
    existing_table
WHERE
    conditions;

    还有一点我需要说明的就是,上面的声明只是复制表及其数据,它不会复制与表关联的其他的诸如索引、主键约束、外键约束触发器等数据库对象。如果需要复制这些东西的话,嘿嘿,也不是没有办法,请看如下sql:


CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;
 
INSERT new_table
SELECT * FROM existing_table;

    上面是两个sql,第一个是创建和旧表一样的一个新表,完事第二条sql就是来插入我们需要的数据的。完事大概的就记录的差不多了。因为思路比较简单哈,咱也没有弄什么实例,完事咱们再来看下跨库复制表就算是完事了哈。先来看个sql的例子:


CREATE TABLE destination_db.new_table 
LIKE source_db.existing_table;
 
INSERT destination_db.new_table 
SELECT *
FROM source_db.existing_table;

    上面共有两个sql,第一个sql通过从源数据库(source_db)复制现有表(existing_table)到目标数据库(destination_db)中创建一个新表new_table。完事第二个sql将数据从源数据库中的现有(existing_table)表复制到目标数据库中的新表。

你可能感兴趣的:(数据库)