表数据的操作(DML):
插入:
修改:
删除:
合并:大数据操作的时候,数据仓库
插入:使用values只能插入一行数据
插入空值:
1)不写
2)插入空串
3)null
插入日期:
1)按照Oracle标准日期格式插入,'dd-mm月-yyyy'
2)to_date('','yyyy-mm-dd')
3)to_char同to_date
特殊字符&:
在SQL Plus或者cmd中设置
1)show escape; --查看escape状态
2)escape off --返回escape状态为off
3)set escape on; --设定escape状态为on
4)show escape --查看escape状态
5)escape "\" (hex 5c) 返回escape符号为"\"
6)在insert语句中使用'\'对特殊符号进行转义
插入多行:
子查询:嵌套子查询,相关子查询
INSERT INTO mydept(deptno,dname,loc) SELECT * FROM dept ;--插入中的子查询不需要加()
创建表:
CREATE TABLE 表名 AS SELECT * FROM emp WHERE 1=0;--where条件恒不成立表示只要表结构不要数据;若where条件成立表示要满足where条件的数据;不加where条件表示既要表结构又要数据
合并:如果匹配则修改,如果不匹配则插入
语法:
MERGE INTO mydept m --目标表
USING dept d --原表
ON ( m.deptno=d.deptno ) --条件
WHEN MATCHED THEN
UPDATE SET
dname='zzz',loc='zzz' WHERE deptno=11
WHEN NOT MATCHED THEN
INSERT(m.deptno,m.dname,m.loc)
VALUES(d.deptno,d.dname,d.loc);
rowid:伪列,是表中的虚拟的列,是系统自动产生的,效率最快
表示一行的物理地址,可以唯一标识该行
前6位:数据对象编号,接下3位:相关文件编号,接下6位:块编号,末3位:行号
事务:
概念:
事务也称工作单元,是由一个或者多个SQL语句所组成的操作序列的集合,这些SQL语句作为一个完整的工作单元(Oracle最小的工作单元,不可分割),要么全部执行成功,要么全部执行失败.在数据库中,通过事务来保证数据的一致性
事务处理语言:TPL
对组成事务的DML语句的操作结果进行确认或取消(commit,rollback)
事务的组成:
在数据库中,事务由一组相关的DML或select语句,加上一个TPL语句(commit,rollback)或一个DDL语句(create,alter,drop,truncate等)或一个DCL语句(grant,revoke)组成.
DDL语句,DCL语句数据库进行隐式提交.
事务特征:(ACID)
1)原子性(Atomicity):
事务就像原子一样,不可被分割,组成事务的DML操作语句要么全部执行成功,要么全部执行失败,不可能出现部分失败的情况
2)一致性(Consistency):
一旦事务完成,不管是成功的还是失败的,整个系统处于数据一致的状态.
3)隔离性(Isolation):
一个事务的执行不会被另一个事务所干扰
4)持久性(Durability):
也成为永久性,事务一旦提交,对数据的改变就是永久的,不可以再被回滚
事务分类:
1)显式事务:
1-1)显式提交:commit
以成功的方式结束事务,组成事务的DML语句全部生效
1-2)显式回滚:rollback
以失败的方式结束事务,组成事务的DML语句全部取消
1-3)保存点:savepoint
2)隐式事务:
2-1)隐式提交:当下列任意一种情况发生时,会发生隐式提交
2-1-1)执行一个DDL(create,alter,drop,truncate,rename)语句;
2-1-2)执行一个DCL(grant,revoke)语句;
2-1-3)从SQL Plus正常退出(使用exit或quit命令退出)
2-2)隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
2-2-1)从SQL Plus中强制退出
2-2-2)客户端连接到服务器端异常中断
2-2-3)系统崩溃
事务的开始和结束:
事务开始:
事务自动开启于上一个事务结束后第一个执行的DML语句
事务结束:
显式结束:事务在遇到commit或者rollback时结束
隐式结束:执行隐式事务时会自动结束事务
设置保存点:
如果在一个事物内,想要回滚到指定的位置,不是回滚到事务的起始点,可以通过保存点实现
savepoint sp;--定义一个保存点语句
rollback to sp;--回滚到指定保存点
以上两条语句不结束事务的执行
Oracle的锁机制:
概念:
1)锁是用来在多用户并发访问和操作数据库时,保证数据的一致性的一种机制
2)锁有Oracle自动管理,如一个DML操作,Oracle默认的机制是在DML操作映像的行记录上自动加锁
3)锁在被相关的操作申请并持有后,会一直保持到事务的结束,事务结束后,锁才会被释放
4)查询语句不会锁定任何记录,如果在查询语句后面加for update子句会锁定查询所影响的行记录
1)行级加锁:默认行级锁,针对dml语句
2)表级加锁:
Oracle加锁方式:
1)自动加锁:用户在执行insert,update,delete,DCl,DDL语句时,Oracle会自动加锁
2)手动加锁
2-1)表级加锁:
LOCK TABLE 表名 IN 锁类型 MODE [NOWAIT]
2-2)行级加锁:
SELECT 查询列 FROM 表名 FOR UPDATE [NOWAIT]
锁的类型:
排它锁(Exclusive):不能在其上再加其他锁
共享锁(share):可以在其上再加共享锁
提交或回滚前数据状态
1)数据变化前的状态可以被恢复
2)当前会话可以使用select语句来验证DML操作后的结果
3)其他会话不能查看当前用户的DML操作结果
4)受影响纪录被锁定,也就是其他用户不能改变受影响记录中的数据
提交后数据状态
1)在数据库中数据变化为永久性的,先前的数据状态永久性消失
2)所有用户/会话都可以查询到提交后的结果
3)锁定的记录被释放,可以有效地被其他用户操作
4)所有的存储节点被清除
回滚后数据状态
1)先前的数据状态被恢复
2)锁定的记录被释放
3)所有的存储节点被清除