1Z0-051-DDL-1表和临时表的创建和使用

一、创建简单表

1.1  使用列规范创建表

语法:

CREATETABLE [schema.]tablename [ORGANIZATION HEAP]

(columndatatype [default expression]

[,columndatatype [default expression]]

);

注:DEFAULT 字句可能很有用,但它功能很有限。

分析以下案例:

CREATETABLE SCOTT.EMP

(EMPNONUMBER(4),

ENAMEVARCHAR2(10),

HIREDATEDATE DEFAULT TRUNC(SYSDATE),

SAL NUMBER(7,2),

COMM NUMBER(7,2) DEFAULT 0.03

);

SET LONG9999

Select  dbms_metadata.get_ddl(‘TABLE‘,‘EMP‘,‘SCOTT‘)FROM DUAL;

1.2  使用子查询创建表

语法:

CREATETABLE  [schema.]table  AS subquery;

SQL>create tabel emp_copy as select * from scott.emp;

SQL>createtable emp_dept as select

Last_nameename,department_name dname,round(sysdate -hiredate) service

From  employees nutural join departments orderby  dname,ename;

创建一个没有数据行的表:

SQL>createtable no_emps as select * from scott.emp where 1=2;

1.3.在创建表之后更改表的定义

(1)添加列

SQL>altertable emp add (job_id number(8));

(2)修改列

SQL>alter table emp modify (commission_pct number(6,2) default 0.05;

(3)删除列

SQL>altertable emp drop column job_id;

(4)标记未使用列

SQL>altertable  emp set unused column job_id;

(5)重命名列

SQL>altertable emp rename column hire_date to hiredate;

(6)将表标记为只读

SQL>altertable emp read only;

(7)一次性删除未使用的列

SQL>altertable emp drop unused columns;

1.4 删除表

语法:

Drop   table  [schema.]tablename;

SQL>droptable  emp;

注:删除表之前不会生成警告(任何DDL命令都一样,他们包含了COMMIT),一般不可逆,在一定特定的情况下,可使用闪回技术和其他恢复技术。

1.5 截断表

语法:

Trancate  table  [schema.]tablename;

SQL>trancate table emp;

注:瞬间清空emp表,表中有一条记录和一亿条记录的速度是一样的。

1.6 创建和使用临时表

临时表包含所有会话都可以访问的定义,但其中的行是插入行的会话专用的。

语法:

Create  global temporary table temp_tab_name

(columndatatype [,column datatype])

On commit{delete |preserve} rows;

列的定义与普通表没有区别,末尾的可选句子确定插入的任何行的生命周期。默认方式:在插入行的事务完成时,删除相应的行,但也可以更改此行为,以便将他们保留到插入行的会话结束为止。临时表的数据是临时的,专用于相应的会话,针对其执行的所有SQL命令速度远比针对永久表的命令块。

速度快的原因:

(1)临时表不是永久表空间中的段。

(2)针对临时表的DML不生成重做数据。

【创建和使用临时表案例】

(1)使用peenboo身份登录,创建临时表tmp_emp:

SQL>createglobal temporary table tmp_emp on commit preserve rows  as select * from emp where 1=2;

(2)插入一些数据:

SQL>Insertinto tmp_emp select * from emp where department_id=50;

SQL>commit;

(3)使用peenboo身份,启动第二个SQLPLUS

SQL>selectcount(*) from tmp_emp;

SQL>insertinto tmp_emp select * from emp where department_id =60;

SQL>commit;

(4)在第一个会话中截断表:

SQL>truncate  table tmp_emp;

(5)在第二个会话中查询,会话副本仍然包含行:

SQL>selectcount(*) from tmp_emp;

(6)在第二个会话中,演示会话终止并不会清除数据行。需要断开连接再次连接。

SQL>disconnect;

SQL>connectpeenboo/dbbocom

SQL>selectcount(*) from tmp_emp;

时间: 2024-12-30 03:24:54

1Z0-051-DDL-1表和临时表的创建和使用的相关文章

MySQL内存表和临时表

#MySQL内存表和临时表 DROP TABLE IF EXISTS tbl; CREATE TABLE tbl ( id INT NOT NULL AUTO_INCREMENT, title VARCHAR (50) NOT NULL, author VARCHAR (50) NOT NULL, PRIMARY KEY (id) ) ENGINE = INNODB DEFAULT CHARSET = utf8; INSERT INTO tbl(title, author) VALUES('Le

存储过程中引用的常规表,临时表以及表变量是否会导致存储过程的重编译

在存储过程中,经常要引用一些表来存储一些中间数据,用完即删.对于这个中间表,用常规表,临时表或者表变量有什么区别呢? 下面我们看一下这三种中间表是否会造成执行计划的重编译. 首先打开sql server profile,监控存储过程. 1.建第一个存储过程,在存储过程中创建常规表TT1 CREATE PROCEDURE TEST1_PRO AS BEGIN CREATE TABLE TT1( ID INT IDENTITY, NAME VARCHAR(10) ) INSERT INTO TT1

表变量,临时表

9.2 表变量.临时表 临时表分为局部临时表和全局临时表,分别以#以及##为表名前缀.局部临时表在会话间不能共享,在会话结束后,临时表会被删除:全局临时表在会话间是可共享的,当创建的会话关闭时,全局临时表也会被删除. 表变量,发现过许多误解,以为表变量是内存表,是存储在内存中的,其实表变量与临时表一样,都是存储在Tempdb中的,表变量是在SQL Server 2000时加入的,当初是为了解决临时表造成重编译的问题而添加的.做个简单的测试,如下面的语句代码清单9-1中所示,可以获取当前会话使用T

oracle复制表、临时表和视图

创建一个表new_table和old_table表结构一样(没有old_table的记录) create table new_table as select * from old_table  where 1=0; 创建一个表new_table和old_table表结构一样(有old_table的记录) create table new_table as select * from old_table; 复制一个表到另一个表 insert into new_table select * from

MySQL DDL锁表情况

版本5.7.22,隔离级别RR 当DDL的表存在慢查询时,此时对该表做DDL,由于无法获得metadata锁,所以会等待该锁,造成锁表,后续DML操作全部进入等待状态.session1:session2:session3:session4: tips:select sleep(N) from t;表示查询t的时间为t中的行数*N,如下: Before an online DDL operation can finish, it must wait for transactions that ho

SQL语句汇总(一)——数据库与表的操作以及创建约束

首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易出错.博主希望通过此文来战胜自己的健忘,如果大家认可也可以保留起来. "SQL"是 "Structured Query Language" 即“结构化查询语言”的简称,它是用来管理关系型数据库的. 其包括: –数据定义语言(DDL) –数据查询语言(DQL) –数据操作

Oracle两种临时表的创建与使用详解

ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中. 分类: 1.会话级临时表 会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据. 格式: Create Global Tem

sql中用临时表 或 创建视图那个效率比较快!

经常访问的话当然是创建视图好 临时表是用一次建立一次 肯定要慢些的 1,存在方式: 临时存在于 服务器内存中 视图 无存在形式 2, 生命周期: 临时表 Sql服务关闭就消失 视图 你不删它就不会消失 3,用途 临时表 经常作为 中间转接层 视图 作为物理表的窗口 4,效率 临时表因为在缓存中,所以执行效率比较高视图 效率一般,但是节省I/O操作,节约资源 5,在存储过程使用时: 临时表,效率很高{可能是数据量少,再加上临时表是在缓存中,所以执行效率高} 视图 一般 sql中用临时表 或 创建视

oracle表空间与用户创建

-------------------------创建表空间与用户 创建临时表空间 CREATE TEMPORARY TABLESPACE test_temp TEMPFILE '/u01/oracle/product/10.2.0/oradata/orcl/test_temp01.dbf ' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 2048M EXTENT MANAGEMENT LOCAL; 创建用户表空间 CREATE TABLESPACE test_