数据操作语言DML(Data Manipulation Language)用于操作数据库中的数据
包括:
1. 插入数据insert
2. 修改数据update
3. 删除数据delete
4. 数据合并merge
表间数据COPY
insert into A(id, name) select id, name from B
子查询表B的类型和要插入的表A中的类型相匹配
merge语句
用于进行数据合并---根据条件在表中执行数据的修改或插入操作,如果要插入的记录在目标表中已经存在,则执行更新操作、否则执行插入操作。
merge into 表名A
using(表名B) //表,视图,子查询
on (连接关系)
when matched then
update set 表名A的字段=表名B的字段
when not matched then
insert (表名A的字段) values (表名B的字段)
事务
数据库事务组成:
0~多条DML语句
1条DDL(Data Define Language)语句
1条DCL(Data Control Language)语句
事务控制:
通过将一组相关操作组合为一个要么全部成功、要么全部失败的逻辑工作单元,以简化错误恢复、提高应用程序的可靠性。
事务必须满足ACID属性:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
事务开始与结束
开始:
第一条可执行的语句
结束:
1. 遇到commit 或 rollback 语句
2. 遇到DDL 或 DCL 语句
3. 用户会话结束
4. 系统崩溃
事务的提交和回滚
1. 显式的提交和回滚操作是为了更好地保证数据的一致性。
2. 下述情况下事务会被自动提交
~执行一个DDL 语句
~执行一个DCL 语句
~正常结束会话
3. 会话异常终止/系统崩溃时事务会被自动回滚
提交/回滚前数据状态
1. 当前事务中数据状态的改变是可以恢复的
2. 当前事务中的DML 操作结果只对当前用户(会话)可见,其它用户(会话)看不到当前事务中数据状态的改变,直到当前事务结束。
3. 当前事务中的DML 语句所涉及到的行被锁定,其他用户(会话)不能对其行进行修改。
事务提交后数据状态
1. 数据的修改永久生效、不可以再撤消
2. 数据以前的状态永久性丢失、无法恢复
3. 所有的用户(会话)都将看到操作后的结果
4. 记录锁被释放,其它用户(会话)可对这些进行修改操作
5. 事务中的保存点(savepoints)清除
回滚后数据状态
1. 数据的修改被撤消
2. 数据恢复到修改前的状态
3. 记录锁被释放
保存点
通过保存点在当前的事务中创建标记,将来可回退到指定的标记(保存点)外,实现事务的部分回滚
例:
inser into A values(1,'Tome');
inser into A values(2,'Trye');
savepoint p1
inser into A values(3,'Merry');
1. select * from A //显示3条记录
2. rollback to p1;select * from A;//显示p1前的两条记录
包括:
1. 插入数据insert
2. 修改数据update
3. 删除数据delete
4. 数据合并merge
表间数据COPY
insert into A(id, name) select id, name from B
子查询表B的类型和要插入的表A中的类型相匹配
merge语句
用于进行数据合并---根据条件在表中执行数据的修改或插入操作,如果要插入的记录在目标表中已经存在,则执行更新操作、否则执行插入操作。
merge into 表名A
using(表名B) //表,视图,子查询
on (连接关系)
when matched then
update set 表名A的字段=表名B的字段
when not matched then
insert (表名A的字段) values (表名B的字段)
事务
数据库事务组成:
0~多条DML语句
1条DDL(Data Define Language)语句
1条DCL(Data Control Language)语句
事务控制:
通过将一组相关操作组合为一个要么全部成功、要么全部失败的逻辑工作单元,以简化错误恢复、提高应用程序的可靠性。
事务必须满足ACID属性:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
事务开始与结束
开始:
第一条可执行的语句
结束:
1. 遇到commit 或 rollback 语句
2. 遇到DDL 或 DCL 语句
3. 用户会话结束
4. 系统崩溃
事务的提交和回滚
1. 显式的提交和回滚操作是为了更好地保证数据的一致性。
2. 下述情况下事务会被自动提交
~执行一个DDL 语句
~执行一个DCL 语句
~正常结束会话
3. 会话异常终止/系统崩溃时事务会被自动回滚
提交/回滚前数据状态
1. 当前事务中数据状态的改变是可以恢复的
2. 当前事务中的DML 操作结果只对当前用户(会话)可见,其它用户(会话)看不到当前事务中数据状态的改变,直到当前事务结束。
3. 当前事务中的DML 语句所涉及到的行被锁定,其他用户(会话)不能对其行进行修改。
事务提交后数据状态
1. 数据的修改永久生效、不可以再撤消
2. 数据以前的状态永久性丢失、无法恢复
3. 所有的用户(会话)都将看到操作后的结果
4. 记录锁被释放,其它用户(会话)可对这些进行修改操作
5. 事务中的保存点(savepoints)清除
回滚后数据状态
1. 数据的修改被撤消
2. 数据恢复到修改前的状态
3. 记录锁被释放
保存点
通过保存点在当前的事务中创建标记,将来可回退到指定的标记(保存点)外,实现事务的部分回滚
例:
inser into A values(1,'Tome');
inser into A values(2,'Trye');
savepoint p1
inser into A values(3,'Merry');
1. select * from A //显示3条记录
2. rollback to p1;select * from A;//显示p1前的两条记录