循序渐进学Oracle之事务和约束

简介:

一、Oracle的事务

1.使用特定格式插入日期值

1-使用to_date函数

范例2: 插入列带有日期的表,并按照年_月_日的格式

clip_image002

clip_image004

2-将emp表中的部门编号为10的数据导入到表beyond中 (进行行迁移!)

No.1步: 创建表beyond,字段分别是MyId number(4),MyName varchar2(50),MyDept number(5)

clip_image006

No.2步: 将表emp中的字段empno,ename,deptno中的记录批量导入表beyond中!

clip_image008

2.使用子查询更新数据

使用update语句更新数据时,既可以使用表达式或数据值直接修改数据,也可以使用子查询修改数据.

范例: 希望员工scott的岗位、工资、补助与员工SMITH一样。

clip_image010

3.Oracle中事务处理

什么叫事务?

用于保证数据的一致性,由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。(dml语句:是指增、删、改3种语句)

事务和锁:

当执行事务操作时(dml语句),Oracle会在被作用的表上加锁,防止其它用户改表的结构,这对用户来说是非常重要的。

提交事务:

当执行使用commit语句可以提交事务,

当执行了commit语句子后,会确认事务的变化、结束事务、删除保存点、释放锁,

当使用commit语句结束事务子后,其它会话将可以查看到事务变化 后的新数据。

保存点:

是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除事务所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。

回退事务:

只读事务:

是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天18点开始统计今天的销售情况,这时可以使用只读事务。在设置了只读事务后,尽管其它会话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。

范例:

clip_image012

clip_image014

clip_image016

范例:当执行了commit语句子后,会确认事务的变化、结束事务、删除保存点、释放锁;

clip_image018

事务的几个重要操作:

1)设置保存点 SQL> savepoint a1;

2)取消部分事务 SQL> rollback to a1;

3)取消全部事务 SQL> rollback;

只读事务:

是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天18点开始统计今天的销售情况,这时可以使用只读事务。在设置了只读事务后,尽管其它会话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。

范例:

No.1步: 设置只读事务且此窗口不能关闭,(用户system);

No.2步: 其它用户的操作都不生效了!(如:scott用户插入数据);

No.3步: 在No.1步的窗口再次查询是否有刚才插入的数据(没有!).

PS:

设置只读事务: SQL> set transaction read only;

设置读写事务: SQL> set transaction read write;

No.1步:注意:切换到系统管理员system用户下,设置只读事务此窗口不能关闭,如下图所示:

clip_image020

No.2步:切换到scott用户,再插入1条记录,如下图所示:

clip_image022

clip_image024

No.3步:切换到system用户,查询scott.emp表,应该没有员工编号为7935这条记录!

clip_image026


二、约束:

重点:

在Oracle数据库中,数据完整性可以使用三种方法来实现:

(1)约束: 优点是易维护,并且具有最好的性能,故作为维护数据完整性的首选!

(2)触发器:

(3)应用程序(过程、函数):

1-约束:

约束用于确保数据库数据满足特定的商业规则,在Oracle中,约束包括:

(1) not null:

若在列上 定义了not null,那么当插入数据时,必须为列提供数据;

(2) unique:

若定义了唯一约束后,该列值不能重复的,但是可以为null(空);

(3) primary key:

用于唯一的标示行表示行的数据,当定义主键约束后,该列不但不能重复,而且不能为null 。

注:一张表最多只能有一个主键,但是可以有多个unqiue约束;

(4) foreign key:

用于定义主表和从表之间的关系。外键约束要定义在从表上,主表则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null ;

(5) check.

用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在100~200之间,如果不在100~200之间,则会提示出错。

范例:商店售货系统表设计案例:

No.1张表商品goods

SQL> create table goods

2 (

3 goodId char(8) primary key, --主键

4 goodName varchar2(30),

5 unitPrice number(10,2) check(unitprice>0),

6 category varchar2(8),

7 provider varchar2(30)

8 );

Table created

PS:如何修改字段名?

SQL> alter table goods rename column goodId to goodsId;

No.2张表客户customer

SQL> create table customer

2 (

3 customerId char(8) primary key, --主键

4 name varchar2(50) not null, --不为空

5 address varchar2(50),

6 email varchar2(50) unique,

7 sex char(3) default '男' check (sex in ('男','女')), --理论讲此处应为2个字符

8 cardId char(18)

9 );

Table created

No.3张表购买purchase

SQL> create table purchase

2 (

3 customerId char(8) references customer(customerId), --外键,表组定义!列级定义foreign key

4 goodsId char(8) references goods(goodsId), --外键,表组定义!列级定义

5 nums number(10) check(nums between 1 and 30)

6 )

7 ;

Table created

范例:增加商品名也不能为空

SQL> alter table goods modify goodname not null;

Table altered

范例:身份证也不能重复

SQL> alter table customer add constraint cardunique unique(cardid);

表已更改。 --constraint 约束;约束名为:cardunique

范例:如何删除约束

--删除约束

SQL> alter table customer drop constraint cardunique;

Table altered

范例:增加客户的住址只能是”海淀”、”朝阳”、”东城”、”西城”、”通州”、”崇文”。

SQL> alter table customer add constraint addresscheck

2 check (address in ('海淀','朝阳','东城','西城','通州','崇文'));

Table altered

范例:如何删除check(检测)

SQL> alter table customer drop constraint addresscheck;

Table altered


本文转自beyondhedefang 51CTO博客,原文链接:http://blog.51cto.com/beyondhdf/1324638 ,如需转载请自行联系原作者

相关文章
|
4月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
808 18
|
5月前
|
Oracle 关系型数据库
Oracle 删除唯一约束
Oracle 删除唯一约束
59 0
|
8月前
|
SQL Oracle 关系型数据库
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
94 1
|
8月前
|
SQL Oracle 安全
Oracle数据库中的事务和锁
【4月更文挑战第19天】Oracle数据库的事务和锁是确保数据完整性和并发控制的核心机制。事务遵循ACID原则,保证操作的原子性、一致性、隔离性和持久性。通过COMMIT或ROLLBACK来管理事务更改。锁包括共享锁(读)、排他锁(写)、行级锁和表级锁,用于控制并发访问。自动锁机制在DML操作时生效,防止数据冲突。事务和锁共同维护数据库的稳定和安全。
|
SQL 缓存 Oracle
Oracle 数据库表和约束条件的增删改查
Oracle 数据库表和约束条件的增删改查
151 0
Oracle-约束小结
Oracle-约束小结
44 0
|
Oracle 关系型数据库
oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读
oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读
|
Oracle 关系型数据库 Java
hibernate操作Oracle出现违反唯一约束条件
出现这个问题的原因无非是主键冲突,我这里引起主键冲突的原因是实体类使用的ID策略为
|
Oracle 关系型数据库 数据库
Oracle 数据库表和约束条件的增删改查
Oracle 数据库表和约束条件的增删改查
183 0
|
SQL 存储 Oracle
Oracle事务和锁机制
Oracle事务和锁机制
151 0

推荐镜像

更多