0.临时表 

create global temporary table my_temp( 

tempid number(9) primary key, 

tempName varchar2(20) 

) 

on commit delete rows;       //表示提交数据,就消除临时表中的数据 

insert into my_temp values(1,'a'); 

select * from my_temp; 

commit;    //将缓存中的数据存到硬盘中(即提交数据) 


create global temporary table my_temp( 

tempid number(9) primary key, 

tempName varchar2(20) 

) 

on commit preserve rows;     //表示会话结束,就消除临时表中的数据 

insert into my_temp values(1,'a'); 

commit;    //将缓存中的数据存到硬盘中(即提交数据) 

select * from my_temp; 

exit; 
   //断开数据库连接(即会话结束) 


补充:schema(表示数据库对象的统称) 

//给别的用户创建表必须拥有 create any table 权限 

system: create table scott.my(id number(9)); 


 --DML  (数据操作语言,只能操作数据,不能改变表结构) 

 --insert update delete select 


 1.插入数据(insert into ) 

语法:insert into table_name(column_nam[.,.,.] ) values(column_value[.,.,.]) 


注意:column_name与column_name个数,类型一致 

    当插入所有字段时,可以省略column_name,但column_value一定要与表结构一致 

    当使用默认值的字段使用关键字default 

 

A.表中一次插入多条数据 

   a.表不存在      =>数据已提交 

1).与原表一样 

create table myperson as select * from person; 

2).取原表中的部分字段 

create table myperson01 as select name,age from person; 

3).取原表中的部分字段和其他数据 

create table myperson02 as select name,age, 'oracle' "company" from person; 

 

   b.表存在 
  =>数据未提交,需要commit;提交数据 

1).与原表一样     

insert into table myperson select * from person; 

commit; 

2).取原表中的部分字段 

insert into table myperson01 select name,age from person; 

commit; 

3).取原表中的部分字段和其他数据 

insert into table myperson02 select name,age, 'sun' from person; 

commit; 


B.一次插入多条数据,不借助有数据的表   

  dual:这是系统提供的一张临时表   

  union:把多个查询结果整合到一起 

insert into myperson01  

select 'ee',19,5 from dual union 

select 'ff',20,6 from dual; 


 2.更新数据(update) 

A.更新所有记录 

a.更新一个字段 

update myperson02 set "Company"='yc'; 

b.更新多个字段 

update myperson02 set "Company"='yc',age=19; 


B.更新部分记录   =>   where条件,用来筛选数据(条件为true就更新,条件为false不更新) 

a.更新一个字段 

update myperson02 set "Company"='alibaba' where id=3; 

b.更新多个字段 

update myperson02 set "Company"='baidu',age=19 where id=1; 


C.当有主外键关系时,更新外键值,外键值必须在主表内有 

update person set phoneid=2 where id=5;//在主表中没有,更新失败 

update person set phoneid=3 where id=4;//在主表中有,更新成功 


 小结: 

 insert update delete select 
 => DML(数据操作语言,只能操作数据,不能改变表结构) 数据会存在回滚段中 

 create alter drop truncate 
 => DDL(数据定义语言,可以改变表结构) 

 grant revoke 
 => DCL(数据控制语言) 

 commit rollback 
 => TCL(事物控制语言,针对DML语言) 


 3.删除数据(delete) 

A.没带条件,删除表中所有的数据 

1). 

delete from mye;   

rollback; 
  //数据回滚 

2).彻底删除 

delete from mye; 

commit; 
  //把回滚空间的数据刷掉了 

rollback; 
  //数据回不来了 


B.带条件删除表中的数据 

delete from myperson01 where id=2;  


C.截断 truncate (不会把删除的数据放入undo(回滚)空间,所以rollback找不回数据) 

truncate table myperson01;   ==  delete from myperson01;commit;