第一章:安装数据库
全局数据库和sid有一个关系性
数据库口令:就是sys等的密码。
实例和数据库,数据库是一系列的文件系统
控制文件.ctl,数据文件.dbf,日志文件.log,联机非归档方式,不保存记录,写满后会被覆盖。
内存结构:
再生缓存池,经常要用到的大表保存载里面
共享池对性能影响比较大
共享sql区保存了sql语句不用再去编译
startup 启动实力 -mount 打开控制文件,不打开数据库文件用来执行备份
-nomount 连控制文件都不打开,当控制文件丢失是用
shutdown immediate 每个用户执行完sql后立即关闭数据库
shutdown abort 立即关闭数据库,强行关闭
help index 命令查找可以使用的所有命令
set命令:set sqlblanklines on 支持空白行
缓冲区中的命令可以用 /来执行
oracle 常用函数
字符函数: length select length('asd你')计算长度
ltrim 去掉左边的空格
rtrim起掉右边的空格
取楚一部分字符串:substr(字符串,开始的位置,取的长度),可以组合length来取得右边开始的串
时间函数:sysdate系统时间
current_date
alter session set nls date format='dd-mon-yyyy hh:mi:ss'
select next_day(sysdate,'星期三') from dual
转换函数to_char to_number
聚集函数:
其他:
user 查看谁已经登陆
select user from dual;
decode函数:decode(表达式,'值',1,0)
空值判断 nvl,is null判断是否是空
分组group by
聚集函数不能出现再where中,只能用having子句有having就不能用where了
like 函数 'a_'以a打头后面跟任意一个字符,like 'a%'
联合查询 join 没有sql server中的inner join
左连接再右边的表后添加(+),左连接再左边的表上加(+)
in ,not in
exit 无关子查询
表连接查询优于子查询
create table t as select * from tables;
pl/sql是oracle对sql语句的扩展
declare 声明语句
begin,exception
变量有标追变量和符合变量
变量以字符开始可以包含$,#长度1-30
不区分大小写
两个||表示拼接字符
变量赋值
declare
x varchar(30);
begin
x:='varchar is';
dbms_output_line('x的值是:'||x)
显示输出信息
行注释--,块注视/* */类似语c语言
declare
x varchar(20);
begin
x:='zhangtao';
dbms_output.put_line('x的值是:'||x)
========================================
declare
x varchar(20):='zhangtao';
begin
dbms_output.put_line('x的值是:'||x);
end;
分支语句
if then
else then
end if
case分支
===============
declare
a number;
b varchar2(20);
begin
if a=1 then
b:="是一";
elseif
判断=不用加:,赋值时要加
选择分支语句
case
when a=1 then 语句;
when a=2 then 语句;
end case;
循环语句:
declare
a number;
begin
a:=0;
loop
a:=a+1;
if a>5 then
exit;
end if;
dbms_output.put_line('输出a'||a);
end loop;
end;
===================================
declare
a number;
begin
a:=0;
loop
a:=a+1;
exit when a>6;
dbms_output.put_line('输出a'||a);
end loop;
end;
======================================
declare
a number;
begin
a:=0;
while a<8 loop
a:=a+1;
dbms_output.put_line('输出a'||a);
end loop;
end;
异常处理:
异常处理
e exception;
declare
e exception;
tname varchar(20);
begin
select name into tname from e where name='张涛';
when e the
end if;
dbms_output.put_line('没有找到');
end;
/
复合变量:记录
记录是由几个相关值构成的符合变量
declare
TYPE MYREC IS RECORD(
id varchar(20),
name varchar(30));
real_rec myrec;
begin
select sex,name into real_rec from e ;
dbms_output.put_line(real_rec.id||','||real_rec.name);
end
;
/
declare
TYPE MYREC IS RECORD(
id e.name%Type,--对应类型
name varchar(30));
real_rec myrec;
begin
select sex,name into real_rec from e ;
dbms_output.put_line(real_rec.id||','||real_rec.name);
end
;
/
类似于c 中的struct
游标
对数据逐条控制,
游标可以由参数但是参数不制定长度
类型可以用表名.列名%type来取得,用来给游标变量赋值
存储过程:
create 『or』replace
create or replace procedure mypr(id in varchar)
is
name varchar(10);
begin
select sex into name from e where name is null;
dbms_output.put_line(name);
end;
/
显示创建触发器时的错误
show errors procedure mypr;
试图:
create or replace view myview
as
select * from e;
加入限制要求
create or replace view myview
as
select * from e where name is not null
with check option -----有with check option 后就不能在试图中插入空值了
desc dba_views
desc user_views
desc all_views6 带有聚合函数的试图不能更新
触发器不能代参数
CREATE OR REPLACE TRIGGER trig_name
AFTER DELETE or (INSERT,update) ON e
FOR EACH ROW
BEHIN
delete from e1 where id=:old.id
END trig_name
:NEW.ID,:OLD.id
newhe old是系统提供的表供触发器用
for each row 是行级的触发器
触发器中不能用rollback commit
if inserting then
elseif deleting then
end if
=============
instead of insert on 试图
orcale 中的用户管理
锁定用户:
alter user test account lock;
解锁
alter user test account unlock;
添加用户
create user zhangtao identified by zhangtao
default tablespace e;
授权给新用户连接权限
grant connect to zhangtao;
GRANT INSERT(UPDATE,DELETE,SELECT) ON 表名 TO 用户名 WITH OPTION 表示这个用户可以把自己拥有的权限给其他人
去给 grant all on
grant execute on 存储过程 to
grant create user to zhangtao with admin option
解除权限
revoke select on e from zhangtao;
表空间
创建表空间
create tablespace tabs
datafile 'c:/oracle/'
create unlimited tablespace,dba to test;
alter table mm add constraint fk_mn forgin key(n1) refernces nn(n1);
启动监听程序
lsnrctl start,stop