DML语句

目标:

         1、掌握DML语言的基本特征

         2、学会在一张表中插入记录

         3、学会在一张表中更改记录

         4、学会在一张表中删除记录

         5、控制事务

Agenda

         一、DML语言的基本特征

                  在一张表中增加数据

--- INSERT语句

                  在一张表中改变数据

--- UPDATE语句

      在一张表中删除数据

--- DELETE语句

                                                     --- TRUNCATE语句

         二、学会使用COMMITROLLBACKSAVEPOINT控制事务

         三、读一致性

         四、学会在SELECT语句中使用FOR UPDATE子句对指定的数据进行加锁

 

 

 

一、DML语言的基本特征

         当在一张表中增加、更改、删除数据时就会涉及DML语句,事务是一个DML语句,形成一个逻辑单元。

 

增加数据

INSERT每次插入一条记录

如果是数值则用逗号隔开,如果是字符串型和日期型则还需要加单引号


示例:

先复制一个表,在复制的表中进行操作,从而不影响原来表






增加一条新的数据



如果只插入两列,则其余为NULL

示例1:隐式






示例2:显式






如果列的类型是NOT NULL时插入NULL就会报错

示例:






插入特殊值

示例1:插入一条员工信息数据,且入职日期是今天









示例2






示例3:使用替换变量






批量插入:复制其他表中数据

1、不使用VALUES子句

2、相应列数目、类型要相同

 

示例:

先把“copy_departments”表中数据清空









UPDATE语法(谨慎)

可以同时更新多条记录,通过WHERE子句指定更新的范围


示例1:将雇员号为198的部门号改为20









示例2:将雇员113的工作岗位和薪资同雇员205相同









DELETE语法



示例1



示例2



TRUNCATE语法

清空表数据,是数据定义语言(DDL


TRUNCATE删除的数据不容易回滚回来,而DELETE删除的数据可以回滚回来

 

示例1:使用DELETE清空表数据









示例2:使用TRUNCATE清空表数据

显然,执行回滚后,数据依然回不来

 

 

 

二、学会使用COMMITROLLBACKSAVEPOINT控制事务

1DML语句构成对数据一致性修改

2DDL语句

3DCL语句

 

数据库事务有开始也有结束,当第一条DML SQL语句执行的时候,这个事务就开始了,当执行COMMIT或者ROLLBACK时就会结束;
或者到执行DDL或者DCL语句的时候会结束;或者退出SQL*Plus或者SQL Developer时会结束,这时候没有提交的数据会提交;或者数据
宕了时候,但是宕了后,当再次登进数据库的时候,会把上次没有提交的数据回滚掉。

 

COMMITROLLBACK

1、保持数据一致性

2、数据会永久性修改

3、把有逻辑的有联系的操作做成一个组,便于理解



示例:



























SAVEPOINT

作用相当于一个标签


隐含事务处理

1、当一个DDL语句执行的时候,DML语句就会自动提交

2、当一个DCL语句执行的时候,DML语句就会自动提交

3、正常退出SQL*Plus或者SQL Developer时候,即便没有执行COMMITROLLBACK语句的时候,DML语句也会自动提交

4、异常退出SQL*Plus或者SQL Developer时候,或者系统宕了,当再次进入系统,数据库会自动回滚数据

 

示例:

先创建一个临时表,并增加一个数据


这个时候数据并没有提交

 

正常退出数据库






这个时候再增加一条数据



然后再开一个界面,查看一下SQL*Plus的进程



模拟异常退出,杀死SQL*Plus进程



返过来看SQL*Plus窗口



然后重新登陆到“HR”查看一下

显然是没有的





SET AUTO OFF  ---> 关闭自动提交

SET AUTO ON ---> 开启自动提交

 

开启自动提交,并插入一条数据


然后重复异常关闭数据库,查看表t中有无数据

 

 

 

三、读一致性

数据在COMMIT或者ROLLBACK之前是怎样的

1、可以使当前的操作无效掉(即数据以前的状态可以恢复)

2、本用户可以执行SELECT语句查看之前的DML操作

3、其他用户查看不到本用户执行的DML操作

 

示例:

用户1执行一条DML操作



打开另一窗口使用 用户2 查看


显然看不到 用户1 执行的DML操作

 

但是当 用户1 提交了之后



继续使用 用户2 查看


即立刻查看到了

 

数据在COMMIT之后

1、数据改变会立即存入数据库中

2、以前的数据不能回滚回来了

3、所有用户都可以查看修改后的操作了

4、相关行的锁就会释放掉,其他用户就可以操作这些行

5、打的SAVEPOINTS(标签)就会消除掉

 

数据在ROLLBACK之后

1、数据所有的改变都会被放弃

2、以前的数据会恢复

3、相关的行的锁会释放掉

 

示例:

用户1 进行操作



用户2 查看


依然可以查看的到

 

用户1 进行回滚


发现数据都恢复了

 

语句级回滚

1、语句失败自动回滚

2、每条语句都会有隐含的SAVEPOINT

3、其他改变仍然存在

 

读一致性

1、保证任何一个用户会看到数据的一致状态

2、一个用户对数据的修改不会对另一个用户修改发生冲突

3、对相同的数据保证了:

         --- 读者不会等候写者

         --- 写者不会等候读者

         --- 写者会等候写者





四、学会在SELECT语句中使用FOR UPDATE子句对指定的数据进行加锁

1、加上FOR UPDATE时,就会把查询的数据锁住

2、当执行COMMIT或者ROLLBACK后锁才会释放

3、当其他用户锁住本用户想要操作的行的时候,那么本用户就会等候释放才可以操作

 

示例:

用户1 锁住一行



用户2 继续也执行这一行的操作

即发现不能执行下去,需要一直等候

 

用户1 提交



用户2 继续执行相同操作


用户2 继续执行相同操作



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30197839/viewspace-1976825/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30197839/viewspace-1976825/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值