--外键约束(一般建议在项目中不用,谁用最后谁会哭)
--使用条件:发现在插入表数据时发现不同的表数据之间存在依赖关系的校验。
--如何选取外键:一般将父表的主键作为子表的外键使用
--优缺点:
--优点:避免了垃圾数据的产生
--缺点:使用了主外键关联的表,父表中的数据不能直接删除
--使用级联操作
--添加外键约束时最后加上 on delete cascade 在父表执行删除动作时,会自动的将子表中关联的数据删除。
--在添加外键约束时最后加上 on delete set null
--添加方法3种,
--1.直接在字段后添加
create table usre(
usid varchar2(10) reference usre22(ussid) ,
--表名 --字段名
........
);
--2.在创建表的后面
create table usre(
usid varchar2(10),
......
constraints fk_usre_usid foreign key(usid) reference usre22(ussid),
);
--3.在创建表的后面
create table usre(
usid varchar2(10),
......
);
alter table usre add constraints fk_usre_usid foreign key(usid) reference usre22(ussid);
级联:
--CASCADE指当删除主表中被引用列的数据时,级联删除子表中相应的数据行。在父表执行删除动作时,会自动的将子表中关联的数据删除
alter table usre add constraints fk_usre_usid foreign key(usid) reference usre22(ussid) on delete cascade;
--SET NULL指当删除主表中被引用列的数据时,将子表中相应引用列的值设置为NULL值。SET NULL有个前提就是外键引用列必须可以设置为NULL。
alter table usre add constraints fk_usre_usid foreign key(usid) reference usre22(ussid) on delete set null;
--序列
--作用:序列自增作为主键来使用
--使用:其实就是创建了一个具备初始值,并且可以指定自增的变量
--语法规范:
--create sequence 表名_字段名;默认自增+1
-- 属性值(可以省略写)
--increment by 步长 ,默认值是1
--start with 初始值,默认值是0
--maxvalue 最大值,很多99999····
--minvalue 最小值,默认值是1
--注意;
--1.序列其实就是创建一个可以自增的变量和表没有直接关系,只是恰好作为主键使用
--2.序列的初始值为表数据的最大主键值+1
----创建序列
create sequence usre_usid;--创建默认序列
--查询序列当前值
select usre_usid.currval from dual;
--序列自增
select usre_usid.nextval from dual;
--创建自定义序列
create sequence usre_usid
increment by 1
start with 11
maxvalue 666666
minvalue 1;
--使用序列作为主键值使用
insert into usre values(usre_usid.nextval,'Oracle','2222')
--索引
--给指定的字段创建索引目录,提升检索效率
--注意:索引是显式的创建,隐式的调用,主键会默认创建索引
--创建单字段索引
create index index_emp_empno on emp(sal);
--创建排序索引
create index index_emp_mgr on emp(mgr desc);
--创建多字段索引
create index index_mgr_sal on emp(mgr,sal);
--删除索引
alter index index_emp_empno;
--视图
--作用和特点
--保护表中的重要数据和字段
--简化多表查询操作
--给指定的表创建指定的视图
--create view 视图名 as 查询语句create view v_emp as select * from emp;
--多表的视图
create view v_ed4 as (select e.name,d.* from dept d,emp e where e.deptno=d.deptno);
--删除视图中的数据
delete from v_emp where empno='8888';
--更新视图中的数据
update v_emp set sal=3500 where empno=7369;
--删除视图
drop view v_emp;
--数据库的分页
--rownum:oracle的伪列,用来表示行号
--注意:
--1、rownum的值是动态改变的,只和数据的位置相关
--2、rownum不能够进行>,>=;=关系运算
--使用rownum关键字显示查询结果集的行号
select rownum,e.* from emp e;
--使用rownum关键字获取前N条数据
select rownum,e.* from emp e where rownum=4;--错误
select rownum,e.* from emp e where rownum>5;--错误
--将emp表进行分页查询,每页5条数据,查询第二页的数据
select rownum,e.*from emp e where rownum<=15
minus --使用minus做数据的减法实现
select rownum,e.* from emp e where rownum<=10;
--使用rownum关键进行多次查询
select m.* from (select rownum r,e.* from emp e where rownum<=10)m where r>5; --没有排序的分页
select * from (select rownum r_outer,m.* from (select rownum r_inner,e.* from emp e order by sal) m where rownum<=10);--排序后的分页
备份
----使用plsql工具备份
--备份表结构
--工具中的导出用户对象,导出选择的指定表结构,导出的是sql文件。
--备份表结构和表数据
--工具导出表,导出的是dmp文件,二进制文件
--备份表数据
--备份查询到的数据
----使用oracle命令进行备份
--使用导出命令 exp
-- 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
-- 2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
--3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
-- 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
--使用导入命令 imp
-- 1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
-- 2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1) */