DML(Data Manipulation Language-数据操纵语言)可以在下列条件下执行:
插入
数据修改
现存数据删除
现存数据DML
语句DDL
(Data Definition Language – 数据定义语言) 语句COMMIT
或 ROLLBACK
语句使用COMMIT 和 ROLLBACK语句,我们可以:
确保数据完整性。
数据改变被提交之前预览。
将逻辑上相关的操作分组。
改变前的数据状态是可以恢复的
执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正
其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
DML语句所涉及到的行被锁定, 其他用户不能操作
数据的改变已经被保存到数据库中。
改变前的数据已经丢失。
所有用户可以看到结果。
锁被释放,其他用户可以操作涉及到的数据。
所有保存点被释放。
约束是表级的强制规定
有以下五种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。
ENABLE 子句可将当前无效的约束激活
当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引
视图是一种虚表。
视图建立在已有表
的基础上, 视图赖以建立的这些表称为基表
。
向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
视图向用户提供基表数据的另一种表现形式
create view empview as
select * from employees; # 创建视图empview从employees表
select * from empview ;# select * from empview (视图名)
当视图定义中包含以下元素之一时不能使用update:
组函数
GROUP BY
子句
DISTINCT
关键字
ROWNUM
伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使insert
:
组函数
GROUP BY
子句
DISTINCT
关键字
ROWNUM
伪列
列的定义为表达式
表中非空的列在视图定义中未包括
Top-N 分析查询一个列中最大或最小的 n 个值:
销售量最高的十种产品是什么?
销售量最差的十种产品是什么?
select *
from(
select rownum rn,employee_id,salary
from(
select employee_id,salary,last_name
from employees
order by salary desc
)
)where rn <=50 and rn >40
序列: 可供多个用户用来产生唯一数值的数据库对象
自动提供唯一的数值
共享对象
主要用于提供主键值
将序列值装入内存可以提高访问效率
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
CURRVAL 中存放序列的当前值
NEXTVAL 应在 CURRVAL 之前指定
,否则会报CURRVAL 尚未在此会话中定义的错误。
将序列值装入内存可提高访问效率
序列在下列情况下出现裂缝
:
回滚
系统异常
多个表同时使用同一序列
如果不将序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值
自动创建: 在定义 PRIMARY KEY
或 UNIQUE
约束后系统自动在相应的列上创建唯一性索引
手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询
以下情况可以创建索引:
列中数据值分布范围很广
列经常在 WHERE 子句或连接条件中出现
表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%
下列情况不要创建索引:
表很小
列不经常作为连接条件或出现在WHERE子句中
查询的数据大于2%到4%
表经常更新
Desc emp;
Create index name_index on emp(name);
索引不需要用,只是说我们在用name进行查询的时候,速度会更快。当然查的速度快了,插入的速度就会慢。因为插入数据的同时,还需要维护一个索引。
数据库安全性:
系统安全性
数据安全性
系统权限: 对于数据库的权限
对象权限: 操作数据库对象的权限
超过一百多种有效的权限
数据库管理员具有高级权限以完成管理任务,例如:
创建新用户
删除用户
删除表
备份表
用户拥有create table权限之外,还需要分配相应的表空间才可开辟存储空间用于创建的表
UNION ALL 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
在SELECT 列表中的列名和表达式在数量和数据类型
上要相对应
括号可以改变执行的顺序
ORDER BY 子句:
只能在语句的最后出现
可以使用第一个查询中的列名, 别名或相对位置
除 UNION ALL之外,系统会自动将重复的记录删除
系统将第一个查询的列名显示在输出中
除 UNION ALL之外,系统自动按照第一个查询中的第一个列的升序排列
子查询是嵌套在 SQL 语句中的另一个SELECT 语句
EXISTS 操作符检查在子查询中是否存在满足条件的行
如果在子查询中存在满足条件的行:
不在子查询中继续查找
条件返回 TRUE
如果在子查询中不存在满足条件的行:
条件返回 FALSE
继续在子查询中查找
使用 WITH 子句, 可以避免在 SELECT 语句中重复书写相同的语句块
WITH 子句将该子句中的语句块执行一次并存储到用户的临时表空间中
使用 WITH 子句可以提高查询效率