一、卸载Oracle步骤如果卸不好就不能安新版本
------------------------------
1、停止所有Oracle服务
2、运行Oracle Universal Installer卸载Oracle
3、修改注册表、删除Oracle相关信息
+ Oracle软件有关键值
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle
+ Oracle服务
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 目录下的Oracle相关信息
+ Oracle 事件日志
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application 目录下的Oracle相关信息
4、删除Oracle系统目录 (eg:c:\program files\oracle)
5、删除Oracle环境变量
6、删除程序菜单项中的Oracle菜单
7、(重启系统后)删除Oracle工作主目录D:\Oracle
二、SQL语句分类
------------------------------
1、Select查询语句
2、DML语句数据操作语言----Data Manipuoation language
Insert、Update、Delete、Merge(表合并)
3、DDL语句数据定义语言
Crete、Alter、Drop、Truncate(截断)
4、DCL语句数据控制语言
Grant、Revoke
5、事务控制语句
Commit、Rollback、Savepoint
三、基础语法
------------------------------
1、连接字符串 ----------------- ||
2、字段别名 ----------------- as 如果别名中有空格或大小写别名要加双引号
3、空值 不是0也不是空格
4、去除重复行 distinct
5、排序 order by
6、条件查询 where
7、比较运算符 <,>...
8、模糊查询 Like(_ 一个字符% 多个字符)
9、空值判断 is null
10、逻辑运算符 NOT,AND,OR
11、oracle不区分大小写但字符串中的区分大小写
12、case表达式:
语法
case exp when compare_exp1 then return_exp1
[when compare_exp2 then return_exp2
when compare_expn then return_expn
else else_exp]
eg:
select empno,ename,sal,
case deptno when 10 then '财务部'
when 20 then '研发部'
when 30 then '销售部'
else '未知部门'
end 部门
from emp
13、DECODE()函数
---和case表达式类似decode()函数也用于实现多路分支结构
语法
decode(col_name,search1,result1
[,search2,result2...]
[,default]
)
eg:
select empno,ename,sal,
decode(deptno,10,'财务部',
20,'研发部',
30,'销售部',
'未知部门')
部门
from emp;
四、函数
------------------------------
函数嵌套
单行函数可以嵌套使用嵌套层次无限制
嵌套函数的执行顺序是由内到外
分类
单行函数
多行函数
分组函数最多可以嵌套两层
五、连接与子查询
------------------------------
1、如果子查询没有返回结果主查询也不会返回任何结果
2、如果子查询返回单行结果则为单行子查询可以在主查询中对其使用相应的单行记录比较运算符
3、如果子查询返回多行结果则为多行子查询此时不允许对其使用单行记录比较运算符只能用INANYALL
4、TopN查询
在ORACLE中通常采子查询的方式来实现TopN查询
语法格式
SELECT 字段列表
FROM (SELECT 字段列表 FROMtable ORDER BY 排序字段
WHERE rownum <= n
六、DML与事务控制
----------------------------------------
1、Insert语句
-----可以在insert语句中使用子查询实现表间数据拷贝:
INSERT INTO dept1(id,name) SELECT deptno,dname FROM dept
2、Merge语句
---该语句用于进行数据合并根据条件在表中执行数据的修改或插入操作如果要插入的记录在目标表中已经存在则执行更新操作、否则执行插入操作。
---语法
MERGE INTO tablename [alias]
USING (table | view | sub_query) [alias]
ON (join_condition)
WHEN matched THEN
UPDATE SET col1 = col1_val,col2=col2_val
WHEN not matched THEN
INSERT (column_list) VALUES (column_val)
3、事务控制
1、组成单个逻辑工作单元的一系列操作被称为事务。
2、数据库事务组成
---0~多条DML语句
---1条DDLData Define Language语句
---1条DCLData Control Language语句
4、事务特性(ACID)
原子性Atornicity
一致性Consistency
隔离性Isolation
持久性Durability
5、事务的开始和结束
事务开始于第一条可执行语句
事务结束
遇到commit 或rollback语句
遇到DDL 或DCL语句
用户会话结束
系统崩溃
事务的提交和回滚
显式的提交和回滚操作是为了更好的保证数据的一致性
下述情况下事务会被自动提交:
执行一个DDL语句
执行一个DCL语句
正常结束会话
会话异常终止/系统崩溃时事务被自动回滚
6、提交/回滚前数据状态
当前事务中数据状态的改变是可以恢复的
当前事务中的DML操作结果只对当前用户会话可见其它用户会话看不到当前事务中数据状态的改变直到当前事务结束。
当前事务中DML语句所涉及到的行被锁定其它用户会话不能对其进行修改操作。
7、事务提交后数据状态
数据的修改永久生效不可再撤消
数据以前的状态永久丢失无法恢复
所有的用户会话都将看到操作后的结果
记录锁被释放其它用户可对这些进行修改操作
事务中的保存点savepoints被清除
8、事务回滚后数据状态
数据的修改被撤消
数据恢复到修改前的状态
记录锁被释放
9、保存点
---通过保存点在当前的事务中创建标记将来可回退到指定的标记保存点处实现事务的部分回滚。
---用法举例
insert into dept values (22,'adf','BeiJing');
insert into dept values (23,'fda','Shanghai');
savepoint p1;
insert into dept values (24,'gdf','Tianjing');
---
select * from dept;
rollback to p1;
select * from dept;
七、DDL与数据库对象
----------------------------------------------
1、常用数据库对象
表约束条件视图索引序列同义词
2、可以使用子查询创建一个表
语法
create table tablename(col1,col2...) as subquery;
3、修改表结构----使用alter table语句
添加字段 alter table tablename add(column datatype [default expr])
修改字段 alter table tablename modify(column datatype [default expr]),不能修改字段名只可以修改类型精度
删除字段 alter table tablename drop(column)
4、清空表中数据-----truncate table tablenameDDL语句表结构还在
清除表中所有记录
释放表的存储空间
5、删除表-----DropDDL语句
表中所有数据被删除
此前未完成的事务将被提交
所有相关的索引被删除
6、重命名表-----renameDDL语句
也可以修改其它数据库对象视图序列。。。的名称
执行重命名操作的必须是对象的所有者
eg
rename old_name to new_name
7、Oracle数据库中的表
1、用户定义的表
2、数据字典表表或视图只读
8、约束
1、not null(非空)只能在字段级别定义
egcreate table student(
sid number(3) not null,--系统自动命名以SYS_cn开头
name varchar2(20),
birth date constraint student_birth_nn(约束名) not null --自定义约束名
);
2、unique (唯一性约束
egcreate table student(
sid number(3) unique, --字段级别
name varchar(20)
);
or
create table student(
sid number(3) ,
name varchar(20)
constraint student_sid_un unique(sid) --表级
);
3、primary key(主键
egcreate table student(
sid number(3) primary key --字段级别
name varchar(20)
);
or
create table student(
sid number(3) ,
name varchar(20)
constraint student_sid_pk primary key(sid) --表级
);
4、foreigh key外键
egcreate table student(
sid number(3) references tablename(id) - 字段级
name varchar(20)
);
or
create table student(
sid number(3) ,
name varchar(20)
constraint student_sid_pk foreign key(sid) references tablename(id) --表级
);
5、check (检查)只能在字段级别定义
9、建表后添加约束语法
alter table tablename add con_name primary key(id) | check ...
注非空约束必须使用modify子句添加
egalter table tablename modify (name not null)
10、删除约束语法
alter table tablename drop constraint con_name;
删除主键的另一种方式
alter table tablen 时如果还存在与该约束相关联的其它约束则删除操作会失败此时可使用cascade子句将其它关联的约束一并删除。
语法
alter table tablename drop constraint con_name [cascade]
11、在删除表中字段时如果该字段处于多字段联合约束条件联合主键联合唯一键存在参照当前字段的外键中则删除失败此时可使用 cascade constraints子句将与该字段相关的约束一并删除。
语法
alter table tablename drop [column [...column]] cascade constraints;
create table student(
student_id number(5),
subject_id varchar(20),
record number(3),
constraint record_stuID_subId_pk primary key(student_id,subject_id)
);
删除student_id:
alter table student drop student_id cascade constraints;
12、禁用约束
1、在alter table语句中还可以使用disable constraints子句禁用已有约束
2、也可以使用cascade选项将相关联的约束也一并禁用
语法
alter table tablename disable constraint constraint_name [cascade]
启用约束语法
alter table tablename cnable consrraint constraint_name;
13、视图
1、创建视图语法
create [or replace] view view_name [col_name1,col_name2...] as subquery;
2、删除视图语法
drop view view_name;
3、强制创建视图
可使用force选项强制创建视图不管表是否存在默认为noforce。
create [or replace] [force] [noforce] view view_name as subquery;
create or replace force view view_name as select * from tab_name; --假定tab_name现在不存在
4、更新视图
1、在可更新的社图上进行DML操作可以修改其基表中数据
可更新视图的定义中不能使用分组函数、group by子句、distinct关键字、rownum伪列字段的定义不能为表达式。。。
由两个经上基表中导出的视图不可更新
基表中非空的列在视图定义中未包括则不可在视图上进行insert操作。。。
2、在视图上进行DML操作语法与在表上操作相同
3、创建只读视图语法其不允许任何修改
create or replace [force] [noforce] view view_name
as subquery
[with read only];
eg:
create or replace force view myview
as select * from tab_name
with read only;
14、索引
1、什么是索引(Index)?
--一种用于提高查询效率的数据库对象
--通过快速定位数据的方法减少磁盘I/O操作
--索引信息与表独立存入
--Oracle数据库自动使用和维护索引
2、分类
唯一索引
非唯一索引
3、创建索引的两种方式
自动创建在定义主键或唯一键约束时系统会自动在相应的字段上创建唯一性索引
手动创建用户可以在其它列上创建非唯一的索引以加速查询
语法
create index idx_name on table_name(column_name)
eg: create index myindex on test(ename)
4、删除索引
drop index index_name
5、基于函数的索引
基于表达式的索引被统称为基于函数的索引——索引表达式由表中的字段、常量、SQL函数和自定义函数构建而成。
语法
create index index_name on table (function(column));
eg:
create index myindex on table_name(lower(ename));
使用索引函数
select * from emp where lower(ename) = 'king';
15、序列
1、什么是序列sequence
--系统自动生成的、不重复的整数值
--序列是一种数据库对象可以被多个用户共享
--典型用途是做为主键值它对于每一行必须是唯一的
--序列可以代替应用程序编号
--可以对序列值进行缓冲存储以提高访问效率
2、创建序列
create sequence seq_name
[increment by n]
[start with n]
[{maxvalue n | nomaxvalue }]
[{mmvalue n | nommvalue}]
[{cycle | nocycle}]
[{cache n | nocache}]
[{order | noorder}]
eg:
create sequence mysequence 1
increment by 1
start with 1
nomaxvalue nocycle;
等价于如下
create sqeuence mysequence2;
3、使用序列
nextval/currval伪列
nextval伪列用于从指定的序列数值中取出下一个值
currval伪列引用的是指定序列的“当前值”
语法格式
select mysequence1.currval from dual;
select mysequence1.nextval from dual;
insert into test1 values(mysequence1.nextval,'Tom')
说明
使用缓存cache n可提高访问效率
序列在下列情况下可能出现不连续的情况
回滚
系统异常
多个表同时使用同一序列
使用nocache和noorder设置会降低运行效率
4、修改序列
alter sequence seq_name
[increment by n]
[{maxvalue n | nomaxvalue }]
[{mmvalue n | nommvalue}]
[{cycle | nocycle}]
[{cache n | nocache}]
[{order | noorder}]
5、删除序列
drop sequence seq_name
15、同义词——给现有的数据库对象起个别名
1、同义词相当于对象的别名使用同义词可以:
方便访问其它用户的对象
缩短对象名字的长度
2、创建同义词
create [public] synonym syn_name for object
eg:
create synonym gt1 for emp;
3、使用同义词
select * from gt1;
4、删除同义词
drop synonym gt1;