全局临时表

作用:高效删除,不同会话独立  
--
CREATE GLOBAL TEMPORARY  TABLE t_tmp_session on commit preserve rows 
as
select * from dba_objects where 2 =1 ;



CREATE GLOBAL TEMPORARY  TABLE t_tmp_transction on commit delete rows 
as
select * from dba_objects  where 2 =1 ;


--
insert into  t_tmp_session t 
select * from dba_objects where rownum <=500;

insert into  t_tmp_session t 
select * from dba_objects where rownum <=1200;
 
select count(*) from t_tmp_session;

--  
insert into  t_tmp_transction t 
select * from dba_objects where rownum <=600;

select count(*) from t_tmp_transction t;

 

------不指定 相当于 全局临时事务表
CREATE GLOBAL TEMPORARY  TABLE t_tmp_norm 
as
select * from dba_objects where 2 =1 ;



insert into  t_tmp_norm t 
select * from dba_objects where rownum <=500;
commit; 
select count(*) from t_tmp_norm t;

### 关于 MySQL 中全局临时表的创建与使用 在 MySQL 中,严格意义上并不存在所谓的“全局临时表”。MySQL 提供的是 **会话级别的临时表**,即通过 `CREATE TEMPORARY TABLE` 创建的表仅对当前会话可见,并且会在会话结束时自动删除[^1]。然而,在某些数据库管理系统(如 Oracle 或 SQL Server)中支持的“全局临时表”,其特性是可以被多个会话共享。 如果希望模拟全局临时表的行为,可以通过以下方法实现: #### 方法一:使用永久表作为替代方案 可以创建一个普通的永久表,并通过权限控制或其他机制确保它只在特定场景下被访问或修改。例如: ```sql -- 创建一张永久表,模拟全局临时表的功能 CREATE TABLE global_temp_table ( id INT AUTO_INCREMENT PRIMARY KEY, data_column VARCHAR(255), session_id VARCHAR(36), -- 存储会话 ID 的字段 creation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 为了使该表具有类似于全局临时表的行为,可以在每次操作前清空属于某个会话的数据: ```sql DELETE FROM global_temp_table WHERE session_id = 'your_session_id'; INSERT INTO global_temp_table (data_column, session_id) VALUES ('example_data', 'your_session_id'); SELECT * FROM global_temp_table WHERE session_id = 'your_session_id'; ``` 这种方法的优点在于它可以跨会话共享数据,缺点则是需要手动管理清理逻辑以及可能引入额外开销[^5]。 #### 方法二:借助存储过程动态生成临时表 虽然单个会话内的临时表无法直接与其他会话共享,但可以通过编写存储过程来间接达到目的。具体做法是在存储过程中定义规则,让不同用户调用同一个接口时都能获得一致的结果集。 示例代码如下所示: ```sql DELIMITER $$ CREATE PROCEDURE create_shared_temporary_table() BEGIN IF NOT EXISTS(SELECT 1 FROM information_schema.tables WHERE table_name='shared_temp') THEN CREATE TEMPORARY TABLE shared_temp( id INT AUTO_INCREMENT PRIMARY KEY, value TEXT ); END IF; END$$ DELIMITER ; ``` 需要注意的是,由于每个客户端连接都会独立执行上述命令序列,因此实际效果仍限于各自范围内生效而非真正意义上的全局范围适用情况下的解决方案[^4]。 综上所述,在标准版 MySQL 当前版本里并不具备原生支持创建所谓 “Global Temporary Tables”的能力;但是我们能够采用变通手段比如利用常规持久化对象或者程序设计技巧去满足业务需求当中涉及到此类功能的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值