Oracle 数据库
一:Oracle 关系型数据库(ORM)分布式集群数据库;
二:Oracle 8i--> Oracle 9i l=internet(网络)
三:Oracle11G --> Oracle10g = grid (网络,云计算--虚拟化技术)2002
四:Oracle 作为一个数据库, DB2数据库 -IBM
索引技术 存储过程技术 PLSQL 编程技术 ;
五:Oracle 数据库:关系型数据库 , 集群分布式数据库 , 福布斯100家公司98家都在使用 ,
六:Oracle 的标准开发:
1:Oracle 数据库 安装好了 Oracle-OraDb10g_home1
2:Oracle 实例 创建了 orcl;
3:创建自己的表空间 用来进行数据的存储没有;
4:创建自己的用户 操作自己的表空间 没有;
七:数据操作方面:(根据业务的不同在 业务层处理业务;)
数据操作方面在 ,业务上一般都会有 权限设置; 因为一些数据 是 特定的;
1:添加
添加一般就是 新增数据 ;注意添加的数据类型;
主键 一般设在 不关系业务逻辑的列上, 一般为 id ,因为唯一标识;
2:删除
删除一般就是根据 指定 id 删除, 如果是 对删除一般都是 id放在一个集合里 去循环依次删除;
删除在 业务里面是一个 ,一般为 注意项;因为不会真正删除 用户,只是给 用户 换了一个状态,查询时
不体现它,特定 条件 查询在 体现其用户 ;
3:更新
更新 ,也就是 修改数据 ,在你修改数据的 时候,注意 :要把你修改的 对象数据全部 查询出来,在把 你想 修改的 数据,覆盖掉原来的数据; 不查询全部的话,跟新保存时 会出现只有你 修改的有值,其他的都 null
修改 一般就是 ,回显数据,修改,保存;
4:查询
根据指定 id,查询;
八:Oracle 数据库sql语句:
1: sql:结构化查询语言,简称sql。
结构化查询语言是一种数据库查询和程序设计语言,
用于存储数据以及查询、更新和管理关系数据库系统;
2:分为:
a:DML(数据库操作语言):分别用于添加、修改和删除表中的行。也成为动作查询语句;
b:DDL(数据库定义语言):其语句包括动词CREATE 和 DROP。在数据库中创建新表或删除表,
为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字,
它也是动作查询的一部分;
c:DCL(数据库控制语言):他的语句通过 GRANT 和 REVOKE 获得许可,确定当个用户和用户组对数据库对 象的访问。
某些 RDBMS 可用 GRANT 或 REVOKE 控制对表单个例的访问;
九:Oracle 多表查询 、 连接查询 :
1:最基础的多表查询:
select * from 表一,表二 ;
多表查询的条数显示格式为:表一条数 * 表二条数 ;
2:多表查询中的笛卡尔积问题?
更好的做到保证数据完整,但这也促使很多数据 冗余、重复;
利用连接条件的限定 主外键关联 来解决笛卡尔积问题;
3:如果表太多的话,怎么办 表名太多、乱、繁琐 ?
使用内连接查询:(内连接的时候,靠的是主外键关联, 外建表收集外键信息,
收集好了之在与主键表关联)
a:内连接查询特点:内连接查询中,外键的字段值必须是出现在两张表;
是连接查询里查询最快的;
例子:
select * from EMP E
inner join DEPT D ON E.DEPTNO =D.DEPTNO
WHERE D.DEPTNO=10 AND LOWER(E.ENAME) LIKE 's%'
4:外连接查询:( 主 次 ):为保证连接的两张表中某一张表的数据完整;
a:左外连接:(left join)保证左表完整 如果右表没有与之匹配数据以NULL填充;
-- 查询所有部门:
select * from dept d left join emp e on d.deptno=e.deptno
-
b:右外连接:(right join)它正好与左外连接相反:
select * from emp e right join DEPT D on e.deptno=D.deptno;
注意 : 由外链接尝尝会出现左表数据为NULL的情况,这样通常第一列
又是一张表的主键,所以这样会破坏主键上的索引,查询会很慢
经验 : 所有的右连接都能以左连接代替.能用左连接不用右连接
能用内连接,不用外连接;
十:子查询:
-- 查询比员工7654工资高和员工7788从事一样工作的人
select ename from emp e where
sal >( select sal from emp e where e.empno=7654)
and
-job =( select job from emp e where e.empno=7788)
十一:连接公式:
select * from 外键表 外
内连接/外连接 join 主键表 主 on 外.外键 = 主.主键 ;
注意:一般用内连接,两个表中有一个表中的列与另一个表中的列对应不上为空,
那么用外连接,外连接一般都用左外连接;
1:外连接分为:左外连接:
右外连接:
十二:自关联:
把一张表在关联的时候,起了两个别名,模拟两张表进行了一个连接查询,这种形式叫做自关联查询;
Oracle 存取 数据:
数据存在哪里?
Oracle 数据文件 很多 并且很分散
system 能创建表空间 ,相当于我们 mysql 中的 root
1:创建表空间
CREATE tablespace 表空间名;
2:指定表空间位置
datafile '指定空间位置'(不建议放在c盘)
3:指定表空间大小
size 30m (30照)
4:关闭自动增长
autoextend off;(关闭自动增长 )
5:创建自己的普通用户:
create user 用户名;
Oracle当中用户分为 2类:
a:普通用户:创建表 增、删、改、查 像scott用户
b:管理员用户:system(数据方面的管理) sys(运维方面的管理)
我们一般不用sys ,用它只是改 system密码,sys 使用一般很危险;误删除表;
6:指定密码:
identified by 密码(一般为 orcl);
7:指定操作的表空间:
default tablespace 绑定的表空间名字;
8:给新用户赋予权限:
-- connect 角色 登录角色权限;
-- resource 更为 正式角色 开发角色:
grant connect,resource to 角色;
创建表:(切记不要看错你当前的用户)
1:登录到自己的用户上,创建表:
create table 表名(
列名 1
列名 2
列名 3
。。。。
)
删除表: drop table 表名;
面试题:删除整表的时候,那种方式比较快?第二种快;
a:delete from 表名;慢 安全 带事务 ;可以删除单条数;delete 面对的是 表数据;
-- 这种删除在删除的时候带事务删除,删除之前要备份一下你的数据,因为有回滚;
b:truncate table 表名;快 危险 不带事务 ;不可以删除单条数据,truncate 面对的是表结构;
-- 这种删除在删除的时候,没有带事务,一旦删除,没有回滚;
-- 他的删除方式为:先把你的数据文件中数据都删掉,在根据你的表结构创建回来;
2:
Oracle 里的数据类型:
varchar2(size) :可变长字符数据;
char(size) :定长字符数据 ;
number(p,s) :可变长数值数据;(java中也有number,所有数字类型的父类就是 number)
表示存储 数字(整数、小数)
p: 有效位数;(去掉负号和小数点 从左开始数)
s: 代表保留几位小数;
date :日期型数据类型
时、分、秒 也是这个;
LONG : 可变长字符数据,最大可达到2 G;
clob : 字符数据,最大可达 4 G;
raw and LONG RAW :原始的二进制数据;
blob : 二进制数据,最大可达到 4 G;
bfile :存储外部文件的二进制数据,最大可达到 4 G;
rowid :行地址 ;
、
注意:编程语言中的统一数据类型
数据类型一共分为四类:(就像人的一生,)
-- 出生
1:数值数据类型 (java 中一般其实是分为两种:数值数据类型和非数值数据类型)
-- 大一点
2;字符数据类型
-- 小学
3:时间和日期数据类型
-- 中学 高中 大学 成人
4:文件数据类型 (声音 图片 视频)--> 二进制数据类型
创建完表之后,操作表:
1: 添加数据:
insert into 表名
(第一个括号里面写你要添加的列名;例如:pid、name、。。)
values
(第二个括号里面写,对应第一个括号的列名要添加的数据;);
2: 在执行这种增 删 改 的时候得事务:
-- 提交:
commit;
-- 回滚事务:
ROLLBACK;
3 :更新语句:
update 表名 set 修改的列名= 要修改的内容,......
where rowid ='你要修改的记录的id'
4: 获取rowid : select rowid,别名 . * from 表名 别名;
5: 删除数据:(根据指定 id,id相同用 rowid 删除);
delete from 表名 where pid/rowid ;
6: Oracle 事务操作:
Oracle 事务操作 增、删、改 必须显示 提交或回滚 ;
事务隔离级别:1 2 4 8 数据 : 脏读 、幻读、虚读、不可重复读 ;
事务的四大特性: 原子性 一致性 隔离性 持久性 ;
一旦增删改,不提交事务,当你退出登录,在登录跟没操作之前一样;
Oracle 数据库有一个事务特性:事务点:如果那条数据你只想添加指定的几条的话,就在那你想添加的条数后面加上一个事务点,
SAVEPOINT a;然后在你不想要的条数后面 ROLLBACK TO SAVEPOINT a; 在提交事务 commit;
你不想添加的 数据就不会去添加;
a:Oracle 中事务隔离级别与隔离性:
1):读未提交数据:
允许事务读取未被其他事务提交的变更,脏读、不可重复读和幻读的问题都会出现;
2):读已提交数据:
只允许事务读取已经被其他提交的变更,可以避免脏读,但不可重复读和幻读问题任然可能出现;
3):可重复读:
确保实物可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行
更新,可以避免脏读和不可重复读,但幻读的问题仍然存在;
4):串行化:
确保事务可以从一个表中相同的行,在这个事务持续期间,禁止其他事务对该表插入、更新和删除操作,
所有并发问题都可以避免,但性能十分低下;
Oracle 支持的3种事务隔离级别:读未提交数据 、串行化、READ ONLY;
Oracle 默认事务隔离级别为:读已提交数据;
7: Oracle 数据约束:
1):我们为什么使用约束?
使用约束可以更好的保证数据的完整性;
2):在 Oracle 数据库中,约束的类型包括:
a:主键约束(Primary Key)
b:非控约束(Not Null)
c:唯一约束(Unique)
d:外键约束(Foreign Key)
e:检查性约束(Check)
3):主键约束: 主键约束(Primary Key)
一个表只有一个主键约束,主键约束不可重复,
主键约束一般设在无关有业务逻辑的列上,一般设为 id列;
a:例子:建表是直接添加 ;
pid number(10) primary key;
b:表键成之后添加主键约束:
alter table 表名 add constraint 起一个名 primary key (pid);
Oracle PL/SQL 编程语言:
1: 假如 A 公司 是 mysql 数据库,B 公司是 Oracle 数据库,他们的数据交互,表结构不一样;
这是就用到了 数据迁移技术;
这就用到了 PL/SQL ,PL/SQL 具有一定的业务逻辑;
2:解决 PL/SQL 报错问题:
PL/SQL 也有着非常丰富的异常处理机制;
1):预定义异常: