- 切换数据库临时表空间为temp1/切换数据库的undo表空间为undotbs01
切换数据库的临时表空间为temp1
CREATE TEMPORARY TABLESPACE temp1
TEMPFILE 'temp1.dbf'
SIZE 100M
AUTOEXTEND ON;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1;
切换数据库的undo表空间为undotbs01
CREATE UNDO TABLESPACE UNDOTBS01
DATAFILE 'undo_datafile.dbf'
SIZE 10M
AUTOEXTEND ON;
ALTER SYSTEM SET undo_tablespace = undotbs01;
- 创建两个简单表A,B。AB表有相关联的列。并在关联列上创建索引
CREATE TABLE A(
id INT PRIMARY KEY,
name VARCHAR(50),
b_id INT
);
CREATE TABLE B(
id INT PRIMARY KEY,
name VARCHAR(50)
);
alter table A add constraint fk_a_b foreign key(b_id) references B(id);
create index idx_a_b_id on A(b_id);
3.
创建一个事务级临时表,会话级临时表,并测试在什么情况下临时表里的数据会消失
事务级:
- 会话提交:当会话提交时,临时表中的数据将被清除。
- 会话回滚:如果会话进行了回滚操作,则临时表中的数据也会被清除。
- 会话关闭:当会话结束或关闭时,临时表中的数据将被删除。
CREATE GLOBAL TEMPORARY TABLE temp_table1(
id INT,
name VARCHAR(50)
)ON COMMIT DELETE ROWS;
INSERT INTO temp_table1 VALUES (1, 'John');
INSERT INTO temp_table1 VALUES (2, 'Jane');
SELECT * FROM temp_table1;
commit;
会话级:
- 会话结束:当会话结束时,会话级临时表及其数据将被删除。
- 会话关闭:如果会话被主动关闭(例如通过ALTER SYSTEM KILL SESSION),会话级临时表及其数据也会被删除。
CREATE GLOBAL TEMPORARY TABLE temp_table2(
id INT,
name VARCHAR(50)
)ON COMMIT PRESERVE ROWS;
INSERT INTO temp_table2 VALUES (1, 'John');
INSERT INTO temp_table2 VALUES (2, 'Jane');
SELECT * FROM temp_table2;
关闭后重新连接数据库实例
4.
SELECT * FROM temp_table2;
CREATE TABLESPACE A DATAFILE 'A.dbf' SIZE 10M AUTOEXTEND ON;
CREATE TABLESPACE B DATAFILE 'B.dbf' SIZE 100M AUTOEXTEND ON;
CREATE USER BI IDENTIFIED BY 123456;
ALTER USER BI DEFAULT TABLESPACE B;
GRANT CONNECT, RESOURCE TO BI;