【安博培训技术】Oracle4 事务和数据库对象20130910
来源:互联网 发布:互联网大数据 编辑:程序博客网 时间:2024/06/05 08:12
Oracle4 事务和数据库对象
回顾
SQL 支持的操作符包括算术、比较、逻辑、集合和连接操作符
SQL 函数可大致分为:
单行函数:日期、字符、数字、转换、其他
聚合函数
分析函数
目标
事务
使用同义词
使用序列
理解并使用视图
理解并使用索引
事务管理
例如,银行转帐问题:
假定资金从帐户A转到帐户B,至少需要两步:
帐户A的资金减少
然后帐户B的资金相应增加
CREATE TABLE bank
(
customerName CHAR(10), --顾客姓名
currentMoney MONEY --当前余额
)
GO
ALTER TABLE bank
ADD CONSTRAINT CK_currentMoney
CHECK(currentMoney>=1)
GO
INSERT INTO bank(customerName,currentMoney)
VALUES('张三',1000)
INSERT INTO bank(customerName,currentMoney)
VALUES('李四',1)
事务控制
事务是最小的工作单元,作为一个整体进行工作
事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
保证事务的整体成功或失败,称为事务控制
用于事务控制的语句有:
COMMIT - 提交并结束事务处理
ROLLBACK - 撤销事务中已完成的工作
SAVEPOINT – 标记事务中可以回滚的点
数据库对象简介
Oracle 数据库对象又称模式对象
数据库对象是逻辑结构的集合,最基本的数据库对象是表
其他数据库对象包括:
数据库对象
同义词 序列 视图 索引
同义词
同义词是现有对象的一个别名。
简化SQL语句
隐藏对象的名称和所有者
提供对对象的公共访问
同义词共有两种类型:
私有同义词 公有同义词
私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
[说明]使用情况:频繁引用
创建条件:在自身的模式创建私有同义词,用户需具有create synonym系统权限
在其它用户模式创建私有同义词,用户需具有create any synonym系统权限
私有同义词
CREATE SYNONYM emp FOR SCOTT.emp;
emp SCOTT.emp的别名
SCOTT 模式名
emp 表名
公有同义词
CREATE PUBLIC SYNONYM syn_emp FOR SCOTT.emp;
syn_emp 同义词名称
私有同义词:只能被当前模式的用户访问
共有同义词:需有create public synonym权限
replace:若同义词已存在,替换该同义词
创建或替换现有的同义词
CREATE OR REPLACE SYNONYM syn_emp FOR SCOTT.emp;
OR REPLACE 替换现有的同义词
删除同义词
SQL> DROP SYNONYM emp;
SQL> DROP PUBLIC SYNONYM syn_emp;
同义词TAB:当前用户所拥有的表和视图对象
本地对象和共有对象重名时,本地对象优先
数据字典视图:user_synonyms、user_tables、user_views
通过这些视图查看当前模式下的数据对象
序列
序列是用于生成唯一、连续序号的对象
序列可以是升序的,也可以是降序的
使用CREATE SEQUENCE语句创建序列
SQL> CREATE SEQUENCE seq_toys
START WITH 10
INCREMENT BY 10
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 10;
指定内存中预先分配的序号数
[思路]联系SqlServer中的标示列,引出Oracle中的序列,然后通过例子展示在Oracle中如何实现标示列的功能
increament by:根据增量的正负确定升降序
默认最大值:增序10的27次方,降序-1
cache:预选分配一组序号,用完后再生成一组
访问序列
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
SQL> INSERT INTO toys (toyid, toyname, toyprice)
VALUES (seq_toys.NEXTVAL, ‘TransFormer’, 500);
SQL> INSERT INTO toys
VALUES ( toys_seq.NEXTVAL, ’Plane’, 75);
指定序列的下一个值
SQL> SELECT seq_toys.CURRVAL FROM dual;
检索序列的当前值
更改和删除序列
使用ALTER SEQUENCE语句修改序列,
不能更改序列的START WITH参数
SQL> ALTER SEQUENCE seq_toys MAXVALUE 5000 CYCLE;
使用DROP SEQUENCE语句删除序列
SQL> DROP SEQUENCE seq_toys;
视图
视图以经过定制的方式显示来自一个或多个表的数据
视图可以视为“虚拟表”或“存储的查询”
创建视图所依据的表称为“基表”
视图的优点有:
提供了另外一种级别的表安全性
隐藏的数据的复杂性
简化的用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据
创建视图 3-1
CREATE VIEW stud_view
AS SELECT studno, studname, subno
FROM stud_details;
[初始化表及数据]
Create table sub_details(
subno int primary key,
subname varchar2(20)
);
Create table stud_details(
studno int primary key,
studname varchar2(20) not null,
studmarks int,
subno int references sub_details(subno)
);
Insert into sub_details values(2,'English');
Insert into sub_details values(4,'Maths');
Insert into sub_details values(5,'Science');
Insert into stud_details values(1,'Rob',45,2);
Insert into stud_details values(2,'James',33,4);
Insert into stud_details values(3,'Jesica',40,4);
创建视图 3-2
创建视图的语法:
CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]...)]
AS select_statement
[WITH CHECK OPTION]
[WITH READ ONLY];
[说明]
force:无论基表是否存在都创建视图
with read only:不能通过视图修改数据
创建视图 3-3
使用 WITH CHECK OPTION 选项创建视图
CREATE OR REPLACE VIEW v_stu AS
SELECT * FROM t_student WHERE f_class = 1
WITH CHECK OPTION CONSTRAINT chk_class1;
使用 ORDER BY 子句创建视图
CREATE OR REPLACE VIEW v_stusorted AS
SELECT * FROM t_student ORDER BY f_class;
创建带有错误的视图
CREATE FORCE VIEW v_temp AS
SELECT * FROM t_temp;
[说明]
with check option:若没有此选项,则可将符合条件的记录(在视图中)改为视图中不可见的记录
如果选择特定的列来创建视图,则通过该视图只能更新这些列(与表的近似之处)
联接视图 2-1
CREATE VIEW v_stud AS
SELECT studno, studname, studmarks, subname
FROM stud_details, sub_details
WHERE stud_details.subno=sub_details.subno;
联接视图 2-2
创建外联接视图
CREATE VIEW v_coursecount AS
SELECT stu.f_id, f_name, count(f_courseid) as coursecount
FROM t_student stu, t_grade gra
WHERE stu.f_id = gra.f_stuid(+)
GROUP BY stu.f_id;
SELECT stu.f_id, f_name, count(f_courseid) as coursecount
FROM t_student stu left join t_grade gra
on (stu.f_id = gra.f_stuid)
GROUP BY stu.f_id, f_name;
注意外连接的写法:from T1 left join T2 on T1.f=T2.f <=> from T1,T2 where T1.f=T2.f(+)
视图上的DML语句
在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
视图上的DML语句有如下限制:
只能修改一个底层的基表
如果修改违反了基表的约束条件,则无法更新视图
如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
如果视图包含伪列或表达式,则将无法更新视图
[说明]说明视图上的DML语句为什么有如下限制,并适当举例2-3种情况
[强调]视图上的DML语句并非修改了视图中的数据,而是通过对视图的操作最终修改的是基表的数据,这一点一定要明确
如何利用视图对基表进行写操作(一般不通过视图修改数据)
类似于表的地方以及不同
只要修改能够确定的对应于唯一的基表数据,修改就是可行的
键保留表
stud_details 为什么是键保留表?
因为 studno 既是stud_details 中的主键,也是联接结果中的主键
[思路]
如何保证对视图的修改最后影射到唯一的基表数据
键保留表:基表的主键亦是视图的主键
可修改键保留表中的值(只有键保留表才能使用DML)
思考:Oracle相比于SQLServer的高明之处(明确,规范,近乎死板)
视图中的函数
视图中可以使用单行函数、分组函数和表达式
CREATE VIEW item_view AS
SELECT itemcode, LOWER(itemdesc) item_desc
FROM itemfile;
使用DROP VIEW语句删除视图
SQL> DROP VIEW toys_view;
索引 3-1
索引是与表相关的一个可选结构
用以提高 SQL 语句执行的性能
减少磁盘I/O
使用 CREATE INDEX 语句创建索引
在逻辑上和物理上都独立于表的数据
Oracle 自动维护索引
[说明]重点讲解什么是索引,索引的机制,这对查询优化很重要
[思路]如何才能更快的查找到需要的纪录有序索引索引的存储及原理
索引 3-2
索引有各种类型,除了标准索引外,还有一些特殊类型的索引:
唯一索引 位图索引 组合索引 基于函数的索引 反向键索引
索引 3-3
创建标准索引
SQL> CREATE INDEX x_name ON t_student (f_name)
TABLESPACE index_tbs;
重建索引
SQL> ALTER INDEX x_name REBUILD
删除索引
SQL> DROP INDEX x_name;
[说明]掌握索引的基本用法
Rebuild性能优于Drop Index和Create Index语句重建索引
唯一索引
唯一索引确保在定义索引的列中没有重复值
Oracle 自动在表的主键列上创建唯一索引
使用CREATE UNIQUE INDEX语句创建唯一索引
SQL> CREATE UNIQUE INDEX x_id
ON itemfile (f_id);
组合索引
组合索引是在表的多个列上创建的索引
索引中列的顺序是任意的
如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度
SQL> CREATE INDEX x_comp
ON t_student(f_name, f_birth);
反向键索引
反向键索引反转索引列键值的每个字节
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
创建索引时使用REVERSE关键字
SQL> CREATE INDEX rev_index
ON t_student (f_birth) REVERSE;
SQL> ALTER INDEX rev_index REBUID NOREVERSE;
[说明]反向键索引和位图索引需了解其使用的范围、如何使用,原理稍加讲解即可,不可深入
索引基于有序数,数据过于密集的情况(参看知识点文档Oracle_06Reverse Index.doc)
位图索引
位图索引适合创建在低基数列上
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射
减少响应时间
节省空间占用
SQL> CREATE BITMAP INDEX bit_index
ON t_student (f_sex);
[说明]适用范围:某列值重复较多
位图索引中使用每个键值的位图,而不使用Rowid列表,位图中的每个位对应一个可能的Rowid
[说明]更为详细的内容请参考知识点文档:Oracle_07Bitmap Index.txt
基于函数的索引
基于一个或多个列上的函数或表达式创建的索引
表达式中不能出现聚合函数
不能在LOB类型的列上创建
创建时必须具有 QUERY REWRITE 权限
SQL> CREATE INDEX x_lowercase
ON toys (LOWER(toyname));
SQL> SELECT toyid FROM toys
WHERE LOWER(toyname)='doll';
例如按照姓名(英文)查询的情况
获取索引的信息
与索引有关的数据字典视图有:
USER_INDEXES - 用户创建的索引的信息
USER_IND_PARTITIONS - 用户创建的分区索引的信息
USER_IND_COLUMNS - 与索引相关的表列的信息
SQL> SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME
FROM USER_IND_COLUMNS
ORDER BY INDEX_NAME, COLUMN_POSITION;
[说明] 常用的数据字典要讲明白,还有其它一些,比如:user_tables,user_views等等
总结
同义词是现有数据库对象的别名
序列用于生成唯一、连续的序号
视图是基于一个或多个表的虚拟表
索引是与表相关的一个可选结构,用于提高 SQL 语句执行的性能
索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引
回顾
SQL 支持的操作符包括算术、比较、逻辑、集合和连接操作符
SQL 函数可大致分为:
单行函数:日期、字符、数字、转换、其他
聚合函数
分析函数
目标
事务
使用同义词
使用序列
理解并使用视图
理解并使用索引
事务管理
例如,银行转帐问题:
假定资金从帐户A转到帐户B,至少需要两步:
帐户A的资金减少
然后帐户B的资金相应增加
CREATE TABLE bank
(
customerName CHAR(10), --顾客姓名
currentMoney MONEY --当前余额
)
GO
ALTER TABLE bank
ADD CONSTRAINT CK_currentMoney
CHECK(currentMoney>=1)
GO
INSERT INTO bank(customerName,currentMoney)
VALUES('张三',1000)
INSERT INTO bank(customerName,currentMoney)
VALUES('李四',1)
事务控制
事务是最小的工作单元,作为一个整体进行工作
事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
保证事务的整体成功或失败,称为事务控制
用于事务控制的语句有:
COMMIT - 提交并结束事务处理
ROLLBACK - 撤销事务中已完成的工作
SAVEPOINT – 标记事务中可以回滚的点
数据库对象简介
Oracle 数据库对象又称模式对象
数据库对象是逻辑结构的集合,最基本的数据库对象是表
其他数据库对象包括:
数据库对象
同义词 序列 视图 索引
同义词
同义词是现有对象的一个别名。
简化SQL语句
隐藏对象的名称和所有者
提供对对象的公共访问
同义词共有两种类型:
私有同义词 公有同义词
私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
[说明]使用情况:频繁引用
创建条件:在自身的模式创建私有同义词,用户需具有create synonym系统权限
在其它用户模式创建私有同义词,用户需具有create any synonym系统权限
私有同义词
CREATE SYNONYM emp FOR SCOTT.emp;
emp SCOTT.emp的别名
SCOTT 模式名
emp 表名
公有同义词
CREATE PUBLIC SYNONYM syn_emp FOR SCOTT.emp;
syn_emp 同义词名称
私有同义词:只能被当前模式的用户访问
共有同义词:需有create public synonym权限
replace:若同义词已存在,替换该同义词
创建或替换现有的同义词
CREATE OR REPLACE SYNONYM syn_emp FOR SCOTT.emp;
OR REPLACE 替换现有的同义词
删除同义词
SQL> DROP SYNONYM emp;
SQL> DROP PUBLIC SYNONYM syn_emp;
同义词TAB:当前用户所拥有的表和视图对象
本地对象和共有对象重名时,本地对象优先
数据字典视图:user_synonyms、user_tables、user_views
通过这些视图查看当前模式下的数据对象
序列
序列是用于生成唯一、连续序号的对象
序列可以是升序的,也可以是降序的
使用CREATE SEQUENCE语句创建序列
SQL> CREATE SEQUENCE seq_toys
START WITH 10
INCREMENT BY 10
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 10;
指定内存中预先分配的序号数
[思路]联系SqlServer中的标示列,引出Oracle中的序列,然后通过例子展示在Oracle中如何实现标示列的功能
increament by:根据增量的正负确定升降序
默认最大值:增序10的27次方,降序-1
cache:预选分配一组序号,用完后再生成一组
访问序列
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
SQL> INSERT INTO toys (toyid, toyname, toyprice)
VALUES (seq_toys.NEXTVAL, ‘TransFormer’, 500);
SQL> INSERT INTO toys
VALUES ( toys_seq.NEXTVAL, ’Plane’, 75);
指定序列的下一个值
SQL> SELECT seq_toys.CURRVAL FROM dual;
检索序列的当前值
更改和删除序列
使用ALTER SEQUENCE语句修改序列,
不能更改序列的START WITH参数
SQL> ALTER SEQUENCE seq_toys MAXVALUE 5000 CYCLE;
使用DROP SEQUENCE语句删除序列
SQL> DROP SEQUENCE seq_toys;
视图
视图以经过定制的方式显示来自一个或多个表的数据
视图可以视为“虚拟表”或“存储的查询”
创建视图所依据的表称为“基表”
视图的优点有:
提供了另外一种级别的表安全性
隐藏的数据的复杂性
简化的用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据
创建视图 3-1
CREATE VIEW stud_view
AS SELECT studno, studname, subno
FROM stud_details;
[初始化表及数据]
Create table sub_details(
subno int primary key,
subname varchar2(20)
);
Create table stud_details(
studno int primary key,
studname varchar2(20) not null,
studmarks int,
subno int references sub_details(subno)
);
Insert into sub_details values(2,'English');
Insert into sub_details values(4,'Maths');
Insert into sub_details values(5,'Science');
Insert into stud_details values(1,'Rob',45,2);
Insert into stud_details values(2,'James',33,4);
Insert into stud_details values(3,'Jesica',40,4);
创建视图 3-2
创建视图的语法:
CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]...)]
AS select_statement
[WITH CHECK OPTION]
[WITH READ ONLY];
[说明]
force:无论基表是否存在都创建视图
with read only:不能通过视图修改数据
创建视图 3-3
使用 WITH CHECK OPTION 选项创建视图
CREATE OR REPLACE VIEW v_stu AS
SELECT * FROM t_student WHERE f_class = 1
WITH CHECK OPTION CONSTRAINT chk_class1;
使用 ORDER BY 子句创建视图
CREATE OR REPLACE VIEW v_stusorted AS
SELECT * FROM t_student ORDER BY f_class;
创建带有错误的视图
CREATE FORCE VIEW v_temp AS
SELECT * FROM t_temp;
[说明]
with check option:若没有此选项,则可将符合条件的记录(在视图中)改为视图中不可见的记录
如果选择特定的列来创建视图,则通过该视图只能更新这些列(与表的近似之处)
联接视图 2-1
CREATE VIEW v_stud AS
SELECT studno, studname, studmarks, subname
FROM stud_details, sub_details
WHERE stud_details.subno=sub_details.subno;
联接视图 2-2
创建外联接视图
CREATE VIEW v_coursecount AS
SELECT stu.f_id, f_name, count(f_courseid) as coursecount
FROM t_student stu, t_grade gra
WHERE stu.f_id = gra.f_stuid(+)
GROUP BY stu.f_id;
SELECT stu.f_id, f_name, count(f_courseid) as coursecount
FROM t_student stu left join t_grade gra
on (stu.f_id = gra.f_stuid)
GROUP BY stu.f_id, f_name;
注意外连接的写法:from T1 left join T2 on T1.f=T2.f <=> from T1,T2 where T1.f=T2.f(+)
视图上的DML语句
在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
视图上的DML语句有如下限制:
只能修改一个底层的基表
如果修改违反了基表的约束条件,则无法更新视图
如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
如果视图包含伪列或表达式,则将无法更新视图
[说明]说明视图上的DML语句为什么有如下限制,并适当举例2-3种情况
[强调]视图上的DML语句并非修改了视图中的数据,而是通过对视图的操作最终修改的是基表的数据,这一点一定要明确
如何利用视图对基表进行写操作(一般不通过视图修改数据)
类似于表的地方以及不同
只要修改能够确定的对应于唯一的基表数据,修改就是可行的
键保留表
stud_details 为什么是键保留表?
因为 studno 既是stud_details 中的主键,也是联接结果中的主键
[思路]
如何保证对视图的修改最后影射到唯一的基表数据
键保留表:基表的主键亦是视图的主键
可修改键保留表中的值(只有键保留表才能使用DML)
思考:Oracle相比于SQLServer的高明之处(明确,规范,近乎死板)
视图中的函数
视图中可以使用单行函数、分组函数和表达式
CREATE VIEW item_view AS
SELECT itemcode, LOWER(itemdesc) item_desc
FROM itemfile;
使用DROP VIEW语句删除视图
SQL> DROP VIEW toys_view;
索引 3-1
索引是与表相关的一个可选结构
用以提高 SQL 语句执行的性能
减少磁盘I/O
使用 CREATE INDEX 语句创建索引
在逻辑上和物理上都独立于表的数据
Oracle 自动维护索引
[说明]重点讲解什么是索引,索引的机制,这对查询优化很重要
[思路]如何才能更快的查找到需要的纪录有序索引索引的存储及原理
索引 3-2
索引有各种类型,除了标准索引外,还有一些特殊类型的索引:
唯一索引 位图索引 组合索引 基于函数的索引 反向键索引
索引 3-3
创建标准索引
SQL> CREATE INDEX x_name ON t_student (f_name)
TABLESPACE index_tbs;
重建索引
SQL> ALTER INDEX x_name REBUILD
删除索引
SQL> DROP INDEX x_name;
[说明]掌握索引的基本用法
Rebuild性能优于Drop Index和Create Index语句重建索引
唯一索引
唯一索引确保在定义索引的列中没有重复值
Oracle 自动在表的主键列上创建唯一索引
使用CREATE UNIQUE INDEX语句创建唯一索引
SQL> CREATE UNIQUE INDEX x_id
ON itemfile (f_id);
组合索引
组合索引是在表的多个列上创建的索引
索引中列的顺序是任意的
如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度
SQL> CREATE INDEX x_comp
ON t_student(f_name, f_birth);
反向键索引
反向键索引反转索引列键值的每个字节
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
创建索引时使用REVERSE关键字
SQL> CREATE INDEX rev_index
ON t_student (f_birth) REVERSE;
SQL> ALTER INDEX rev_index REBUID NOREVERSE;
[说明]反向键索引和位图索引需了解其使用的范围、如何使用,原理稍加讲解即可,不可深入
索引基于有序数,数据过于密集的情况(参看知识点文档Oracle_06Reverse Index.doc)
位图索引
位图索引适合创建在低基数列上
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射
减少响应时间
节省空间占用
SQL> CREATE BITMAP INDEX bit_index
ON t_student (f_sex);
[说明]适用范围:某列值重复较多
位图索引中使用每个键值的位图,而不使用Rowid列表,位图中的每个位对应一个可能的Rowid
[说明]更为详细的内容请参考知识点文档:Oracle_07Bitmap Index.txt
基于函数的索引
基于一个或多个列上的函数或表达式创建的索引
表达式中不能出现聚合函数
不能在LOB类型的列上创建
创建时必须具有 QUERY REWRITE 权限
SQL> CREATE INDEX x_lowercase
ON toys (LOWER(toyname));
SQL> SELECT toyid FROM toys
WHERE LOWER(toyname)='doll';
例如按照姓名(英文)查询的情况
获取索引的信息
与索引有关的数据字典视图有:
USER_INDEXES - 用户创建的索引的信息
USER_IND_PARTITIONS - 用户创建的分区索引的信息
USER_IND_COLUMNS - 与索引相关的表列的信息
SQL> SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME
FROM USER_IND_COLUMNS
ORDER BY INDEX_NAME, COLUMN_POSITION;
[说明] 常用的数据字典要讲明白,还有其它一些,比如:user_tables,user_views等等
总结
同义词是现有数据库对象的别名
序列用于生成唯一、连续的序号
视图是基于一个或多个表的虚拟表
索引是与表相关的一个可选结构,用于提高 SQL 语句执行的性能
索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引
- 【安博培训技术】Oracle4 事务和数据库对象20130910
- 【安博培训笔记】Oracle4 事务和数据库对象 作业20130910
- 【安博培训技术】Java1 Java面向对象20130918
- 【安博培训技术】Oracle7 子程序和程序包20130912
- 【安博培训技术】Oracle1 入门 20130909
- 【安博培训技术】Oracle8 触发器20130912
- Oracle4
- Oracle4
- oracle4
- oracle4
- oracle4
- 安卓数据库事务
- 【安博培训技术】Oracle2 基本SQL查询20130909
- 【安博培训技术】Oracle5 使用 PL/SQL20130911
- 【安博培训技术】Oracle6 游标管理20130911
- 【安博培训技术】Java2 数组、字符串、常用工具类20130918
- 【安博培训技术】Java3 集合、泛型 20130919
- 【安博培训技术】Java4 异常处理 20130919
- CentOS PPTP VPN服务器快速安装教程
- hdu 4550 卡片游戏
- android sqlite中在同一个数据库中建两个表的问题
- 【hadoop】巧用MapReduce+HDFS,海量数据去重的五大策略
- 异常处理机制
- 【安博培训技术】Oracle4 事务和数据库对象20130910
- 从库dump文件中分离出或去除某个表的数据
- Java集合类说明及区别
- 多项式的加法运算(等待修改)
- C语言快速统计其二进制形式中1的个数
- ARP欺骗,骗你没商量
- winedt 7.0 网络最正规的破解方法
- POJ 3415 Common Substrings (求长度大于K的公共子串个数,5级)
- A good article about the Exif Orientation Tag