mysql copy复制_闲话Mysql之数据的深拷贝与浅拷贝

工作中我们所接触到的数据库呢其中所含有的数据量往往是非常大的,跟平时我们自己练习的时候的样本数据完全不是一个量级,而我们的工作却往往不需要查看所有的数据,只需要从表中调取特定的数据保存下来留作下次查看即可,这个也称之为“拷贝(copy)”,这个时候我们就需要使用到Mysql里面的视图功能了,即 create view语句,比如现在有这么一个表格:

我们的工作就是查看sid=01的同学的相关信息,我们就不需要每次都去用

"select * from sc where sid=01",而可以键入

create view sid_01 as

select * from sc

where sid=01;

系统自动就会永久保存一个名为sid_01的视图,如果你下次调取数据的时候直接

"select * from sid_01" 就可以了

但需要注意的一点是,视图属于表的浅拷贝,什么意思呢?就是好比,数据表A是一盒子的巧克力,上面贴这个标签A,现在创建一个视图叫a,这个a的标签也是贴在同一个盒子上面的,所以视图和表的数据变动是联动的,如果你改了数据表或者视图二者当中任意一方的数据,另外一方的数据就会跟着变动,这就是所谓的“浅拷贝”。不过当你在创建视图时create view语句中涉及了从数据表中抓取类似sum、min、max count、distinct、group by having、union(union all)之类的关键词时,view的主动更新操作(update)是不可用的,系统会报错,但是不影响表的更新。

假如我们想的是要创建一个数据和源表格不联动的视图该咋整?其实也有办法,Mysql数据库支持一种叫做临时表(temporary table)的功能,即你通过create temporary table语句从源表格拷贝数据后系统会生成一个临时的表格,下面是代码示例:

create temporary table copy1

as select * from sc

where sid=01;

这个临时的表格和视图主要有两个区别:第一,临时表格的数据和源表格的数据是不联动的;第二,临时表只存在于当前的连接,你要是退出连接的话临时表就会被系统自动清除从而释放内存。这个临时表的功能我把它叫做“临时深拷贝”。

现在又假如我们不想要它是一个临时性的表格,也不想要它的数据跟源表格是联动的,这又该咋整捏~要我说,直接干脆再建立一个新表格就好了,你可能会觉得这个很麻烦,其实创建表也可以通过快捷方法来创建的啊,比如:

create table copy1

as select * from sc

where sid=01;

这样就可以了~

一般情况啊,如果你在一段时间内只需要查看特定模块的实时数据,这个时候你就用视图功能,如果你想要看特定模块当时的数据,且就在一小段时间内反复看的话,那就用临时表功能,如果你留着长期有用么,就直接再新建一个表就可以了。以上都是本人的拙见,仅供参考哈~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用如下命令来复制order_info表(不包括数据): ``` CREATE TABLE new_order_info LIKE order_info; ``` 这条命令将在当前数据库中创建一个新表new_order_info,该表的结构完全与order_info相同,但不包含任何数据。 或者你可以使用 ``` CREATE TABLE new_order_info SELECT * FROM order_info WHERE 1=0; ``` 这样就可以创建一个新表 new_order_info,并且它的结构与order_info相同,因为WHERE 1=0 没有匹配到任何数据,所以new_order_info表里没有数据 ### 回答2: 要拷贝一个表的结构而不复制数据,可以使用MySQL的CREATE TABLE语句。通过以下步骤可以实现: 1. 使用SHOW CREATE TABLE语句来获取原始表order_info的创建语句。 ``` SHOW CREATE TABLE order_info; ``` 2. 将输出结果中的CREATE TABLE语句拷贝下来。 ``` CREATE TABLE `order_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_number` varchar(20) NOT NULL, `customer_name` varchar(50) NOT NULL, `order_date` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 3. 创建一个新的表order_info_copy,将刚才拷贝的CREATE TABLE语句作为新表的创建语句,但不需要包含AUTO_INCREMENT和数据类型后面的NOT NULL约束。 ``` CREATE TABLE order_info_copy ( id int(11), order_number varchar(20), customer_name varchar(50), order_date date ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 4. 新表order_info_copy的结构与原始表order_info相同,但没有任何数据。 现在,你已经成功地拷贝了order_info表的结构,不复制数据。注意,新表order_info_copy与原始表order_info具有相同的结构,包括表名、字段名、数据类型和约束。 ### 回答3: 要拷贝 MySQL 数据库中的 order_info 表结构,而不拷贝其中的数据,可以通过以下步骤完成: 1. 创建一个新的数据库,用于存放拷贝后的 order_info 表结构。可以使用 MySQL 的 CREATE DATABASE 语句创建一个新的数据库,例如:CREATE DATABASE new_order_info; 2. 在新的数据库中创建一个与原来 order_info 表结构一样的空表。可以使用 CREATE TABLE 语句,结构与原表一致,但不包含数据。例如: CREATE TABLE new_order_info ( order_id INT AUTO_INCREMENT, order_date DATE, customer_id INT, ... PRIMARY KEY (order_id) ); 3. 如果原表中存在索引、约束等其他对象,也需要在新表中进行相应的创建。可以使用 CREATE INDEX、ALTER TABLE 等语句在新表中添加索引、约束等。 4. 当新表结构创建完毕后,即可实现了从原表拷贝结构而不拷贝数据的目的。 需要注意的是,拷贝表结构时,要确保新表的名称、字段名称、数据类型、约束等与原表完全一致,以保证数据能够正常迁移和导入。同时,建议在进行操作前备份原表的数据,以防无法预料的错误发生。 这样,我们就成功地拷贝了 MySQL 数据库中的 order_info 表结构,而不拷贝其中的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值