设为首页 加入收藏

TOP

oracel总结(四)
2014-11-21 17:08:56 来源: 作者: 【 】 浏览:70
Tags:oracel 总结
pt.deptno)
where t1.grade =
(
select min(grade) from v$_dept_avg_sal_info
); 8、比普通员工的最高薪水还要高的经理人名称
select ename from emp
where empno in (select distinct mgr from emp where mgr is not null)
and sal >
(select max(sal) from emp where empno not in
(select distinct mgr from emp where mgr is not null)); 9、面试题:比较效率
select * from emp where deptno = 10 ename like ‘%A%’;
select * from emp where ename like ‘%A%’ and deptno = 10;
上面的速度快:原因:int类型的检索速度比string类型的检索速度快,理论上是这样。
但实际中不见得是这样,因为很有可能oracle对这些东西做了优化。 10、给数据库建立不同得用户,把相关的表给他到过去,让他在单独的不同的空间里做试验。


oracle的逻辑结构:一个大数据库,又分为不同的表空间,这个表空间就是放表的地方,
eg:emp、dept、salgrade这三张表就放在,users这个表空间里,在这个表空间里放在scoot这个用户所有的表,也就是scott用户所有拥有的表。当你以scott用
户登陆以后,其实你访问的是users这个表空间里的表。当两个人都以scott用
户登陆,都对users这个表空间里的表进行操作,这时就会存在数据不一致的问
题,怎么解决这个问题:


oracle怎么解决多用户的问题: 就是我在服务器上,新建个用户liuchao,然后在users这个表空间里,liuchao这个用户分配一块表空间,然后再把他要用的表,导到给他分配
的表空间里,这样就不会存在数据不一致的问题了,以后liuchao登陆时,访问
的就是,给他分配的表空间里的表。 一、oracle创建新用户,导出、到入scott用户的所有东西。(这个就是从oracle中导出、导入数据的步骤!!)


1、用超级管理员登陆,只有超级管理员才能创建用户。
conn sys/bjsxt as sysdba;
2、删除用户
drop user liuchao cascade;
3、backup scott 备份scott这个用户相关的表和其他东西。
exp 导出scott用户的所有东西,这里可能也包括其他用户导出的数据。在下面导入的时候,要求
输入一个用户名,这个用户名添scott,意思是:把scott这个用户的东西导入进去,不导入
其他用户的东西。
缓冲区:内存里的一个小区域,填满了之后再统一的拿到硬盘上来。
4、create user liuchao identified by liuchao default tablespace users quota 10M on users;
创建一个用户,他的用户名和密码都是liuchao,他登陆时默认的表空间是users,并且
给这个用户分配10M的表空间,也就是说这个用户只能往users这个表空间里,放10M的数据。
5、给新建的用户分配权限。
grant create session,create table,create view to liuchao
给这个用户登陆的权限、创建表的权限、创建视图的权限。
6、把导出的scott用户的所有东西,导入到新创建的用户的表空间里去。
import the data
imp
11、insert语句:可以按着顺序所有字段都进行插入,也可以插入特定的字段的值,只要把这个字段的值写出来就可以了。
insert into dept valus(50,’game’,'bj’);
注:为什么game要加”,因为dname是string类型的,也就是varchar2在数据库里的显示,所以说当字符串入库时,必
须加上”,而int类型的就不用加”。 insert into dept (deptno,dname) values(’60′,’game2′);
这个就是只插了两个字段,并不是所有字段都出入数据。


利用子查询插入数据,但注意的是dept数据的类型和dept2的数据的类型必须一样。
insert into dept2 select * from dept;


12、恢复数据
rollback
对某张表进行备份:create table emp2 as select * from emp;


13、数据库设计的三范式


范式:数据库设计的规则。
三范式追求的原则:不存在冗余数据,意思是:同样的数据不存第二遍。 第一范式:
1、设计任何表都要又主键。
2、列不可分,但也不能重复。意思是:列分到不能再分为止,也就是说不能把学号、姓名、年龄放到一个字段里,要分成三个字段。一个字段怎么放:0123_张三_23 取出这个字段之后,再做字符串分割。 第二范式:多对多关系表设计的时候,你所应该遵循的一种东西。
当一张表里有多个字段作为主键的时候,非主键的字段不能够依赖于部分主键,也就是不能
存在部分依赖。也就是说:在学生3这张表中,学生姓名这个字段依赖于学生编号这个字段,但学生编号在这张表里不是主键,也就是学生姓名依赖于部分主键学生编号,在这张表里,
学生和教师的编号,才是主键,这种存在部分依赖就是存在着冗余字段。 多对多的关系:拆分成三张表。
eg:求教张三这人老师的名字。三张表关联。
select te_name from te join su_te on (te.id = su_te.teId) join su on (su_te.suId = su.id) where su_name = ‘张三’; 分成三张表的好处:不用张老师的姓名每出现一次,就存一次,只在教师表里存一次就够了不存在冗余字段,如果向上面设计成一张表,张老师的姓名每出现一次,就要存一次。
第三范式:存在传递依赖:意思是:其他字段必须直接依赖于主键,而不能依赖于其他字段。
eg:班级编号依赖于主键学号,而班级名字并不是依赖于学号,它依赖的是班级编号,所以说,班级名字和班级信息就是冗余字段,在su这张表里,只留班级编号这个字段就可以,其他字段放到另一张表里,班级表里。 eg:张三这人他所在班级的名称:
select class_name from class join su on (su.classId = class.id) where su_name = ‘张三’;


首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据库选择题 下一篇如何用JavaScript启动bat文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: