1 新增数据
insert into 表名 values(值1,值2.....)
insert into 表名(列1,列2....) values(值1,值2.....)
往部门表里边插入以下几行信息
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
50 SUPPORT WASHINGTON
60 TEST
70 PURCHASING
insert into dept values(50 , 'SUPPORT' , 'WASHINGTON');
insert into dept values(60 , 'TEST' , NULL);
insert into dept(deptno,dname) values(70 , 'PURCHASING' );
没有指定的列,会自动插入默认值,一般是NULL
2 修改数据
update 表名 set 列1 = 值1 , 列2 =值2 [ where cond]
1 将60号部门的LOC改成MIAMI
update dept set loc = 'MIAMI' where deptno = 60
2 将50号部门的部门名字改成 SUPPORT1 ,LOC改为NULL
update dept set dname = 'SUPPORT1' , loc = NULL where deptno = 50
3 删除数据
delete from 表名 [ where cond ]
1 删除部门号为50的部门信息
delete from dept where deptno = 50
2 删除部门号大于40的部门信息
delete from dept where deptno > 40
insert into 表名 values(列的数据。。。。)
update 表名 set 列1 = 值
delete from 表名 where
事务
数据库事务,是由有限的数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行。
数据库事务由以下的部分组成:
一个或多个DML语句
一个 DDL(Data Definition Language – 数据定义语言) 语句
一个 DCL(Data Control Language – 数据控制语言) 语句
事务的特性(ACID)
事务4大特性
原子性 (Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
一致性 (Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
隔离性 (Isolation):事务的执行不受其他事务的干扰,当数据库被多个客户端并发访问时,隔离它们的操作,防止出现:脏读、幻读、不可重复读。
持久性 (Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
事务的起始标志:Oracle中自动开启事务,以DML语句为开启标志。
执行一个增删改查语句,只要没有提交commit和回滚rollback,操作都在一个事务中。
事务的结束标志:提交、回滚都是事务的结束标志。
事务的提交:
显示提交:commit
隐式提交:
1. 有DDL语句,如:create table除了创建表之外还会隐式提交Create之前所有没有提交的DML语句。
2. 正常退出(exit / quit)
事务的回滚:
显示回滚:rollback
隐式回滚:掉电、宕机、非正常退出。
SQL99定义4种隔离级别:
1. Read Uncommitted 读未提交数据。
2. Read Commited 读已提交数据。 (Oracle默认)
3. Repeatable Read 可重复读。 (MySQL默认)
4. Serializable 序列化、串行化。 (查询也要等前一个事务结束)
这4种MySQL都支持
Oracle支持的隔离级别: Read Commited(默认)和 Serializable,以及Oracle自定义的Read Only三种。
ACID
原子性
一致性
隔离性
持久性
隔离级别
某一行数据 本来是0
读未提交
A事务开启
B事务开启
将0改成100
读取读到100
commit提交
B事务结束commit
读已提交
A事务开启
B事务开启
将0改成100
读取读到0
commit提交
读取读到100
B事务结束commit
可重复度
A事务开启
B事务开启
将0改成100
读取读到0
commit提交
读取读到0
B事务结束commit
C事务开启
读取读到100
...
串行化
A事务开启
将0改成100
commit提交
事务的控制
创建保存点
savepoint 保存点名字
回滚到相应保存点
rollback to savepoint 保存点名字
一但当前事务结束,在当前事务建立的savepoint将失效。
【示例】:
1. SQL> create table testsp ( tid number, tname varchar2(20)); DDL语句会隐式commit之前操作
2. set feedback on 打开回显
3. insert into testsp values(1, 'Tom')
4. insert into testsp values(2, 'Mary')
5. savepoint aaa
6. insert into testsp values(3, 'Moke') 故意将“Mike”错写成“Moke”。
7. select * from testsp 三条数据都显示出来。
8. rollback to savepoint aaa 回滚到保存点aaa
9. select * from testsp 发现表中的数据保存到第二条操作结束的位置
需要注意,前两次的操作仍然没有提交。如操作完成应该显示的执行 commit 提交。