Oracle笔记(一)

SQL的类型
1.DML(Data Manipulation Language 数据操作语言): insert update delete select
2.DDL(Data Definition Language 数据定义语言): create/alter/drop/truncate table
                                                              create/drop view/sequence/index/synonym
3.DCL(Data Control Language 数据控制语言 ): grant revoke(26-管理用户安全.avi)

&--地址符 (很灵活,可以用在几乎所有的地方。)
字符和日期需要加上‘单引号,在后面输入数值的时候,就可以不用写单引号’
可以用在任何DML语句。例如查找:
SQL> select ename,&t from emp;
------------------------------------------------插入insert into
SQL> insert into emp(empno,ename,sal,deptno)
  2  values(1001,'Tom','1000',10);
一次性将emp中所有10号部门的员工插入到emp10
SQL> insert into emp10
  2  select * from emp where deptno=10;
隐式方式: 在列名表中省略该列的值。
显示方式: 在VALUES 子句中指定空值。
SYSDATE记录当前系统的日期和时间

处理数据
更新数据
使用 UPDATE 语句更新数据
update emp set sal=1600 where empno=7499


删除数据
delete 和truncate区别
1. delete逐条删除;truncate先摧毁表 再重建
2. **** delete 是DML(可以回滚), truncate是DDL(不可以回滚)
3. delete不会释放空间 truncate会
4. delete会产生碎片;truncate不会
5. delete可以闪回;truncate不可以

删除后产生的碎片会影响查询的速度
Oracle有工具移出碎片,把不连续的数据移动到一起。
行移动:alter table emp enable row movement;
闪回:flashback 

删除数据,delete速度快0.09秒
truncate删除速度慢1.15秒
在MySQL里面truncate速度快

Oracle中的事务
事物是由一个或多个DML语句组成,要么全部成功,要么全部失败
1. 起始标志: DML
2. 结束标志: 提交:  显式 commit
                    隐式 正常退出exit,DDL
             回滚:  显式  rollback
                    隐式  非正常退出,掉电,宕机

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

Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. 
Oracle 默认的事务隔离级别为: READ COMMITED 

在MySQL里如果完全不希望别的事物打扰,可以实现SERIALIZABLE串行(事物是单线程的)
在Oracle里面有一个Read only的自定义隔离级别,可以完成类似的功能

所以在Oracle里面有三种隔离级别,READ COMMITED,SERIALIZABLE.和自定义隔离级别,例如READ ONLY
两种事物
1.  本地事务:
2.  全局事务:操作本地事物以外的资源,例如邮件,短信等等
JTA: Java transaction API
weblogic
jboss
隔离级别
READ COMMITED
SERIALIZABLE串行(事物是单线程的)
read only,Oracle额外支持的隔离级别

创建表和管理表
对象---------------描述
表----------基本的数据存储集合,由行和列组成。
视图--------从表中抽出的逻辑上相关的数据集合。
序列--------提供有规律的数值。
索引--------提高查询的效率
同义词------给对象起别名

-----------------------------------创建表,注意创建新用户的时候,需要有创建表的权限
VARCHAR2(size) 可变长字符数据
CHAR(size)           定长字符数据
NUMBER(p,s)           可变长数值数据
DATE                 日期型数据
LONG                  可变长字符数据,最大可达到2G
CLOB                 字符数据,最大可达到4G
RAW and LONG RAW 原始的二进制数据
BLOB                 二进制数据,最大可达到4G
BFILE                 存储外部文件的二进制数据,最大可达到4G
ROWID                 行地址(伪列,相当于指针,指向数据文件的位置)

CREATE TABLE person 
(pid NUMBER PRIMARY KEY NOT NULL ,
 name VARCHAR(30) NOT NULL , 
 tel VARCHAR(50) NOT NULL UNIQUE , 
 age NUMBER  CHECK(age BETWEEN 0 AND 150) 
) ; 
INSERT INTO person(pid,name,tel,age) VALUES (11,'张三','1234567',30); 

datalink用在分布式数据库的,数据库链路
-----------------------------------------alter 修改表
SQL> alter table test1 add photo blob;                           增加一列
SQL> alter table test1 modify name1 varchar2(40);        修改一列
SQL> alter table test1 drop column photo;                     删除一列
SQL> alter table test1 rename column name to name1;        重命名一列

SQL> truncate table test1;        清除表内容。(先摧毁表,再重建表结构)
SQL> rename test1 to test2;     重命名表
SQL> drop table test2;              删除表

-----------------------------------------Oracle的回收站 recyclebin
SQL> show recyclebin             显示回收站内容
SQL> select * from "BIN$OUTY6JXGRB2B0bToxqJBjw==$0";  显示回收站的表,引号里面是回收站的名字
SQL> purge recyclebin;           清空回收站

约束
约束是表一级的限制,如果存在依赖关系,约束可以防止错误的删除数据
约束的类型:
NOT NULL            不为空
UNIQUE                唯一额
PRIMARY KEY        主键
FOREIGN KEY        外键(副表的主键才能作为子表的外键)
CHECK                   检查性约束        

ON DELETE CASCADE: 当删除父表时,级联删除子表记录
ON DELETE SET NULL: 将子表的相关依赖记录的外键值置为null(一般使用此种方式)
  
SQL> create table test2
  2  (tid number,
  3   tname varchar2(20),
  4   gender varchar2(10) check (gender in ('男','女') ),
  5   sal number check ( sal > 0)
  6  );
没有给约束起名字,Oracle会自动给约束文件名起名,例如SCOTT.SYS_C005393。

主表的外键,必须是副表的主键
删除副表中被主表引用的列

CONSTRAINT   定义一个约束文件的名字 emp_salary_min(可以不进行定义)
定义多个约束,再写一个constraint就可以了,不要用逗号,隔开,因为用逗号隔开就是下一句话了

创建表不加入约束,可以后续可以用alter table student add (constraint pk_deptno primary key(dno));来加入约束

其它数据库对象
sqlplus sys/password as sysdba 密码认证
sqlplus /as sysdba 主机认证(所在用户必须是Oracle DBA组内)

视图:提供有规律的数值。
视图view是不存数据的,数据存储在视图所依赖的表中。(创建方式和表是一样的)
视图可以设置权限,权限可以设置只读或者修改。
视图不能提高性能,提高性能只有优化sql语句
SQL> create or replace view empinfoview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annlsal, d.dname
  4  from emp e,dept d
  5  where e.deptno=d.deptno
  6  with read only;

银行的项目,一般给视图,或者给的是同义词
划掉的部分一般不用

序列: 提供有规律的数值。(存在于内存中)
序列-->数组-->内存(因为在内存中,系统异常内存会清空,所以再操作是从下一个数组中取)
          [1,2,3,4,5,6....20]
维护一个指针,初始为0。
初始的序列,应该使用NEXTVAL   

increment   数组每次增加多少
start with   从那个数开始
cycle  cycle,自己需要维护      nocycle 系统自己维护
cache n   缓存,数组储存多少个               nocache  没有缓存,数组大小为1
SQL> create table tableA
  2  (tid number,
  3   tname varchar2(20));


索引

二叉树
B树(平衡树)
平衡二叉树

位图索引(权重来进行计算)


grant create synonym to scott   授权给scott

权限分为两种
系统权限
对象权限

同义词  [public] 参数表示共有同义词,大家都可以访问
默认是私有同义词,一般都是创建私有同义词

PLSQL 最快的SQL语句
应该写成PLSQL语句,再用java调用PLSQL

declare
    --说明部分(如果没有说明部分没有,declare可以省略)
begin    (开始)
--程序
dbms_output.put_line(程序包,成为存储过程或者存储函数)
end;(结束)

set serveroutput on 打开输出

上面的,相当于java的API 一共有198个包
下面的相当于语法

操作数据库最快的语言是PL/SQL

什么是PL/SQL?
PL/SQL(Procedure Language/SQL)
PLSQL是Oracle对sql语言的过程化扩展(不同数据库有不同的语言)
指在SQL命令语言中增加了过程处理语句(如分支(if,else、循环等),使SQL语言具有过程处理能力


PL/SQL纯面向过程
java面向对象

说明变量  (char, varchar2, date, number, boolean, long)
number(7,2) 定义7位的数?,有两位小数
my_name emp.ename%type;    类型与这个表中的这个列一样
emp_rec emp%rowtype; 记录型变量,表示这个表中的一行
引用其中的某个列  emp_rec.ename = 'ADAMS';

into  另一种赋值方式

 


循环3此,1..3是

控制光标很方便

fetch关键字,从光标中取c1赋给pename
光标的初始是指向第一条记录的,取一行自动跳到下一行



open cemp;相当于执行上面定义光标的语句
into后面的顺序必须和定义的顺序一样

光标的属性
isopen   是否打开?
rowcount
notfound  找到了就是false,没有找到就是true


光标参数的查询,显示包含cursor的参数
SQL> show parameters cursor
SQL> alter system set open_cursors=400 scope=both;
参考以下视频

带参数的光标,参数必须要指定类型

定义和打开的时候,带参数和不带参数的光标不同。

开发数据库的方法:
(瀑布模型,开发过程,用的很多)
一,需求分析
    1.概要设计(high level design)
    2.详细设计(low level design)
                coding 编码
                        测试
                                部署运营
    


开发项目的时候,尽量不要访问数据库

边界值测试(临界值测试)


存储过程,存储函数和触发器
java中不可以直接调用PLSQL,需要调用存储过程来完成

存储过程没有返回值,存储函数可以通过return子句返回值

创建存储过程的语法   as 不能省略

exec (execute简写)

如果有一个返回值,就用存储函数,否则就用存储过程


用java调用Oracle
用CallableStatement类
RDBMS关系型数据库管理系统

拷贝jar包
或者第一个

hotspot-->Sun
Jrockit(Oracle)-->BEA
Mission Control(带一个诊断调优工具)


包头来声明
包体来实现










Hadoop的核心思想
使用若干个屌丝代替一个高富帅
google提出了三个论文
DFS
Bigtable
Map-Reduce










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值