索引分类:B树索引、位索引
1.创建标准索引
create index index_name
on table_name(column1…);
2,创建唯一索引
create unique index index_name
on table_name(column1…);
3,.创建位索引
create bitmap index index_name
on table_name(column1…);
事务:
原子性、一致性、隔离性、永久性
设置自动提交:set autocommit on/off
触发器
create [or replace] trigger trigger_name
after / before / instead of after触发器的工作原理:先保存数据库数据的更新,再激活触发器
before触发器的工作原理:先激活触发器,再保存更新数据库数据
[ insert] [ [or] update [of column_list] ] [ [or] delete]
on table_or_view_name
[referencing {old [as] old / new [as] new} ]
[for each row] 行级触发器,如果没有该行就是表级触发器
[when condition]
pl/sql_block;
:new 代表用户即将插入数据库中的某行记录
:old 代表即将删除的该行数据记录
触发器中不能使用 :rollback、commit、create、 dorp、 alter、 savepoint等内容
例1:当用户插入或更新 成绩表中的记录时候,就输出一个提示“触发器响应了”
create or replace trigger trigger1
before insert or update on 成绩表
begin
dbms_output.put_line('触发器响应了');
end;
例2:当向学生表中插入数据时,需要控制学生学号不可以为负数
create or replace trigger trigger2
before insert on student
for each row
begin
if :now.sno <0 then
raise_application_error(-2001,'学号错误,不能插入表中');
end if;
end;
例3:当向学生表 中插入 数据时,需要控制学生学号 不能为负数,如果为负数,则将负数改为绝对值的正数插入
create or replace trigger trigger3
before insert on student
for each row
begin
if :now.no<0 then
:now.sno := -:now.sno;
end if;
end;
instead of触发器:修改视图中,非键值表中的列
例4:学生表(sno,sname,sage)
住址表(sno,zname)
视图(sno,sname,zname)更新视图 将学生名为kite的住址换成安徽
create or replace trigger trigger4
instead of update on view_stu_add
for each row
declare
aa number :=0;
begin
select sno into aa where sname = :old.sname;
delete address where sno = aa;
insert into address values(aa,:new.zz);
end;