MySQL 临时表,复制记录插入同一张表
351 views
0
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;
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2021-01-20 05:20:00
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!