oracle事物显示启用约束,循序渐进学Oracle之事务和约束

一、Oracle的事务

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

1-使用to_date函数

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

5c5a33a28e99fcc102c925096bf31a2a.png

d917f48b11323bd13c6fee40de6082ad.png

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

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

92d71c8d9628ef853ab733b69fb9b092.png

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

fa912efc8da6a4ae805202f70c81f322.png

2.使用子查询更新数据

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

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

6dc395f038f67dc739a85af1bf40b02f.png

3.Oracle中事务处理

什么叫事务?

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

事务和锁:

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

提交事务:

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

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

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

保存点:

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

回退事务:

只读事务:

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

范例:

fd1d22205646b1238613e5e2a0238d32.png

4522bb3d65ac5fa47bc620a17abdf43e.png

b3270a4e42b8be2da00ab7e2833b3383.png

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

da5fcac749dfc6092e8a5eccee127f49.png

事务的几个重要操作:

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用户下,设置只读事务,此窗口不能关闭,如下图所示:

7de7ba504e5567649b2de670d87a299f.png

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

8a2f93d17fb87e181c2ea7a7b24e1925.png

584b3ca03ad53fd3f227bfa7dc698d5a.png

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

cf8fda299f8d3401b97e8dd1d3e4ed0b.png

二、约束:

重点:

在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值