📄 oracle(day4).txt
字号:
一、约束
约束是针对表中的字段进行定义的。
primary key (主键约束 PK)保证实体的完整性,保证记录的唯一
主键约束,唯一且非空,并且每一个表中只能有一个主键,有两个字段联合作为主键,只有两个字段放在一起唯一标识记录,叫做联合主键。
foreign key (外建约束 FK)保证引用的完整性,
外键约束,外键的取值是受另外一张表中的主键或唯一值得约束,不能够取其他值,只能够引用主键会唯一键的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想创建子表,就要先创建父表,后创建子表,记录的插入也是如此,先父表后子表,删除记录,要先删除子表记录,后删除父表记录,要修改记录,如果要修改父表的记录要保证没有被子表引用。要删表时,要先删子表,后删除父表。
unique key(唯一键),值为唯一
index(索引)是数据库特有的一类对象,view(示图)
典型的一对多 class 对应多个学生。
student table class table
______________________________ _________________________
| id | name | address| class_id| | id |class_desc|class_num|
|(PK)|______|________|___(FK)__| |(pk)|__________|_________|
| | | | | | | | |
一对一
student tabel shenfenzheng table
____________________ _________________________________
| id | name | address| | s_id |shenfen_desc|shenfen_num|
|(PK)|______|________| |(PK,FK)|____________|___________|
| | | | | | | |
多对多
student tabel zhongjian table kecheng table
____________________ _________________________________ __________________
| id | name | address| | s_id |shenfen_desc|shenfen_num| | kid | kechengname|
|(PK)|______|________| |(FK,FK)|____________|___________| | (PK)|____________|
| | | | |联合主键| | | | | |
引用对方表的主键,当作本身的主键,所以这个表的主键,既是主键又是外建
建表和其他相关操作
DDL语句
创建表:
create table 表名 ( 字段名1 类型(数据长度)(default ...) 约束条件, 字段名2 类型(数据长度) 约束条件 );
Oracle数据库中的数据类型
varchar(长度),可变长字符串,char(长度) 定长
number(..,..),number 表示浮点数,或者是整数
long 大对象,clog 字符的大对象,相当于文本文件在表中只存放一个相当于只针对值
blog 二进制的大对象,也是以相当于指针的形式存放的。
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)
多对对多关系,一般都通过一张中间表来分解成两个一对多的表
建立表
create table[schema]table
schema: 一个用户对应一个schema 不同用户下的表不能互相查看
select count(*) from s_dept; <===> select count(*) from sd0611.s_dept;
一个表中只能存储一个LONG类型
CLOB 存储大的文本对象
BLOB 存储大的二进制对象
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 parent(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 cascate); on delete cascate为级联删除
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,foreign key(c2) references parent(c1));
二,数据字典
数据字典是由系统维护的,包含的数据库的信息
数据字典示图
user_XXXXX 用户示图
all_XXXXX 所有示图
dba_XXXXX 数据库中所有示图
v$_XXXXX 动态性能示图
dist或 distionary 表示数据字典的数据字典。
user_constraints 用户的表中约束的表
其中有constraints_name字段存放的是约束名,r_constraints_name字段表示外键引用pk或uk的名字
这两个字段之间有自连接的关系,也就是约束名和外键约束名之间的自连接。
user_cons_column表,是用户的列级约束表
三、DML操作
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 ...=...];
例: delete from s_emp where sid=2;
用delete操作删除的记录可以通过 rollback命令回滚操作,会恢复delete操作删除的数据。
delete操作不会释放表所占用的空间,delete不适合删除记录多的大表。
delete操作会占用大量的系统资源。
四、事务
OLTP ( on line transaction procession ) 联机事务处理
数据库中操作的应是事务,而不是DML语句
事务是有生命周期的,commit;事务结束
系统中充满了并发的transation,每个连接是一个session,每个操作都是一个transaction
DDL、DCL语句是自动提交的
sqlplus正常退出(exit),系统自动提交
上个事务的结束就是下个事务的开始
事务保证数据的一致性,保证原子操作的安全
一个没有结束的事务,叫做活动的事务 (active transaction),活动的事务中修改的数据,只有本会话才能看见。
readcommited,只可以读取已经作提交操作的数据,本会话可以看到自己的所作的没有提交的操作。
在活动事务中,当多个用户同时对同一张表进行操作时,会对表加上表级共享锁,当用户对操作该表某一条记录进行操作时会对该条记录加上行级排它锁,
只允许一个用户对该条记录进行DML操作,只有提交操作commit;或回滚操作rollback;时,才可让其他用户操作对该记录进行DML操作,也就是释放了该条
记录的行级排它锁。如果没有提交操作或回滚操作,那么该用户就不能对该条记录加锁,该用户的DML操作就会进入等待状态,但是在对表作drop操作(DDL操作)时,
如果还有用户在操作该表,也就是没有释放表级共享锁,就会直接报错。
事务越大,就会消耗更多的资源,并长时间持有事务会造成无法进行其他的操作,事物提交太频繁的话,会对I/O造成很大的负担,所以要合理确定事务的大小。
commit;提交操作,事物的结束
rollback;回滚操作,会将先前的活动事务中的操作(DML操作)的结果进行回滚,撤销全部操作,恢复成事务开始时的数据,也就是恢复成事务开始时的状态。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -