ORACLE 基础概念和知识结构

本文介绍了Oracle数据库的基础知识,包括表空间的概念及其组成,如默认表空间和临时表空间的作用。同时,文章阐述了角色在权限管理中的应用。详细讲解了SQL语句的三大类别:DML、DDL和DCL,以及事务处理的重要性。通过实例展示了DML操作如INSERT、UPDATE、DELETE和SELECT,并解释了如何使用SAVEPOINT和ROLLBACK进行事务管理。
摘要由CSDN通过智能技术生成
概念:
数据库中的基本概念:
表空间:1:表空间是数据库的逻辑存储设备, 它把数据库信息组织成物理存储空间. 
		2:表空间由数据文件组成.用户的各种模式对象(如表, 索引, 过程, 触发器等) 都是放在表空间中.
        3:对每个数据库用户, 都可以设置一个默认表空间. 当用户创建一个新的数据库对象(如表), 并且不明确地为此对象指定表空间时,
		   Oracle 会把所创建的这个新数据库对象存放到用户默认的表空间中. 
		4:如果不给用户指定默认表空间, 则用户的默认表空间为 USERS 表空间.  
		5:一般, SQL 语句在完成任务时需要临时工作空间. 例如:一个用来连接和排序大量的查询需要临时工作空间来存放结果. 除非另外指定,
		   一般情况下, 用户的临时表空间是 TEMP 表空间.
		6:若数据库中没有创建 TEMP 表空间, 则用户的临时表空间为 SYSTEM 表空间. 
		7:因为 SYSTEM 表空间是用来保存数据库系统信息(数据库自身信息的内部系统表和视图 ---- 数据字典; 
		   所有 PL/SQL 程序的源代码 ---- 包括函数, 触发器等)的. 如果用户大量使用此表空间存储自己的数据, 
		   将会影响系统的执行效率. 因此一般不建议用户使用 SYSTEM 表空间

		   
角色  数据库应用程序所需要的系统权限和对象权限很多. 为了使 ”安全管理” 成为比较容易的工作, 可以利用角色
角色(role): 系统权限和对象权限的一个集合. 可以将角色授予 用户, 被授予角色的用户会自动拥有角色所具有的权限. 
     如果修改了角色所拥有的权限, 则被授予角色的用户的权限也会随之自动修改.
	 
SQL语句分为以下三种类型:
DML: Data Manipulation Language 数据操纵语言;
     DML用于查询与修改数据记录,包括如下SQL语句:
	   INSERT:添加数据到数据库中
	   UPDATE:修改数据库中的数据
	   DELETE:删除数据库中的数据
	   SELECT:选择(查询)数据:SELECT是SQL语言的基础,最为重要。
DDL:  Data Definition Language 数据定义语言;
      DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
       CREATE TABLE:创建数据库表
	   ALTER  TABLE:更改表结构、添加、删除、修改列长度
	   DROP TABLE:删除表
	   CREATE INDEX:在表上建立索引
	   DROP INDEX:删除索引
DCL:  Data Control Language 数据控制语言
      DCL用来控制数据库的访问,包括如下SQL语句
	  GRANT:授予访问权限
      REVOKE:撤销访问权限
      COMMIT:提交事务处理
      ROLLBACK:事务处理回退
      SAVEPOINT:设置保存点
      LOCK:对数据库的特定部分进行锁定

   	 
事物:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
  数据库事务由以下的部分组成:
  一个或多个DML 语句
  一个 DDL(Data Definition Language – 数据定义语言) 语句
  一个 DCL(Data Control Language – 数据控制语言) 语句
以第一个 DML 语句的执行作为开始
以下面的其中之一作为结束:
COMMIT 或 ROLLBACK 语句(使用COMMIT 和 ROLLBACK语句,我们可以: 确保数据完整性。数据改变被提交之前预览。将逻辑上相关的操作分组。)
DDL 语句(自动提交)
用户会话正常结束
系统异常终止
脚本:
以下列举DML,增删改查常用的sql

使用 SAVEPOINT 语句在当前事务中创建保存点。
使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。

提交或回滚前的数据状态:
	改变前的数据状态是可以恢复的
	执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正
	其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
	DML语句所涉及到的行被锁定, 其他用户不能操作。

提交后的数据状态:
	数据的改变已经被保存到数据库中。
	改变前的数据已经丢失。
	所有用户可以看到结果。
	锁被释放,其他用户可以操作涉及到的数据。
	所有保存点被释放。



--插入语句
insert into t_emp03 values(11,'A',to_date('2015/08/15','yyyy-mm-dd') ,0.12);
select * from t_emp03;
insert into t_emp03(id,name,hire_date,salary)
values(2,'B',to_date('2015-08-15','yyyy-mm-dd') , 0.13);
--依赖其他表的插入
insert into t_emp03  select t.employee_id ,t.first_name ,t.hire_date ,t.salary from employees t;

--修改数据
update t_emp03 t set t.salary = 0.16  where t.id = '11'; 

--删除数据
select * from t_employees;
delete  from t_employees t where t.employee_id = 100;
delete  from t_employees t where t.department_id = (select i.department_id from departments i where i.department_name like '%Public%' );
savepoint A;
delete  from t_employees t where t.employee_id = 104;
savepoint B;
rollback to savepoint A;
rollback;

--查询语句
select * from employees t
where (t.salary in (1000,4000,7000))
and (first_name like '%a%');
--员工中名字第二位字符是a的员工
select * from employees t where t.first_name like '_a%';
--员工部门是60 工资由高到底排序 desc   asc(由底到高 默认)
select * from employees t where t.department_id = 60 order by t.salary desc;

select concat('hello','world'),substr('helloworld' , 2,4),length('helloworld') from dual;

select '12'+2 from dual;

select t.hire_date , t.employee_id from employees t where to_char(t.hire_date , 'yyyy-mm-dd') = '1994-06-07';
select t.hire_date , t.employee_id  from employees t where to_date('1994-06-07' ,'yyyy-mm-dd') = hire_date;
select to_char(t.hire_date ,'yyyy"年"mm"月"dd"日"') , t.employee_id from employees t where to_char(t.hire_date , 'yyyy"年"mm"月"dd"日"') = '1994年06月07日';
select to_char(123456789.01,'$00000,999,999.99') from dual ;
select to_number('$001,234,567.89','$000,000,999.99') from dual;--$符号要一致

--当department_id为空的时候   输出没有部门
select t.last_name ,nvl(to_char(t.department_id ,'99999') ,'没有部门')  from employees t;
--
select t.last_name ,nvl2(t.commission_pct ,t.commission_pct+0.015,0.01) from employees t;

--若部门号是10 则打印其工资的1.1倍,如果部门号是20 则打印其工资的1.2 ,30号部门打印其工资的1.3倍

select t.first_name ,t.department_id ,case t.department_id when 10 then t.salary*1.1 
                                                           when 20 then t.salary*1.2
                                                           else t.salary*1.3 end new_sal
from employees t where t.department_id in(10,20,30);

select t.first_name ,t.employee_id ,decode(t.department_id , 10 , t.salary*1.1,
                                                             20 , t.salary*1.2,
                                                             t.salary*1.3)new_sal
from employees t where t.department_id in(10,20,30);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值