第八章 修改表的内容

第八章 修改表的内容
8.13在列值中使用单引号和双引号
指定新顾客姓为O’Malley,注意性中字母O后面使用了两个单引号:
Insert into costomers values (9,’O’’Malley’,NULL,NULL);
下面这个例子指定新产品的名称是The”Great”Gatsby;
Insert into products values(13,1,’The”Great”Gatsby’,NULL,12.99);
8.1.4
在INSERT语句中,可以不使用列值,而是使用查询从一个表向另外一个表复制行;此时要求原表和目标表的列数和列的类型必须匹配。
Insert into customers2 (customer_id,first_name)
Select 1, first_name
From customers
Where customer_id=1;
8.2
The RETURNING INTO clause allows us to return column values for rows affected by DML statements.
8.5使用默认值
create table order_status(
order_status_id integer
constraint default_example_pk primary key,
status varchar2(20) default 'Order placed' NOT NULL,
last_modified date default sysdate);
在UPDATE语句中,可以使用default关键字修改列的值:
update order_status set status=default where order_status_id=3;
8.6使用MERGE合并行
Oracle引入了MERGE语句,它可以用来将一个表中的行合并到另外一个表中。
MERGE INTO products p
USING product_changes pc ON(
p.product_id=pc.product_id)
WHEN MATCHED THEN
UPDATE
SET
p.product_type_id=pc.product_type_id,
p.name=pc.name,
p.description=pc.description,
p.price=pc.price
WHEN NOT MATCHED THEN
INSERT(
p.product_id,p.product_type_id,p.name,p.description,p.price)
values(pc.product_id,pc.product_type_id,pc.name,pc.description,pc.price);
8.7数据库事务
8.7.2事务的开始与结束
事务是用来分割数据库活动的逻辑工作单元。事务既有起点,也有终点:当下列事件发生时,事务就开始了:
连接到数据库上,并执行第一条DML语句。
前一个事务结束后,又输入了另外一条DML语句。
当下列事件之一发生时,事务就结束了:
执行COMMIT或ROLLBACK语句
执行一条DDL语句,例如CREATE TABLE语句;在这种情况下,会自动执行COMMIT语句。
执行一条DCL语句,例如GRANT语句;在这种情况下,会自动执行COMMIT语句。
断开与数据库的连接。在退出SQL*Plus时,通常会输入EXIT命令,此时会自动执行COMMIT语句。如果SQL*Plus被意外终止了(例如运行SQL*Plus的计算机崩溃了),那么就会自动执行ROLLBACK语句。这适用于任何会访问数据库的程序。例如,如果编写了一个可以访问数据库的java程序,而这个程序崩溃了,那么就会自动执行ROLLBACK语句。
执行了一条DML语句,该语句却失败了;在这种情况下,会为这个无效的DML语句执行ROLLBACK语句。
8.7.3保存点
在事务的任何地方都可以设置一个保存点(savepoint),这样可以将修改回滚到保存点处。
8.7.4事务的ACID特性
事务有四个基本的特性:
原子性(atomicity),事务必须成组地提交或回滚。
一致性(consistency)事务必须确保数据库的状态保持一致,这就是说事务开始时,数据库的状态是一致的;在事务的结束时,数据库的状态也必须是一致的。
隔离性(isolation)多个事务可以独立运行,而不会彼此产生影响。
持久性(durability)一旦事务被提交之后,数据库的变化就会被永远保留下来。
8.7.6事务锁
要支持并发事务,Oracle数据库必须确保表中的数据一直有效。这可以通过(lock)来实现。
理解默认的加锁机制的最简单的方法如下:读程序(reader)不会阻塞读程序;写程序(writer)不会阻塞读程序;只有在试图对相同的行进行修改时,写程序才会阻塞写程序。
8.7.7事务的隔离级别
幻像读取(insert一条新的数据再读)
不可重复读(update数据后再读)
脏读(在回滚段里读取数据)
Oracle数据库支持READ COMMITTED和SERIALIZABLE两种事务隔离性级别
COMMITTED允许幻像读和不可重复读,但是不允许脏读
SERIALIZABLE幻像读,不可重复读,脏读都不允许
事务隔离性级别可以使用SET TRANSACTION 语句设置。例如,下面这个语句就是将事务隔离性级别设置为SERIALIZABLE:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
8.8查询闪回
闪回操作可以根据一个时间值或系统变更号(system change number,简称SCN)进行。
数据库使用SCN来跟踪对数据进行的修改,因次可以使用它来闪回到数据库中一个特定的SCN时的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值