1、
创建表空间:
createtablespace 表空间名称datafile‘文件地址以及文件名’[ size ][ autoextend[ on | off ] ];
注:【 size 】 表示要创建的表空间的大小。单位可以为 K 或者 M。
【 autoextend 】 表示创建的表空间是否为自动扩展类型。
2、
创建新用户:
createuser用户名identifiedby密码[ defaulttablespace表空间名 ] [ temporarytablespace表空间名 ];
注:【default】 语句表示为新创建的用户分配一个默认的表空间;【tempporary】表示为新创建的用户提供一个临时的表空间。
3、
为新用户授予权限:
grantconnectto用户名;
表示授予用户连接数据库,创建表以及其他结构。
Grantresourceto用户名;表示授予用户使用数据库空间的权限。
Grantselect | updateonempto用户名;
注:select 表示授予用户查询emp 表的权限,update 表示授予用户修改emp 表的权限。
4、
修改密码:
alter user用户名 identifiedby新密码;
5、
删除用户:
dropuser用户名cascade ;
注:当用户拥有模式对象时必须使用 cascade;
6、
创建表:
createtable表名称(字段1类型,字段2类型,……..字段N类型);
7、
修改表结构:
altertable表名称madofy(列名类型,………);
表示修改表中的类型和字段的大小。
altertable表名称add(字段类型,……..);
表示向表中添加新列。
Altertable表名称dropcolumn列名称;
表示删除表中的现有列。
8、
清除表中所有数据:
truncatetable表名称;
truncate 命令和 delete命令相似,都可以用于删除表中所有的记录,不同的是:truncate 命令表示删除表中所有记录并立即释放空间,而delete 则需要提交事务后才能释放空间,当确定数据无用时使用truncate 比使用delete 效率更高。
9、
查看表结构:
desc 表名称;
10、
删除表
droptable表名称;
11、
查询无重复列:
selectdistinct列名from表名;
12、
根据现有表创建新表:
createtable新表名asselect*from旧表名;
注:改语句非常灵活,新表中的字段和数据根据查询语句而定。如: 可以将查询的 * 改为旧表中存在的列,可以在查询语句后添加where 条件以控制记录插入到新表。
13、
插入来自其他表的记录:
insertinto表名Aselect*from表名B [ where条件];
注:改语句要求表A要于表B具有相同的表结构。
14、
将表的操作权限授予给其他用户:
grantselect | delete | updateon表名 to用户名 [ whitgrantoption];
注:【withgrantoption】表示改授权用户可以将此权限授予其他用户。另外,改语句还可以只授予用户对某个表的某些列的修改权限,其语法如下:
grantupdate (列名1 ,列名2~~~)on表名to用户名;
15、
撤销已授权用户的权限:
revokeselect | update | inserton表名from用户名;
16、
集合操作符:
a) union 操作符用于返回两个查询选定的所有不重复的行。例如:
selectIDfrom 表名1unionselectIDfrom 表名2;
b) unionall操作符用于返回两个查询选定的所有行。例如:
selectIDfrom 表名1unionallselectIDfrom 表名2;
c) intersect操作符用于只返回两个查询选都有的行。例如:
selectIDfrom表名1intersectselectIDfrom 表名2;
d) minus操作符用于返回第一个表有的行而表二没有的行。例如:
selectIDfrom表名1minusselectIDfrom 表名2;
17、
函数:
a) 日期函数:
详见书
56
~
59
页。
b) 字符函数:
详见书
59
~
60
页。
c) 数字函数:
详见书
60
~
62
页。
d) 其他函数:
详见书
63
~
71
页。
18、
表分区:
一般表的分区是在创建表的时候便已经完成。例如:
范围分区:
createtable表名称
(
IDnumber(4),
Namechar(20)
)
partitionbyrange (列名)
(
partition分区名valuesluessthan(分区边界值1)[tablespace表空间名],
partition分区名valuesluessthan(分区边界值2)[tablespace表空间名],
partition分区名valuesluessthan(分区边界值3)[tablespace表空间名],
partition分区名valuesluessthan(maxvalue)[tablespace表空间名]
);
散列分区:
partitionbyhash (列名)
(
partition分区名[tablespace表空间名],
partition分区名[tablespace表空间名],
partition分区名 [tablespace表空间名],
partition分区名[tablespace表空间名]
);
列表分区:
partitionbylist (列名)
(
partition分区名values (‘匹配值’)[tablespace表空间名],
partition分区名values (‘匹配值’)[tablespace 表空间名],
partition分区名values (‘匹配值’)[tablespace表空间名],
partition分区名values (‘匹配值’)[tablespace表空间名]
);
19、
分区的维护:(主要用于对已经创建的分区进行操作)
添加分区:
altertable表名称addpartition分区名称valueslessthan(数字值);
注: 添加分区可以用于所有类型的表分区,其语法与对应的分区语法类似。
删除分区:
altertable表名称droppartition分区名称;
注: 删除表分区的前提是必须创建了该分区,另外,在删除分区时,分区中的数据也会删除,所以在删除之前必须确定该分区中的数据已经没有存在的必要。
截断分区:截断分区的作用是删除分区中的所有记录。
Altertable表名称truncatepartition分区名称;
合并分区:
altertable表名称mergepartition分区名称1,分区名称2intopartition新分区名称;
注: 合并分区可以将
范围分区或
复合分区表的两个
相邻分区连接起来。结果分区将集成北合并的两个分区的较高上界。
拆分分区:
altertable表名称splitpartition要分区的分区名称at(创建分区时的条件值) into(partition 新分区名称1,partition 新分区名称2);
注:拆分分区只可用于范围分区。另外也还可以
重命名新分区。例如:
altertable表名称renamepartition旧分区名称to新分区名称;
20、
表锁定:
行级锁:
select*from表名称where条件forupdate[ of字段1,字段2,……];
注:该锁为行级锁,只对满足条件的指定的字段实行锁定。
表级锁:
locatable表名称insharemode [ nowait ];
注:【nowait】表示避免因为延迟的等待。该语句只对表实现共享锁,还有其他锁模式。请看书78页
21、
创建同义词:(所谓同义词就是对象的别名)
私有同义词:
create[ orreplace ]synonym新建同义词名称for要创建同义词的对象名称;
注:私有同义词,顾名思义,旧时创建以后只能由该创建用户使用。创建它的前提条件是,用户必须具有对该表或其他结构的访问权限。
公有同义词:
create[ orreplace ]publicsynonym
新建同义词名称for要创建同义词的对象名称;
注: 公有同义词对所有的用户都有效,但是创建它的前提条件是:用户必须是管理员的身份。另外当公有同义词和本地对象名称由重复时,本地对象优先。
22、
删除同义词:
drop[ public ]synonym同义词名称;
注: 当要删除公有同义词时,用户页必须时管理员的身份。
23、
序列:(所谓序列,就是实现数据自动递增的种子)
a)
创建序列:
createsequence序列名称
[ startwith开始的序列号 ]
[ incrementby序列号的间隔 ]
[ maxvalue序列号的最大值 | nomaxvalue ]-- 表示指定序列的最大值。Nomaxvalue 表示没有最大值。
[ minvalue序列号的最小值 | nominvalue ]-- 表示指定序列的最小值,它必须小于或等于start with 的值,并且小于 maxvalue。Nominvalue 表示没有最小值。
[ cycle | nocycle ];
-- 表示当序列到达最大或最小值时 是否从头开始
b)
访问序列:
序列名.nextval 表示获得序列的下一个值;――主要用于向表中插入记录。例如:
insertinto表名称values (序列名.nextval,~~~~~~~);
序列名.currval表示获得序列的当前值;―― 主要用于查看。 例如:
selectaa.currval from dual;
注: aa 为已经创建的序列,dual 是系统表。
c)
更改序列:
altersequence序列名称
[ incrementby序列号的间隔 ]
[ maxvalue序列号的最大值 | nomaxvalue ]-- 表示指定序列的最大值。Nomaxvalue 表示没有最大值。
[ minvalue序列号的最小值 | nominvalue ]-- 表示指定序列的最小值,它必须小于或等于start with 的值,并且小于 maxvalue。Nominvalue 表示没有最小值。
[ cycle | nocycle ];-- 表示当序列到达最大或最小值时 是否从头开始
注:不可以更改序列的startwith 的值。
d)
删除序列:
dropsequence序列名;
24、
视图:
a)
创建视图:
createorreplaceview视图名称as
select表A.字段1,表A.字段2,……,表B.字段1,表B.字段2……
from表A,表B on表A. 字段=表B.字段;
b)
删除视图:
dropview视图名称;
25、
索引:
a)
创建索引:
createindex索引名称on表名称 (列名称)[ tablespace表空间名称];
注:索引还有其他多种类型,请参看书102-103页。
26、
游标的使用:
a)
动态游标:示例如下
:
declare
存储游标的变量
test_tab%rowtype;
--
定义游标
cursor
游标名称
is select * from test_tab where
条件;
begin
open
游标名称;
--
打开游标
loop –
对游标进行循环操作
fetch
存储游标的变量
into
游标名称
; --
将游标的值赋给变量
exit when
游标名称
%notfound;--
结束循环的条件
dbms_output.put_line (
游标名称
.
字段名
); --
对赋值的变量操作
end loop;
close
游标名称
;
end;
b)
循环游标:
(
特点:可以直接对有表进行操作,不需要打开、显示赋值、显示判断结束的条件、关闭游标等
)
建议使用改类型游标。示例如下:
declare
cursor
游标名称
is select * fromcs_test where name='chenshan';
begin
for
变量
in
游标名称
loop
dbms_output.put_line(
变量
.
字段名称
);
end loop;
end;
c)
ref
游标:
(
特点:可以在运行时才确定游标要执行的
sql
语句,更加灵活
)
。其示例如下:
declare
type temp is ref cursor;
aa temp;
begin
if
条件
then
open
游标名称
for select * from cs_test where
条件;
elsif
条件
then
open
游标名称
for select * from cs_goods where
条件;
else
open
游标名称
for select * from cs_test where
条件;
end if;
fetch
游标名称
into
存储游标的变量
loop
具体的操作;
end loop;
close
游标名称;
end;
27、
过程:
a)
创建过程:
create or replace procedure
(参数列表)
as
--
本地变量申明
begin
--
过程的主体操作
exception
when
条件
then
--
错误处理;
end
;
b)
:执行过程:
execute
过程名称
(参数列表);
注:过程
c)
:将执行过程的权限授予其他用户
grantexecuteon 过程名to用户名;
注:过程的调用不应该在sql 语句块中;
d)
:删除过程
dropprocedure过程名;
28、
函数:
a)
:创建函数
create[ or replace ] function function_name(parameter1,parameter2,......)—
参数列表
return
要返回的数据类型
is | as
[
本地变量声明
]
;
begin
【函数主体】;
exception
when tiaojianthen
【错误处理主体】
;
end;
b)
:调用函数
可以为查询语句:
select函数名称fromdual;;
也可以为pl / sql 语句块调用
begin
。。。。。。。。。。。。
调用函数;
。。。。。。。。。。。。
end;
c)
将函数的使用权限授予其他用户:
grantexecuteon函数名to用户名;
d)
删除函数:
dropfunction函数名称;
29、
程序包:
a)
程序包规范的创建:
create or replace package cs_manage_findindent as
--
声明函数
function func_addgoodds (goodstypeid number , goodstypename varchar2) return varchar2
;
--
声明过程
procedure
过程名称
(
参数
);
--
声明游标
cursor
游标名称
(
参数
) return
返回的数据类型
;
end
;
b)
程序包主体的创建:
create [ or replace ] package body
程序包名称
is | as
--
下面是函数主体
function func_addgoodds ( goodstypeid number , goodstypename varchar2 )
return varchar2 as
begin
insert into cs_ProduceType values ( goodstypeid , goodstypename );
return '
操作成功
' ;
exception
when others then
return '
操作失败
' ;
end
;
--
下面是过程主体
procedure
过程名
(
参数列表
) as
begin
过程主体;
--
(
pl/sql
语句块)
exception
when others then
错误主体;
end;
--
下面是游标主体
cursor
游标名称
(
参数列表
) return
应该返回的数据类型(一般为表名称或者为
(
表名称
% ROWTYPE)
)
is
查询语句
;
end;
注:
程序包主要是用于包含过程,函数,游标等操作的集合,它的使用能够让
pl/sql
代码变得更加简洁、易懂,同时管理员管理起来也更加轻松。
程序包分为两个部分:一个为规范声明,另一个为程序包主体。顾名思义,规范声明是声明程序包中具体要实现的各种对象,而程序包主体则是具体实现规范声明中已经声明的各种对象。
程序保就好比是一本书,书的目录就相当于程序保的规范声明,而书中的章节内容就相当于是程序包的主体,它是对目录的一个实现。
30、
触发器:
a)
创建触发器:
create or replace trigger
触发器名称
before | after [ delete | update | insert ]
on
表名称
for each row
begin
--
开始实现触发器的主体
insert into cs_test_temp values(:old.name,:old.age,:new.sex);
dbms_output.put_line('
已经启动了触发器!!!
');
exception
when others then
dbms_output.put_line('
发现未知错误!!!
');
end;
注
:
before | after
表示改触发器是在事件之前还是事件之后被触发。
[ delete | update | insert ]
表示选择可以触发该触发器的事件。
for each row
表示对每一行的修改都会触发该触发器,即创建了一个行级触发器。
:old.name
表示事件之前
name
的值。
:new.sex
表示事件之后
name
的值。
31、
产生随机数字的语法:
num := dbms_random . random ;
32、
删除重复的记录:
delete from表名称whereidin
( selectidfrom表名称groupbyidhavingcount( * ) > 1)
and
( selectmin( rowid )from表名称groupbyidhavingcount( * ) > 1) ;
注:
groupby
关键字用于将不重复的字段全部列出,以及将重复的字段列出一个。
而
having
则表示在
groupby
语句后的条件关键字,因为在
groupby
后面不能使用
where
条件关键字来使用条件语句。