Oracle基础学习笔记(3) 水深无声 2021-06-24 15:57 382阅读 0赞 管理表 1,主键约束 表的主键可以确保在一个表中没有重复行,防止冗余的信息。 添加主键: Alter table another\_dept add constraint another\_dept\_pk primary key(deptno); 注意:在创建主键约束时,一定要遵循下面的原则: (1) 一个表中最多只能有一个主键约束 (2) 表中不能有任何两行在主键约束列上既有相同的值 (3) 主键列不能为空 2,外键约束 如果插入子表的行在外键列中具有非null值,那么父表行中必须在所引用的列中有相同的值。 语法格式如下: Alter table child\_table Add constraint foreign\_key\_name Foreign key(child\_table\_column) References parent\_table(parent\_table\_column); 3,唯一性约束 唯一性约束可以确保表中的各行,对于值为非null的给定列或列组都具有唯一值。 语法格式如下: Alter table table\_name Add constraint unique\_key\_name Unique(column\_name); 4,检查约束 检查约束就是指定表中某个列的取值范围。对于即将插入表中的数据来说,如果插入的数据满足检查约束指定的条件,则插入操作成功,否则插入操作失败。 例句:alter table students Add constraint ck\_gender Check(gender in(‘female’,’male’)); 5, 索引 语法格式: Create index idx\_emp\_name On tableName(column\_name); 如果oracle有能力在一次扫描中读取多个数据块,那么他就会将考虑使用索引的阀值设置的相当高。如果oracle认为用户的查询将要选取记录的2%-5%或更多,那么他就会执行全表搜索,而不考虑索引是否可用。 为了防止数据块分割,在创建索引时可以设置pctfree属性 例句: Create index idx on tableName(column\_name) pctfree 0; 修改: Alter index idx Rebuild pctfree 10; 6, 索引和约束 当某一列有唯一性约束和主键约束时,无论用户是否喜欢,将会自动为这一列创建一个索引。 首先创建表,没有任何约束 接着创建索引(假设表为inventory) Create indexs idx On inventory(partno,warehouse) Pctfree 10; 接下来向表中增加以下约束: Alter table inventory add( Constraint pk primary key(partno) Using index idx); 这时,oracle将会检查它是否可以使用已经存在的索引,如果索引能够满足它,它就会使用这个索引。 7, 视图 例句:create view viewName(name) As Select name from emp; 查询视图:select \* from viewName order by name; 注意:create or replace 删除视图: Drop view viewName; 8, 过程 使用过程代替PL/SQL程序块有许多好处,例如,增强可扩性,提高模块化水平,可重用性增强,可维护性加强,有利于抽象和数据的隐藏,增强安全性等。 例句:create or replace procedure Insert\_into\_t(p\_parm in number) Is Begin Insert into t values(p\_parm); End insert\_into\_t; 执行过程: Exec insert\_into\_t(p\_parm=>100); 参数传递: 名称表示法:parm\_name=>value 位置表示法:跟java语言传递参数一样 局域声明: Declare Num1 number:=111; 9, 触发器 触发器是一种特殊的过程,但是用户不能直接调用触发器,触发器是当特定事件出现时自动执行的代码块。 触发器示例: Create trigger biufer\_emp\_empno Before insert or update Of empno On emp Referencing old as old\_value New as new\_value For each row When(new\_value.empno<>7782) Begin :new \_value.comm:=0; End; 解析:before insert or update Of empno On emp 对emp表进行insert操作时 对emp的表的empno进行update操作时 When(new\_value.empno<>7782) 这就是说,如果列的新值不等于7782时,触发器就会执行。任何布尔表达式都可以使用when子句。
还没有评论,来说两句吧...