将数据从现有表复制到新的数据,在某些情况下非常有用,例如备份数据和复制生产数据进行测试。我们要想将数据从旧表复制到新表,那我们需要使用的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
)表复制到目标数据库中的新表。大致就是这么回事了。嘿嘿,今天就到这里了。
如果感觉不错的话,请多多点赞支持哦。。。