1.创建表:
create table member(
mid NUMBER(5),
name VARCHAR2(50) DEFAULT '无名氏',
age NUMBER(3),
birthday DATE DEFAULT SYSDATE,
note CLOB
);
select * from tab;
desc member
插入数据:
insert into member (mid,name,age,birthday,note) values
(1234,'Wings',1,to_date('2016-08-13','yyyy-mm-dd'),'ShanDong');
insert into member (mid,name,age,birthday,note) values
(1111,'King',29,to_date('1989-08-29','yyyy-mm-dd'),'ShanDong');
2.复制整个表:
create table member1 as select *from member;
select * from member1;
复制部分表:加入条建即可
create table member2 as select * from member where mid=1234;
select *from member2;
复制表结构:(加入一个永远不满足的条件)
create table member3 as select * from member where 1=2;
select * from member3;
表的复制操作只要是行与列的查询结果,就可以将其定义为数据表。
3.数据字典
在Oracle中专门提供了一组数据专门用于记录数据库对象信息、对象结构、管理信息、存储信息的数据表,那么这种类型的表就称为数据字典,在Oracle中定义了两种数据字典:
静态数据字典:这类数据字典由表及视图所组成,这些视图分三类:
user_*:存储了所有当前用户的对象信息。
all_*:存储所有当前用户可以访问的对象信息(某些对象可能不属于此用户);
dba_*:存储数据库之中所有对象的信息(数据库管理员操作)
动态数据字典:随着数据库运行而不断更新的数据表,一般用来保存内存和磁盘状态,而这类数据字典都以"V$"开头;
所有的数据表都属于数据库对象,每当创建一张数据表的时候,会自动在制定的数据字典表执行一个增加语句(这个增加语句你是不知道的),但是这些数据字典的数据操作只能够通过命令完成。
4.数据表重命名:
在Oracle之中,为了方便用户对数据表进行管理,所以专门提供了修改表名称的操作
RENAME 旧表名称 TO 新的表名称;
RENAME member TO new_member
select *from tab;
select * from new_member;
注意:当发生任何的DDL操作的时候对于事务都会自动提交。不能用rollback回滚。
5.
删除表:
语法:drop table 表名称
select * from tab;
drop table member1;
drop table member2;
drop table member3;
会发现,删除了的表,还有部分残余。每删除一个表,就会多一个BIN开头的表。
6.闪回技术(FLASHBACK):
闪回技术是Oracle10g之后所提供的一种新的数据保障措施,在Oracle10g之前,如果用户不幸将
表误删除了,数据表就再也找不回来了,但是在Oracle10g之后,为了解决这个问题,专门提供了
一个与windows操作系统类似回收站功能,即:所有的数据表删除的话,会默认先将其保存在回收
站之中,此时,如果用户发现删除有错误,则可以直接通过回收咋拿进行表的恢复。
select * from recyclebin;
范例:
恢复删除表
flashback table member1 to before drop;
范例:
彻底删除表,不经过回收站
drop table member1 purge;
范例:删除回收站里的表
purge table member2;
范例:
清空回收站
purge recyclebin;
注意:闪回技术是需要存储空间的,如果存储空间不足,就会覆盖闪回的回收站空间,所以闪回不会百分百成功。还是要做好数据库的备份工作。
7.修改表结构:
注意:尽量不要修改表结构,修改表结构=程序猿的噩梦!!!
select * from tab;
select * from new_member;
create table member as select * from new_member;
select *from member;
增加字段:
alter table member add(height number(3));
如果不设置默认值,所有的行的值都是null
修改字段长度:
alter table member modify(sex varchar2(10) default '男');
desc member;
insert into member (mid,name,age,birthday,note) values
('2222','dgq',29,to_date('1989-08-29','yyyy-mm-dd'),'Shandong')
删除表中的列:
alter table 表名称drop column 列名称;
范例:
alter table member drop column height;
注意:如果说某个数据表数据量很大,执行这种删除操作,这种性能损耗是非常大的。所以很多时候为了保证表在大数据量的情况下删除操作可以使用,又不影响表的正常使用,所以可以将表中设置为无用的列。
无用字段的设置:
alter table 表名称set unused(列名称);
alter table 表名称set unused column 列名称;
范例:将sex列设置成无用状态
alter table member set unused(sex);
这样的话,表中的列就少了,而这个时候可以执行删除无用列
alter table member drop unused columns;
8.添加注释:
程序中使用注释可以帮助使用者更加清晰的了解代码的作用,而在Oracle数据库中也可以为表或者列设置注释
语法:
comment on table 表名称 is '添加表注释内容'
comment on column 表名称.列名称 is '添加列注释内容'
范例:
comment on table member is '用于记录成员信息';
oracle 提供了查看表的注释信息的数据字典,user_tab_comments,还提供了查看列的注释信息,
使用user_col_comments
select * from user_tab_comments;--查看表注释
select * from user_col_comments where table_name='MEMBER';--查看列注释
范例:为列添加注释
comment on column member.mid is '成员编号';
9.设置可见/不可见字段
如果某些数据列的内容不需要使用,那么直接为其设置null值数据即可,但是这样以来有可能会出现一个
小问题,例如:在一张表设计的时候,考虑到日后需要增加若干个列,那么这些列如果提前增加的话,那么
就有可能造成开发人员的困扰,为此就希望将这些暂时不用的列定义为不可见的状态,这样开发人员浏览
数据是,只需要浏览有用的部分即可。当需要这些列时,在恢复其可见状态。在Oracle12C之前,这些特性
是不被支持的,12C之后才提供此功能。
语法:alter table 表名称 modify 列名称 invisible|visible
范例:
alter table member modify name invisible;
10. 表空间:
表空间是Oracle数据库中最大的一个逻辑结构,每一个Oracle数据库都有若干个表空间组成,而每一个表空间由多个数据文件组成,用户所创建的数据表也统一都被表空间所管理。表空间与磁盘上的数据文件对应,所以直接与物理存储结构关联。而用户在数据库之中锁创建的数据表、索引、视图、子程序都被表空间保存到了不同的区域内。
在Oracle数据库中有两类表空间:
系统表空间:是在数据库创建时与数据库一起建立起来的,例如:用户用于撤销的事务处理,或者使用的数据字典就保存在了系统表空间中。例如:system和sysaux表空间
非系统表空间:是具备指定管理员权限的数据库用户创建,主要用于保存用户数据、索引等数据库对象,例如:users、temp、undotbs等表空间。
创建表空间:
如果要进行非系统表空间的创建,可以使用如下语法完成。
create[temporary]tablespace 表空间名称
[datafile|tempfile表空间文件保存路径...][size数字[K|M]]
[autoextend on|off][next数字[k|M]]
[logging|nologging];
子句相关说明:
datafile:保存表空间的磁盘路径,可以设置多个保存路径;
tempfile:保存临时表空间的磁盘路径;
size:开辟的表空间大小,其单位有K(字节)和(M)兆;
autoextend:是否为自动扩展表空间,如果为On表示可以自动扩展表空间大小,反之为OFF;
next:可以定义表空间的增长量;
logging|nologging:是否需要对DML进行日志记录,记录下的日志可以用于数据恢复。
创建用户表空间:(需要用sysdba用户创建)
create tablespace dgq_data
datafile 'E:\app\oralceuser\oradata\dgqdb01.dbf' size 50M,
'F:\data\dgqdb02.dbf' size 50M
autoextend on next 5M
logging;
创建临时表空间:(注意临时表空间不能有日志logging选项)
create temporary tablespace dgq_temp
tempfile 'E:\app\oralceuser\oradata\dgq_temp01.dbf' size 50M,
'F:\data\dgq_temp02.dbf' size 50M
autoextend on next 2M;
如果要查看表空间那么就可以使用dba_tablespaces数据字典查看。
select * from dba_tablespaces;
Oracle中的默认表空间:
在Oracle数据库中默认提供了以下几个表空间,各个表空间的作用如下所示:
system表空间:在一个数据库中至少有一个表空间,即system表空间。创建数据库时必须指明表空间的数据文件的特征,如数据文件名称、大小。system主要是存储数据库的数据字典,在Oracle系统表空间中存储全部的PL/SQL程序的源代码和编译后的代码,例如存储过程、函数、包、数据库触发器。如果要大量使用PL/SQL,就应该设置足够大的System表空间。
sysaux表空间:是system表空间的辅助表空间,许多数据库的工具和可选组件将其对象存储在sysaux表空间内,它是许多数据库工具和可选组件的默认表空间。
user表空间:用于存储用户的数据。
undo表空间(undotbs1)表空间:用于事务的回滚、撤销;
temp临时表空间:用于存放Oracle运行中需要临时存放的数据,如排序的中间结果等。
但是发现使用dba_tablespces数据字典只能够知道数据库表空间的信息,但是我并不知道每个表空间所花费的存储。而且两类表空间使用数据字典是不同的,可以使用dba_data_files和dba_temp_files
两个数据字典查看。
select * from dba_data_files;
select * from dba_temp_files;
使用表空间
表空间的使用主要是在创建数据表的时候。
创建数据表空间并使用特定表空间
语法:
create table 用户名 表空间(
字段名称 字段类型 default 默认值,
字段名称 字段类型 default 默认值,
...
) tablespace 表空间名称;
范例:
create table mytab(
id number,
name varchar2(20)
)tablespace dgq_data;
desc mytab;