create user qwe identified by --创建用户
qwepwd default tablespace users
temporary tablespace temp;
grant connect to qwe;--connect角色允许用户连接到数据库并创建数据库对象
grant resource to qwe;--resource角色允许用户使用数据库中的存储空间
grant create sequence to qwe;--此系统权限允许用户在当前模式中创建序列,此权限包含在connect角色中
grant select on test to qwe;--允许用户查询test表的记录
grant update on test to qwe;--允许用户更新test表中的记录
grant all on test to qwe;--允许用户插入、删除、更新和查询test表中的记录
alter user qwe identified by pwd;--修改qwe密码
drop user qwe cascade;--删除qwe用户模式
数据类型 字符 数值 日期时间 RAW/LONG RAW LOB
字符数据类型
当需要固定长度的字符串时,使用 CHAR 数据类型。
CHAR 数据类型存储字母数字值。
CHAR 数据类型的列长度可以是 1 到 2000 个字节。
VARCHAR2数据类型支持可变长度字符串
VARCHAR2数据类型存储字母数字值
VARCHAR2数据类型的大小在1至4000个字节范围内
LONG 数据类型存储可变长度字符数据
LONG 数据类型最多能存储 2GB
数值数据类型
可以存储整数、浮点数和实数
最高精度为 38 位
数值数据类型的声明语法:
NUMBER [( p[, s])]
P表示精度,S表示小数点的位数
日期时间数据类型存储日期和时间值,包括年、月、日,小时、分钟、秒
主要的日期时间类型有:
DATE - 存储日期和时间部分,精确到整个的秒
TIMESTAMP - 存储日期、时间和时区信息,秒值精确到小数点后6位
RAW 数据类型用于存储二进制数据
RAW 数据类型最多能存储 2000 字节
LONG RAW 数据类型用于存储可变长度的二进制数据
LONG RAW 数据类型最多能存储 2 GB
LOB 称为“大对象”数据类型,可以存储多达 4GB 的非结构化信息,例如声音剪辑和视频文件等
LOB 数据类型允许对数据进行高效、随机、分段的访问
CLOB 即 Character LOB(字符 LOB),它能够存储大量字符数据
BLOB 即 Binary LOB(二进制 LOB),可以存储较大的二进制对象,如图形、视频剪辑和声音文件
BFILE 即 Binary File(二进制文件),它用于将二进制数据存储在数据库外部的操作系统文件中
Oracle 中伪列就像一个表列,但是它并没有存储在表中
伪列可以从表中查询,但不能插入、更新和删除它们的值
常用的伪列有ROWID和ROWNUM
数据定义语言用于改变数据库结构,包括创建、更改和删除数据库对象
用于操纵表结构的数据定义语言命令有:
CREATE TABLE
ALTER TABLE
TRUNCATE TABLE
DROP TABLE
数据操纵语言用于检索、插入和修改数据
数据操纵语言是最常见的SQL命令
数据操纵语言命令包括:
SELECT
INSERT
UPDATE
DELETE
利用现有的表创建表
语法:
CREATE TABLE <new_table_name> AS
SELECT column_names FROM <old_table_name>;
选择无重复的行
在SELECT子句,使用Distinct关键字
SELECT Distinct vencode FROM vendor_master;
使用列别名
为列表达式提供不同的名称
该别名指定了列标题
SELECT itemcode, itemdesc, max_level,
max_level*2 AS NEW_MAXLEVEL
FROM itemfile;
SELECT itemcode,itemdesc, max_level,
max_level* 2 “New Maximum Level”
FROM itemfile;
插入日期类型的值
日期数据类型的默认格式为“DD-MON-RR”
使用日期的默认格式
使用TO_DATE函数转换
INSERT INTO order_master
VALUES('o001', '12-5月-05', 'V002', 'c', '25-5月-05');
INSERT INTO my_table (date_col)
VALUES (TO_DATE('2005-10-18', 'YYYY-MM-DD'));
插入来自其它表中的记录
语法:
INSERT INTO <table_name> [(cloumn_list)]
SELECT column_names FROM <other_table_name>;
事务是最小的工作单元,作为一个整体进行工作
保证事务的整体成功或失败,称为事务控制
用于事务控制的语句有:
Commit - 提交并结束事务处理
Rollback - 撤销事务中已完成的工作
SavePoint – 标记事务中可以回滚的点
SQL> UPDATE order_master
SET del_date = ‘30-8月-05’
WHERE orderno <= ’o002’;
SQL> SAVEPOINT mark1;
SQL> DELETE FROM order_master WHERE orderno = ‘o002’;
SQL> SAVEPOINT mark2;
SQL> ROLLBACK TO SAVEPOINT mark1;
SQL> COMMIT;
数据控制语言为用户提供权限控制命令
用于权限控制的命令有:
Grant 授予权限
Revoke 撤销已授予的权限
SQL 操作符 算术操作符 比较操作符 逻辑操作符 集合操作符 连接操作符
算术操作符用于执行数值计算
可以在SQL语句中使用算术表达式,算术表达式由数值数据类型的列名、数值常量和连接它们的算术操作符组成
算术操作符包括加(+)、减(-)、乘(*)、除(/)
比较操作符用于比较两个表达式的值
比较操作符包括 =、!=、<、>、<=、>=、
Between…And、In、Like 和 Is Null等
逻辑操作符用于组合多个计较运算的结果以生成一个或真或假的结果。
逻辑操作符包括与(And)、或(Or)和非(Not)。
集合操作符 UNION,UNION ALL,INTERSECT,MINUS
集合操作符将两个查询的结果组合成一个结果
INTERSECT 操作符只返回两个查询的公共行。
MINUS 操作符返回从第一个查询结果中排除第二个查
询中出现的行。
SELECT orderno FROM order_master
INTERSECT
SELECT orderno FROM order_detail;
SELECT orderno FROM order_master
MINUS
SELECT orderno FROM order_detail;
连接操作符用于将多个字符串或数据值合并成一个字符串
SELECT (venname|| ' 的地址是 '
||venadd1||' '||venadd2 ||' '||venadd3) address
FROM vendor_master WHERE vencode='V001';
SQL 操作符的优先级从高到低的顺序是:
算术操作符 --------最高优先级
连接操作符
比较操作符
Not 逻辑操作符
And 逻辑操作符
Or 逻辑操作符 --------最低优先级
分组函数 AVG MIN MAX SUM COUNT
GROUP BY子句
用于将信息划分为更小的组
每一组行返回针对该组的单个结果
HAVING子句
用于指定 GROUP BY 子句检索行的条件
SELECT p_category, MAX(itemrate) FROM itemfile GROUP BY p_category;
SELECT p_category, MAX(itemrate) FROM itemfile GROUP BY p_category
HAVING p_category NOT IN ('accessories');
分析函数 ROW_NUMBER RANK DENSE_RANK
以下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始
ROW_NUMBER 返回连续的排位,不论值是否相等
RANK 具有相等值的行排位相同,序数随后跳跃
DENSE_RANK 具有相等值的行排位相同,序号是连续的
锁是数据库用来控制共享资源并发访问的机制。
锁用于保护正在被修改的数据
直到提交或回滚了事务之后,其他用户才可以更新数据
并行性 -允许多个用户访问同一数据
一致性 - 一次只允许一个用户修改数据
完整性 - 为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户
锁的类型 行级锁 表级锁
行级锁
对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行
行级锁是一种排他锁,防止其他事务修改此行
在使用以下语句时,Oracle会自动应用行级锁:
Insert
Update
Delete
Select … For Update
Select … For Update语句允许用户一次锁定多条记录进行更新
使用Commit或Rollback语句释放锁
Select … For Update语法:
Select … For Update [Of columns] [Wait n | Nowait];
使用命令显示地锁定表,应用表级锁的语法是:
LOCK TABLE table_name IN mode MODE;
表级锁类型 行共享 行排他 共享 共享行排他 排他
行共享 (ROW SHARE) – 禁止排他锁定表
行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁
共享锁(SHARE)
锁定表,仅允许其他用户查询表中的行
禁止其他用户插入、更新和删除行
多个用户可以同时在同一个表上应用此锁
共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁
排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表
当两个事务相互等待对方释放资源时,就会形成死锁
Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁
表分区
分区方法 范围分区 散列分区 列表分区 复合分区
范围分区
以表中的一个列或一组列的值的范围分区
范围分区的语法:
PARTITION BY RANGE (column_name)
(
PARTITION part1 VALUE LESS THAN(range1),
PARTITION part2 VALUE LESS THAN(range2),
...
[PARTITION partN VALUE LESS THAN(MAXVALUE)]
);
散列分区
允许用户对不具有逻辑范围的数据进行分区
通过在分区键上执行HASH函数决定存储的分区
将数据平均地分布到不同的分区
散列分区语法
PARTITION BY HASH (column_name)
PARTITIONS number_of_partitions;
或
PARTITION BY HASH (column_name)
( PARTITION part1 [TABLESPACE tbs1],
PARTITION part2 [TABLESPACE tbs2],
...
PARTITION partN [TABLESPACE tbsN]
);
列表分区
允许用户将不相关的数据组织在一起
列表分区的语法:
PARTITION BY LIST (column_name)
(
PARTITION part1 VALUES (values_list1),
PARTITION part2 VALUES (values_list2),
...
PARTITION partN VALUES (DEFAULT)
);
复合分区
范围分区与散列分区或列表分区的组合
复合分区的语法:
PARTITION BY RANGE (column_name1)
SUBPARTITION BY HASH (column_name2)
SUBPARTITIONS number_of_partitions
(
PARTITION part1 VALUE LESS THAN(range1),
PARTITION part2 VALUE LESS THAN(range2),
...
PARTITION partN VALUE LESS THAN(MAXVALUE)
);
分区维护操作修改已分区表的分区。
分区维护的类型:
计划事件 - 定期删除最旧的分区
非计划事件 - 解决应用程序或系统问题
分区维护操作有:
添加分区
删除分区
截断分区
合并分区
拆分分区
添加分区 – 在最后一个分区之后添加新分区
ALTER TABLE SALES
ADD PARTITION P4 VALUES LESS THAN (4000);
删除分区 – 删除一个指定的分区,分区的数据也随之删除
SQL> ALTER TABLE SALES DROP PARTITION P4;
截断分区 – 删除指定分区中的所有记录
SQL> ALTER TABLE SALES TRUNCATE PARTITION P3;
合并分区 - 将范围分区或复合分区的两个相邻分区连接起来
SQL> ALTER TABLE SALES
MERGE PARTITIONS S1, S2 INTO PARTITION S2;
拆分分区 - 将一个大分区中的记录拆分到两个分区中
SQL> ALTER TABLE SALES SPLIT PARTITION P2 AT (1500)
INTO (PARTITION P21, PARTITION P22);
数据库对象
同义词是现有对象的一个别名。
简化SQL语句
隐藏对象的名称和所有者
提供对对象的公共访问
同义词共有两种类型:私有同义词:私有同义词只能在其模式内访问,且不能与当前模式的对象同名
公有同义词
私有同义词
CREATE SYNONYM emp FOR SCOTT.emp;
SCOTT.emp的别名 模式名 表名
公有同义词
CREATE PUBLIC SYNONYM emp_syn FOR SCOTT.emp;
同义词名称
视图
视图以经过定制的方式显示来自一个或多个表的数据
视图可以视为“虚拟表”或“存储的查询”
创建视图所依据的表称为“基表”
视图的优点有:
提供了另外一种级别的表安全性
隐藏了数据的复杂性
简化了用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据
CREATE VIEW stud_view
AS SELECT studno, studname, subno
FROM Stud_details;
使用 WITH CHECK OPTION 选项创建视图
CREATE OR REPLACE VIEW pause_view AS
SELECT * FROM order_master WHERE ostatus = 'p'
WITH CHECK OPTION CONSTRAINT chk_pv;
使用 ORDER BY 子句创建视图
CREATE OR REPLACE VIEW ord_ven AS
SELECT * FROM vendor_master ORDER BY venname;
创建带有错误的视图
CREATE FORCE VIEW ven AS
SELECT * FROM venmaster;
联接视图
CREATE VIEW Stud_sub_view AS
SELECT Studno, Studname, Submrks, Subname
FROM Stud_details, Sub_Details
WHERE Stud_details.Subno=Sub_details.Subno;
在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
视图上的DML语句有如下限制:
只能修改一个底层的基表
如果修改违反了基表的约束条件,则无法更新视图
如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
如果视图包含伪列或表达式,则将无法更新视图
使用DROP VIEW语句删除视图
DROP VIEW toys_view;
索引
索引是与表相关的一个可选结构
用以提高 SQL 语句执行的性能
减少磁盘I/O
使用 CREATE INDEX 语句创建索引
在逻辑上和物理上都独立于表的数据
Oracle 自动维护索引
索引的类型 唯一索引 位图索引 组合索引 基于函数的索引 反向键索引
创建标准索引
CREATE INDEX item_index ON itemfile (itemcode)
TABLESPACE index_tbs;
重建索引
ALTER INDEX item_index REBUILD;
删除索引
DROP INDEX item_index;
唯一索引
唯一索引确保在定义索引的列中没有重复值
Oracle 自动在表的主键列上创建唯一索引
使用CREATE UNIQUE INDEX语句创建唯一索引
组合索引
组合索引是在表的多个列上创建的索引
索引中列的顺序是任意的
如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度
CREATE INDEX comp_index
ON itemfile(p_category, itemrate);
反向键索引
反向键索引反转索引列键值的每个字节
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
创建索引时使用REVERSE关键字
位图索引
位图索引适合创建在低基数列上
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射
减少响应时间
节省空间占用
索引组织表
索引组织表的数据存储在与其关联的索引中
索引中存储的是行的实际数据,而不是ROWID
基于主键访问数据
CREATE TABLE 命令与 ORGANIZATION INDEX 子句一起用于创建索引组织表
触发器
触发器是当特定事件出现时自动执行的存储过程
特定事件可以是执行更新的DML语句和DDL语句
触发器不能被显式调用
触发器的功能:
自动生成数据
自定义复杂的安全权限
提供审计和日志记录
启用复杂的业务逻辑