MySQL 临时表

1. 作用:临时表用来保存一些 '临时数据'

2. 注意:

1) 临时表只在 '当前连接' 可见,当关闭连接时,Mysql 会 '自动删除表数据及表结构'

2) 临时表 和 普通表 用法一样,用关键字 'temporary' 予以区别

 

示例:

create temporary table temporary_test (
  tid   int,
  tname varchar(50)
);

insert into temporary_test(tid, tname) values(1, 'a');
insert into temporary_test(tid, tname) values(2, 'b');

select * from temporary_test;

drop temporary table if exists temporary_test; -- 也可手动删除

 

session2:(再开一个 SecureCRT Tab,表不存在)

select * from temporary_test;   // 查不到临时表了

 

MySQL 复制一行插入到同一个表

例如:

insert into table select * from table where primarykey=1;

想将一行复制到同一个表中(即,我希望复制表中的现有行),但我想这样做,而不必在“SELECT”之后列出所有列,因为这个表有太多列。

但当我这么做的时候,我会发现一个错误

Duplicate entry 'xxx' for key 1

 

方案1:

可以通过创建另一个表来处理这个问题,该表的列与我想要复制的记录的临时容器相同:

create table oldtable_temp like oldtable;
insert into oldtable_temp select * from oldtable where key=1;
update oldtable_tem set key=2;
insert into oldtable select * from oldtable where key=2;

 

方案2:推荐

以另一种方式更改主键

CREATE TEMPORARY TABLE tmptable SELECT * FROM table WHERE primarykey = 1;
UPDATE tmptable SET primarykey = 2 WHERE primarykey = 1;
INSERT INTO tblDest SELECT * FROM tmptable WHERE primarykey = 2;

 

方案3:

作为临时表,不应该有超过一个记录,所以您不必担心主键。

将其设置为NULL允许MySQL选择值本身,因此不存在创建重复的风险。

CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1;
UPDATE tmptable_1 SET primarykey = NULL;
INSERT INTO tblDest SELECT * FROM tmptable_1;
DROP TEMPORARY TABLE IF EXISTS tmptable_1;

 

 

参考推荐:

MySQL Key_buffer_size参数配置

MySQL Key_buffer_size参数优化

WordPress 建立数据库连接时出错解决方法

MySQL 执行 SQL 及慢查询监控

Redis 慢日志 slowlog

MongoDB 慢查询状态监控

MySQL alter 修改表、字段等信息

MySQL 修改被外键约束的数据表列值

MySQL 数据库 User表权限以及用户授权详解

MySQL 中 InnoDB 和 MyISAM 小结

MySQL 索引优化 btree hashrtree

MySQL 数据库性能优化的技巧

MySQL复制表结构、表数据

教你编写高性能的 MySQL 语法

WordPress 建立数据库连接时出错解决方法

淘宝分享:跳出MySQL的10个大坑

MySQL 数据库主从心得整理

Mysql Explain 详解