mysql临时表更新_MySql 临时表

今天在项目中遇到一个,当mysql的in语句中数据量很大时,建立一个临时表的例子。于是楼主整理了一下关于临时表的知识,与大家分享一下~

首先,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。

建立临时表:

CREATE TEMPORARY  TABLE temp_table (

id VARCHAR(32) NOT NULL,

NAME VARCHAR(100)

) ENGINE = MEMORY

注意最后面的ENGINE = MEMORY,其中ENGINE是数据库搜索引擎,常用的几种类型为MyISAM, MEMORY, InnoDB

1)MyISAM 管理非事物表。提供高速存储和检索,以及全文搜索能力

2)MEMORY存储引擎提供“内存中”表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表

注释:MEMORY存储引擎正式地被确定为HEAP引擎。

3)InnoDB和存储引擎提供事务安全表。这是默认的数据库表存储引擎

当然还有一种简单粗暴的方式建立临时表,直接将查询结果导入到临时表:

CREATE TEMPORARY  TABLE temp_table

ENGINE = MEMORY

SELECT * FROM `bm_sc_settlement`

创建临时表后,我们插入数据

INSERT INTO temp_table VALUES('1', 'a');

INSERT INTO temp_table VALUES('2', 'b');

INSERT INTO temp_table VALUES('3', 'c');

INSERT INTO temp_table VALUES('4', 'd');

INSERT INTO temp_table VALUES('5', 'e');

查询:

SELECT * FROM temp_table;

bf6282d91aeebaf5677c06f43142e42c.png

可以看到我们插入的结果已经放到临时表中(也可以做更新及删除操作)

此时当我们关掉mysql客户端(楼主用的SQLyog),然后重新打开。执行查询临时表操作,会提示找不到该临时表

删除临时表:

DROP TEMPORARY TABLE IF EXISTS temp_table;

临时表使用有一些限制条件:

1)在同一个query语句中,相同的临时表只能出现一次。如:

SELECT * FROM temp_table a ,temp_table b;

错误信息:ERROR 1137 (HY000): Can't reopen table: 'temp_table'

同样相同临时表不能在存储函数中出现多次,如果在一个存储函数里,用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,都会出现这个错误。

2) 不同的临时表可以出现在同一个query语句中,如临时表temp_tb1, temp_tb2:

select * from temp_tb1, temp_tb2;

3)可以复制临时表得到一个新的临时表,如:

create temporary table new_table select * from old_table;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值