数据操作与事务控制(第二天)

数据操作与事务控制

1.数据库操作语言: Data Manipulation Language ,简称DML,主要用来实现对数据库表中的数据进行增删改的操作。
数据操作语言主要包括如下几种:
增加行数据:使用INSERT语句实现
修改行数据:使用UPDATE语句实现
删除行数据:使用DELETE语句实现
2.插入数据:
Insert into table [(column [,column…])]
Values (value[,value…]);
注意:
1.该语法一次只能插入一条数据
2.列名列表和值列表必须一一对应(个数 数据类型)
3.列名列表如果省略,代表操作该表的所有列
4.字符型和日期型数据必须用带引号括起来
sysdate():返回系统日期,只包含年月日

练习
desc dept
– 往dept表中插入一条数据,所有列都给值
insert into dept
values (10,‘质量部’,‘沈阳’)

insert into dept(deptno,dname,loc)
values (20,‘人力资源部’,‘沈阳’)

insert into dept(dname,deptno,loc)
values (‘研发部’,30,‘沈阳’)

select * from dept

–往部门表插入数据,主键采用自增的方式生成
insert into dept(dname,loc)
values(‘工程部’,‘大连’)

–往部门表插入数据,地点的值为空
insert into dept(deptno,dname)
values(35,‘实施部’)

insert into dept(deptno,dname,loc)
values(36,‘实施部’,null)

–往emp表中批量插入数据
insert into emp(ename,job,mgr,hiredate,deptno)
values
(‘test1’,‘manager’,‘8888’,sysdate(),20),
(‘test2’,‘manager’,‘8888’,sysdate(),30),
(‘test3’,‘manager’,‘8888’,sysdate(),32),

–通过子查询插入多行数据
– INSERT INTO 表名[(列名1[,列名2,…,列名n])] 子查询
–INSERT子句和数据类型必须和子查询中列的数量和类型相匹配中列的数量
insert into copy_dept select * from dept

4.修改数据:
update table
set column = value[,column = value]
[where condition];
注意:
1.update子句限定要修改的表 一次只能更改一个表
2.set子句限定要修改哪些列,多个列之间用逗号间隔
3.where子句限定要修改哪些行,如果省略,则修改表中的所有行数据
WHERE子句中的更新条件是一个逻辑表达式,通常需要使用到关系运算符和逻辑运算符,返回True或者False。

练习
–根据部门编号更改部门名称
update dept
set dname=‘人力部’
where deptno=20

update dept
set loc=‘北京’

–更改员工表中编号为8888的员工的薪资和奖金
update emp
set sal=6000,comm=18000
where empno=8888

–给20号部门的所有员工的薪资上调500
update emp
set sal=sal+500
where deptno=20

删除数据:
Delect from table
[where condition]
*注意:*where条件如果省略,则一个表的数据全删除

截断表:删除一个表的全数据
truncate table表名

  1. TRUNCATE和DELETE区别
    a) TRUNCATE是DDL(数据定义语言),只能删除表中所有记录,释放存储空间,使用ROLLBACK清空数据后不可以回滚。
    b) DELETE是DML(数据操作语言),可以删除指定记录,不释放存储空间,使用ROLLBACK清空数据后可以回滚。

事务处理
事务(transaction):在于数据库交互过程中,一组DML操作要保证同时成功或者同时失败,达到数据库中数据的一致性
事务处理语言(Transaction Process Language):TPL
Commit:用来提交事务 确认DML操作的结果
Rollback:用来回滚事务 取消DML操作的结果
Mysql数据库默认自动提交

事务的组成
在数据库中,事务由一组相关的DML或SELECT语句,加上一个TPL语句(COMMIT、ROLLBACK)或一个DDL语句(CREATE、ALTER、DROP、TRUNCATE等)或一个DCL(GRANT、REVOKE)语句。
在这里插入图片描述

事物的特征:ACID
a) 原子性(Atomicity)
i. 事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。
b) 一致性(Consistency)
i. 一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。
c) 隔离性(Isolation)
i. 一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。
d) 持久性(Durability)
i. 也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。

事务处理
• MySQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit 事务提交
2.直接用set来改变MySQL的自动提交模式
MySQL默认是自动提交的,也就是你提交一个sql,就直接执行!可以通过
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交
来实现事务的处理。
• 但要注意当用set autocommit = 0 的时候,以后所有的sql都将作为事务处理,直到用commit确认或 rollback结束,注意当结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!

• 隐式结束
– 隐式提交:当下列任意一种情况发生时,会发生隐式提交
• 执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)语句;
• 执行一个DCL(GRANT、REVOKE)语句;
– 隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
• 客户端强行退出
• 客户端连接到服务器端异常中断
• 系统崩溃

**• 设置保存点:**如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。
– SAVEPOINT savepointname;–定义一个保存点语句;
– ROLLBACK TO savepointname;–回滚到指定保存点
– *注意:*如上两条语句不结束事务的执行。

练习
• 例:分析如下操作序列

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/gcyqweasd/article/details/112622636