创建临时表样例

Oracle8i及以上版本中可以创建两种临时表:
1.会话临时表
CREATE GLOBAL TEMPORARY TABLE_NAME (column specification)
ON COMMIT PRESERVE ROWS;

2.事务临时表
CREATE GLOBAL TEMPORARY TABLE_NAME (column specification)
ON COMMIT DELETE ROWS;
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
冲突的问题更本不用考虑.

通过CREATE GLOBAL TEMPORARY TABLE命令创建一个临时表,对于事务类型的临时表,
数据只是在事务期间存在,对于会话类型的临时表,数据在会话期间存在。

会话的数据对于当前会话私有。每个会话只能看到并修改自己的数据。DML锁不会加到
临时表的数据上。下面的语句控制行的存在性。

● ON COMMIT DELETE ROWS 表明行只是在事务期间可见
● ON COMMIT PRESERVE ROWS 表明行在整个会话期间可见

可以对临时表创建索引,视图,出发器,可以用export和import工具导入导出表的
定义,但是不能导出数据。表的定义对所有的会话可见。
Temporary Tables临时表
1.简介
ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。
2.详细介绍
Oracle临时表分为 会话级临时表 和事务级临时表。
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此,临时表不需要DML锁.当一个会话结束(用户正常退出 用户不正常退出 ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会话的
表执行 TRUNCATE 语句清空临时表数据.但不会清空其它会话临时表中的数据.
你可以索引临时表和在临时表基础上建立视图.同样,建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效.
临时表可以拥有触发器.
3.样例
create or replace procedure tmp_table_procedure
AS
i_count integer;
begin
select count(*) into i_count from user_objects t where t.OBJECT_TYPE ='TABLE' and t.OBJECT_NAME = upper('T_tran_TEMP');
if i_count>0 then
EXECUTE IMMEDIATE 'drop table T_tran_TEMP purge';
end if;

select count(*) into i_count from user_objects t where t.OBJECT_TYPE ='TABLE' and t.OBJECT_NAME = upper('T_session_TEMP');
if i_count>0 then
EXECUTE IMMEDIATE 'drop table T_session_TEMP
purge';
end if;
end tmp_table_procedure;
/
call tmp_table_procedure();
drop procedure tmp_table_procedure;
create global temporary table T_tran_TEMP
(
NODENAME VARCHAR2(512),
PATH VARCHAR2(1024),
QUALITY NUMBER
)
on commit preserve ROWS;


create global temporary table T_session_TEMP
(
NODENAME VARCHAR2(512),
QUALITY NUMBER,
NUM NUMBER
)
on commit delete rows;
<think>好的,用户想了解如何在MySQL中创建示例表的教程或方法。首先,我需要回忆一下相关的MySQL知识,确保步骤正确。然后,根据用户提供的引用内容,特别是引用[2]、[3]、[5],这些内容都涉及创建数据库和表的方法,应该可以整合出一个清晰的步骤指南。 首先,用户可能需要从安装MySQL开始,但根据引用[3],用户可能已经安装好了,所以第一步应该是登录MySQL。接下来,创建数据库是必须的,使用CREATE DATABASE语句,然后选择该数据库。之后是创建表的结构,需要定义字段名、类型和约束。如,像用户示例中的学生表,包含id、name、age等字段,其中id为主键,并设置自增。这部分需要详细说明每个字段的数据类型和约束条件,比如VARCHAR的长度,INT的大小,以及主键和自增的设置。 然后,插入示例数据也是重要的一步,用户可能需要看到如何通过INSERT语句添加数据,以及如何查询验证。此外,用户可能还会关心一些常见问题,比如如何创建临时表,这在引用[4]中提到,可以使用CREATE TEMPORARY TABLE语句。还有可能涉及到表的维护,如添加索引或修改表结构,引用[5]中提到了这些优化和维护的内容。 需要检查是否有遗漏的步骤,比如是否需要提到字符集和排序规则,或者存储引擎的选择。根据引用中的示例,可能不需要太复杂,但基本的ENGINE=InnoDB和DEFAULT CHARSET=utf8mb4可以提一下,确保表的兼容性和性能。 另外,用户的问题中提到了“示例表”,所以提供一个具体的子很重要,比如学生表或员工表,这用户能更直观地理解。同时,注意使用正确的LaTeX格式,所有行内代码如CREATE DATABASE需要用$...$包裹,而独立代码块用$$...$$,但根据用户示例中的Python代码块,可能需要用三个反引号包裹SQL代码,同时保持中文说明。 最后,生成相关问题时要围绕创建示例、字段类型、主键设置、插入数据、临时表以及表优化等方面,确保覆盖用户可能进一步探索的方向。</think>### MySQL 创建示例表分步指南 #### 1. 登录MySQL并创建数据库 ```sql -- 登录MySQL(命令行示例) mysql -u root -p -- 创建示例数据库(建议使用小写命名) CREATE DATABASE IF NOT EXISTS school_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE school_db; -- 切换数据库 ``` **注意**:`utf8mb4` 支持存储emoji等特殊字符,是推荐字符集[^3] #### 2. 创建学生信息表(详细字段说明) ```sql CREATE TABLE IF NOT EXISTS students ( student_id INT(11) UNSIGNED AUTO_INCREMENT COMMENT '学号', name VARCHAR(50) NOT NULL COMMENT '姓名', age TINYINT UNSIGNED CHECK (age BETWEEN 12 AND 25) COMMENT '年龄', gender ENUM('M','F','O') DEFAULT 'M' COMMENT '性别', enrollment_date DATE NOT NULL COMMENT '注册日期', PRIMARY KEY (student_id), INDEX idx_name (name) -- 为姓名字段添加索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` **字段设计要点**: - `AUTO_INCREMENT` 实现主键自增 - `CHECK` 约束限制年龄范围 - `ENUM` 类型限制性别选项[^5] #### 3. 插入示例数据 ```sql -- 单条插入 INSERT INTO students (name, age, gender, enrollment_date) VALUES ('张三', 18, 'M', '2023-09-01'); -- 批量插入 INSERT INTO students (name, age, gender, enrollment_date) VALUES ('李四', 19, 'F', '2023-09-01'), ('王五', 20, 'O', '2023-09-02'), ('赵六', 17, 'M', '2023-09-03'); ``` #### 4. 验证数据 ```sql SELECT * FROM students WHERE age > 18; +------------+--------+-----+--------+----------------+ | student_id | name | age | gender | enrollment_date| +------------+--------+-----+--------+----------------+ | 2 | 李四 | 19 | F | 2023-09-01 | | 3 | 王五 | 20 | O | 2023-09-02 | +------------+--------+-----+--------+----------------+ ``` #### 5. 创建临时表示例(会话级存储) ```sql CREATE TEMPORARY TABLE temp_courses ( course_id INT PRIMARY KEY, course_name VARCHAR(50) ) ENGINE=MEMORY; -- 使用内存引擎提升性能[^4] INSERT INTO temp_courses VALUES (101, '数据库原理'), (102, '算法设计'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值