DML语句

目标:

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

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

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

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

         5、控制事务

Agenda

         一、DML语言的基本特征

                  在一张表中增加数据

--- INSERT语句

                  在一张表中改变数据

--- UPDATE语句

      在一张表中删除数据

--- DELETE语句

                                                     --- TRUNCATE语句

         二、学会使用COMMITROLLBACKSAVEPOINT控制事务

         三、读一致性

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

 

 

 

一、DML语言的基本特征

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

 

增加数据

INSERT每次插入一条记录

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


示例:

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




DML语句_第1张图片

增加一条新的数据

DML语句_第2张图片

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

示例1:隐式




DML语句_第3张图片

示例2:显式




DML语句_第4张图片

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

示例:

DML语句_第5张图片




插入特殊值

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




DML语句_第6张图片


DML语句_第7张图片

示例2

DML语句_第8张图片


DML语句_第9张图片

示例3:使用替换变量

DML语句_第10张图片


DML语句_第11张图片

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

1、不使用VALUES子句

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

 

示例:

先把“copy_departments”表中数据清空

DML语句_第12张图片


DML语句_第13张图片


DML语句_第14张图片

UPDATE语法(谨慎)

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


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

DML语句_第15张图片


DML语句_第16张图片


DML语句_第17张图片

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

DML语句_第18张图片


DML语句_第19张图片




DELETE语法



示例1



示例2

DML语句_第20张图片

TRUNCATE语法

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


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

 

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

DML语句_第21张图片


DML语句_第22张图片


DML语句_第23张图片

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

DML语句_第24张图片

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

 

 

 

二、学会使用COMMITROLLBACKSAVEPOINT控制事务

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

2DDL语句

3DCL语句

 

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

 

COMMITROLLBACK

1、保持数据一致性

2、数据会永久性修改

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

DML语句_第25张图片

示例:

DML语句_第26张图片


DML语句_第27张图片


DML语句_第28张图片


DML语句_第29张图片





DML语句_第30张图片





DML语句_第31张图片




SAVEPOINT

作用相当于一个标签

DML语句_第32张图片

隐含事务处理

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

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

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

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

 

示例:

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

DML语句_第33张图片

这个时候数据并没有提交

 

正常退出数据库




DML语句_第34张图片

这个时候再增加一条数据

DML语句_第35张图片

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

DML语句_第36张图片

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



返过来看SQL*Plus窗口



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

DML语句_第37张图片

显然是没有的





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

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

 

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

DML语句_第38张图片

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

 

 

 

三、读一致性

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

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

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

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

 

示例:

用户1执行一条DML操作

DML语句_第39张图片

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

DML语句_第40张图片

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

 

但是当 用户1 提交了之后

DML语句_第41张图片

继续使用 用户2 查看

DML语句_第42张图片

即立刻查看到了

 

数据在COMMIT之后

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

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

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

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

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

 

数据在ROLLBACK之后

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

2、以前的数据会恢复

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

 

示例:

用户1 进行操作

DML语句_第43张图片

用户2 查看

DML语句_第44张图片

依然可以查看的到

 

用户1 进行回滚

DML语句_第45张图片

发现数据都恢复了

 

语句级回滚

1、语句失败自动回滚

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

3、其他改变仍然存在

 

读一致性

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

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

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

         --- 读者不会等候写者

         --- 写者不会等候读者

         --- 写者会等候写者

DML语句_第46张图片



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

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

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

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

 

示例:

用户1 锁住一行

DML语句_第47张图片

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

DML语句_第48张图片

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

 

用户1 提交



用户2 继续执行相同操作

DML语句_第49张图片

用户2 继续执行相同操作



DML语句_第50张图片

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

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

你可能感兴趣的:(DML语句)