`
5aijava
  • 浏览: 414413 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle学习笔记(四)

阅读更多
primary key约束:

主键约束的定义:

第一种定义形式:列级约束
create table test(c number primary key ); 列级约束

第二种定义形式:表级约束
create table test(c number , primary key(c) ) ; 表级约束

create table test( c1 number constraints pkc1 primary key );
此约束有名字: pkc1

create table test(c number , c2 number , primary key (c ,c1) ) ; 用表级约束可以实现联合主键

foregin key (fk) 外键约束:

(先定义父表,再定义子表)

carete table parent(c1 number primary key );

create table child (c number primary key , c2 number references parent(c1));

或表级约束定义:
create table child( c number primary key , c2 number , foreign key(c2) references parent(c1));

如果两个字段都为唯一且非空,这时可以定义成UK+NOT NULL

(PK或UK)一对多(FK)
(PK+UK)一对一(FK) 或 (PK)一对一(PK)

多对对多关系,一般都通过一张中间表来分解成两个一对多的表

非空约束是唯一一个可以用desc看到的约束

check 约束

create table test(c1 number primary key); 设置主键
create table test(c1 number constraints test_c1 primary key); 定义约束名,默认约束名为SYS_ 在列后面定义约束称为列级约束
create table test(c1 number primary key(c1)); 所有列定义完后再定义约束称为表级约束(能定义联合主键)
cretae table test(c1 number,c2 number,priary key(c1,c2)); 定义联合主键
create table test(c1 number primary key,c2 number unique); unique 唯一约束
create table test(c1 number primary key,c2 number not null unique); 一个字段上可以加多个约束
create table test(c1 number check(c1>100)); 约束c1的值大于100 ,列级约束
create table test(c1 number,check(c1>100)); 表级约束

create table child(c1 number primary key); 先要定义父表
create table child(c1 number primary key, c2 number references parent(c1)); 然后定义子表 references parent定义外键
create table child(c1 number primary key, c2 number references parent(c1) on delete cascade); on delete cascade为级联删除,删除父表时子表也被删除
create table child(c1 number primary key, c2 number references parent(c1) on delete set null); on delete set null删除后将外键置空
create table child (c1 number primary key, c2 number,foreignkey(c2) references parent(c1));

DML操作

online transaction procession OLTP 联机事务处理

1、insert操作,插入记录

insert into 表名 values(值1,值2,......);
注意这种方法插入记录时,要对所有字段进行插入,没有非空约束时,又不想插入值时,要用空值替代,并且要按照字段的顺序插值(要清楚表结构),且要注意数据类型一致。

insert into 表名(字段名1,字段名2,.....) values(值1,值2,......);
这种方法可以对指定的字段进行插入,不想插值的就可以不写,前提是该字段没有非空约束。

例:insert into student value(1,'xxx','xxx');
insert into student(id,name,address) value(1,'xxx','xxx');

注意:有空值的话:
隐式插入
INSERT INTO s_dept (id, name) VALUES (12, 'MIS');
不往想为空的字段中插数据,系统默认为NULL
显示插入
INSERT INTO s_dept VALUES (13, 'Administration', NULL);

select * from s_emp where 1=2; 这样选不出纪录,方便察看表结构

2、update修改操作

update table 表名 set 字段名1=数据1或表达式1, 字段名2=数据2或表达式2
[where ....=....];

例:update shenfenzhen set num=99 where sid=2;

3、delete删除操作

delete from 表名 [where ...=...];

例:update shenfenzhen set num=99 where sid=2;

用delete 删除一张大表会花很长的时间。
用delete操作删除的记录可以通过 rollback命令回滚操作,会恢复delete操作删除的数据。
delete操作不会释放表所占用的空间,delete不适合删除记录多的大表。
delete操作会占用大量的系统资源。

事务

OLTP ( online transaction procession ) 联机事务处理
数据库中操作的应是事务,而不是DML语句
事务是有生命周期的,commit;事务结束
系统中充满了并发的transation,每个连接是一个session,每个操作都是一个transaction
DDL、DCL语句是自动提交的
sqlplus正常退出(exit),系统自动提交
上个事务的结束就是下个事务的开始
事务保证数据的一致性,保证原子操作的安全
一个没有结束的事务,叫做活动的事务 (active transaction),活动的事务中修改的数据,只有本会话才能看见。
read committed,只可以读取已经做提交操作的数据,本会话可以看到自己的所作的没有提交的操作。

在活动事务中,当多个用户同时对同一张表进行操作时,会对表加上表级共享锁,当用户对操作该表某一条记录进行操作时会对该条记录加上行级排它锁,
只允许一个用户对该条记录进行DML操作,只有提交操作commit;或回滚操作rollback;时,才可让其他用户操作对该记录进行DML操作,也就是释放了该条
记录的行级排它锁。如果没有提交操作或回滚操作,那么该用户就不能对该条记录加锁,该用户的DML操作就会进入等待状态,但是在对表作drop操作(DDL操作)时,
如果还有用户在操作该表,也就是没有释放表级共享锁,就会直接报错。

事务越大,就会消耗更多的资源,并长时间持有事务会造成无法进行其他的操作,事物提交太频繁的话,会对I/O造成很大的负担,所以要合理确定事务的大小。
commit;提交操作,事物的结束
rollback;回滚操作,会将先前的活动事务中的操作(DML操作)的结果进行回滚,撤销全部操作,恢复成事务开始时的数据,也就是恢复成事务开始时的状态。

alter table命令

alter table 命令用于修改表的结构(这些命令不会经常用):

增加字段:
alter table 表名 add(字段字,字段类型)

删除字段:
alter tbale 表名 drop column 字段; (8i 以后才支持)

给列改名:9.2.0才支持
alter table 表名 rename column 旧字段名 to 新字段名;

修改字段
alter table 表名 modify( 字段,类型)
(此时应注意的问题,更改时要看具体值情况之间的转达换, 改为字符类型时,必须要为空)

not null约束是使用alter table .. modify (.. not null),来加上的。

alter table test modify(c11 null);

增加约束:
alter table 表名 add constraint [约束名] 约束(字段);
只能够增加表级约束。

解除约束:(删除约束)

alter table 表名 drop 约束;
alter table 表名 drop primary key;
(对于主键约束可以直接用此方法,因为一张表中只有一个主键约束名, 注意如果主键此时还有其它表引用时删除主键时会出错)

alter table father drop primary key cascade;
(如果有子表引用主键时,要用此语法来删除主键,这时子表还存在只是子表中的外键约束被及联删除了)

数据字典

数据字典是由系统维护的,包含的数据库的信息

数据字典示图
user_XXXXX 用户示图
all_XXXXX 所有示图
dba_XXXXX 数据库中所有示图
v$_XXXXX 动态性能示图

dict 表示数据字典的数据字典。

user_constraints 用户的表中约束的表
其中有constraint_name字段存放的是约束名,r_constraint_name字段表示外键引用pk或uk的名字
这两个字段之间有自连接的关系,也就是约束名和外键约束名之间的自连接。

user_cons_columns表,是用户的列级约束表

U 代表UK,R (references)代表FK,C 代表check和NOT NULL,P代表PK

找出s_emp表的主键约束
select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.constraint_name=cc.constraint_name and c.table_name=cc.table_name and c.table_name='S_EMP' and c.constraint_type='P';

练习: 列出每一个表的外键的定义,主表表名,主表字段名,子表表名,子表字段名 (画出E-R图)

alter table 表名 drop constraint 约束名;
(怎样取一个约束名:
a、人为的违反约束规定根据错误信息获取!
b、查询示图获取约束名!)

使约束失效或者生效

alter table 表名 disable from primary key; (相当于把一个表的主键禁用)

alter table 表名 enable primary key;
(enable 时会自动去检查表的记录是不是符合要求,如果有脏数据时必须要先删除脏数据才可以 enable)
分享到:
评论

相关推荐

    Oracle学习笔记精华版

    Oracle学习笔记精华版Oracle学习笔记精华版Oracle学习笔记精华版Oracle学习笔记精华版

    Oracle学习笔记

    Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记

    Oracle学习笔记 Oracle学习笔记

    Oracle非常有用的笔记。。。。。。。。。。。Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记

    oracle学习笔记 oracle学习笔记

    oracle学习笔记 oracle学习笔记oracle学习笔记 oracle学习笔记

    oracle 个人学习笔记

    oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记oracle 个人学习笔记

    Oracle学习笔记 PDF

    本文档主要是网易云李兴华老师进行授课时所作笔记,从Oracle11g数据库的安装到复杂查询做了详细的文档记录。

    Oracle学习笔记.pdf

    oracle学习笔记,包含所有oracle概念,包,函数,oracle的组成,oracle的plsq,oracle的存储过程,oracle的事务等

    oracle学习笔记-入门基础

    oracle学习笔记-入门基础-01-张园

    Oracle学习笔记.doc

    Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...

    韩顺平oracle学习笔记.pdf

    分享给需要的朋友们韩顺平oracle学习笔记.pdf 大家来下载吧!

    Oracle学习笔记-日常应用、深入管理、性能优化

    资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...

    oracle学习笔记整理

    学习oracle知识笔记整理,包括pl/sql编程,过程、函数、游标开发等。

    oracle学习笔记

    oracle学习笔记

    oracle学习笔记.txt

    超详细Oracle学习笔记,详细记录了oracle的学习过程中遇到的各种问题及基础知识,适合初中级oracle使用人员学习参考。

    Oracle学习笔记_(PDF版)

    Oracle学习笔记

    Oracle学习笔记——日常应用、深入管理、性能优化 示例代码

    Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...

    MSDN oracle学习笔记

    MSDN oracle学习笔记 很好的学习资料

Global site tag (gtag.js) - Google Analytics