SQL之更新操作及事务控制

来源:互联网 发布:月薪5万的程序员 编辑:程序博客网 时间:2024/05/24 03:25

1  插入数据

语法:
INSERT INTO 表名[(列名1,列名2,…)] VALUES(值1, 值2,…);
注意:
指定列值时,字符串类型的要加‘’单引号。数字类型直接指定。日期可以使用TO_DATE()函数来转换;也可以用sysdate代表当前日期。
TO_DATE('2009-06-06','yyyy-mm-dd')。
某列的值要插入空值时,可以用NULL关键字代替或不列出该列名。
示例:
标准语法(强力推荐)
INSERT INTO tomo_emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
VALUES(8000,'张三','讲师', 7788, '12-11月-88', 7000,800,40);
简便做法
INSERT INTO tomo_emp
VALUES(8001,'李四','助教', 7788, '12-1月-89', 5000,400,40);


2 修改数据

语法:
UPDATE 表名 SET 列名=值[,列名2=值2,…] [WHERE 修改条件];
注意:
没有指定修改条件,将修改表中的所有记录。
在UPDATE语句中也可以使用子查询。
示例:
把编号为8110的员工职位改成“testing”。
为部门编号为50的员工加薪8%。
把编号为8110的员工的月薪改成公司的平均月薪,并修改奖金成500。

3 删除数据

语法:
DELETE FROM 表名 [WHERE 删除条件];
注意:
不指定删除条件,会删除所有的行。
示例:
删除编号为8110的员工。
删除部门编号为40,50的所有员工。

4 事务

数据库事务:一组相关的数据改变SQL语句,这组SQL语句对数据的改变要么同时成功,要么同时失败。
事务的ACID属性:
原子性(Atomic):
指整个数据库事务是不可分割的工作单元。原子性确保在事务中的所有操作要么都发生,要么都不发生。
一致性(Consistency):
一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的。即数据应当不会被破坏。
隔离性(Isolation):
指多个事务同时操作同一数据时,每个事务都有各自的完整数据空间。
持久性(Durability):
一旦事务完成,事务的结果应该持久化。

5 Oracle中的事务

事务相关的环境变量—AUTOCOMMIT
Oracle数据库服务器默认为非自动提交事务模式。
SHOW AUTOCOMMIT   -- 查看
SET AUTOCOMMIT ON|OFF   --更改
隐式事务控制:
自动隐式提交事务:
执行一个DDL语句、执行一个DCL语句、从SQL*Plus正常退出(exit,quit)
自动隐式回滚事务:
强行退出SQL*Plus、客户端到服务器的连接异常中断、系统崩溃。
显式事务控制:(建议使用)
提交和结束事务:COMMIT;
回滚事务:ROLLBACK [TO 回滚点];
设置事务回滚点:SAVEPOINT 回滚点;

6 事务隔离级别

一个事务对数据库的修改与并行的另外一个事务的隔离程度。

多个事务同时访问数据库中相同的数据时,如果没有采取必要的隔离机制,就可能会发生如下并发问题:
第一类丢失更新:撤消一个事务时,把其它事务已提交的更新数据也撤消了。
脏读:一个事务读到另一个事务未提交的更新数据。
不可重复读:一个事务读到另一个事务已经提交的更改数据。可以使用for update 添加行级锁 
第二类丢失更新:在不同客户端不同事务 同时读取了某一个数据 进行操作 引发的问题 (第二类丢失更新 是程序的问题  需要在更新之前 检查当前数据是否过期    版本号的问题)
幻读:在同一事务中  读取 某一范围的数据 不一致 (其他的事务新增或者删除了数据) lock table 表名 in share mode (共享锁 允许其他客户端加锁  会照成死锁)

7 Oracle的事务隔离级别

SQL标准定义了四种隔离级别:
READ UNCOMMITTED: 读未提交数据。脏读、不可重复读、幻读都可能发生。它的事务隔离性最低。
READ COMMITTED:读已提交数据。不允许脏读。
REPEATABLE READ:可重复读。不允许不可重复读,脏读。
SERIALIZABLE:串行化。不允许任何并发事务问题。最严格的事务隔离性。
Oracle只支持READ COMMITTED和SERIALIZABLE。
默认为READ COMMITTED
设置一个事务的隔离级别
set transaction isolation level serializable;
设置整个会话的隔离级别 
alter session set isolation_level=serializable;

 


    
0 0