Skip to content

事件处理

sh
SELECT @@autocommit;
SET @@autocommit = 1;

DELETE FROM emp;
SELECT * FROM emp;

ROLLBACK;

SELECT * FROM emp;

#数据准备:
#1.导入数据库empMgr
#2.切换当前数据库为empMgr
USE empmgr;
#---------------------------------------------------------------------
# /*7.1.2事务的基本操作  */
# 1、查询员工表emp中陈二和李四当前的信息
SELECT * FROM emp WHERE ename = '陈二' OR ename = '李四';

#2、 开启事务
START TRANSACTION;

#3、将员工表emp中陈二和李四的奖金都设置为1000,误输入为10000
UPDATE emp SET comm = 10000 WHERE ename = '陈二';
UPDATE emp SET comm = 10000 WHERE ename = '李四';

#4、 提交修改信息之前,查询员工表emp中陈二和李四当前的信息
SELECT * FROM emp WHERE ename = '陈二' OR ename = '李四';

#5、 回滚事务
ROLLBACK;

#------------------------------------------------------------
#6、重新开启事务
BEGIN;

# 7、重新设置李四和陈二的奖金1000
# -- 设置陈二的奖金1000
UPDATE emp SET comm = 1000 WHERE ename = '陈二';
# -- 设置李四的奖金1000
UPDATE emp SET comm = 1000 WHERE ename = '李四';

#8、 提交修改信息之前,查询员工表emp中陈二和李四当前的信息
SELECT * FROM emp WHERE ename = '陈二' OR ename = '李四';

#9、 提交事务
COMMIT;



# /*7.1.3事务的保存点  */
# 1、员工表emp中陈二和李四当前的奖金信息
SELECT * FROM emp WHERE ename = '陈二' OR ename = '李四';

#2、开启事务后,将陈二的奖金增加200,李四的奖金减少200
# -- 开启事务
BEGIN;
# -- 设置陈二的奖金
UPDATE emp SET comm = comm + 200 WHERE ename = '陈二';

# -- 设置李四的奖金
UPDATE emp SET comm = comm - 200 WHERE ename = '李四';

# -- 创建保存点s1
SAVEPOINT s1;

#3、 查询员工表emp中陈二和李四当前的奖金信息
SELECT * FROM emp WHERE ename = '陈二' OR ename = '李四';

#4、 将陈二的奖金修改为600,李四的奖金修改为1400
# -- 设置陈二的奖金
UPDATE emp SET comm = 600 WHERE ename = '陈二';

# -- 设置李四的奖金
UPDATE emp SET comm = 1400 WHERE ename = '李四';

#5、 回滚到保存点s1
ROLLBACK TO SAVEPOINT s1;

# 6、回滚到保存点s1后,查询员工表emp中陈二和李四当前的奖金信息
SELECT * FROM emp WHERE ename = '陈二' OR ename = '李四';
# 7、回滚事务
ROLLBACK;

#8、 回滚事务后,查询员工表emp中陈二和李四当前的奖金信息
SELECT * FROM emp WHERE ename = '陈二' OR ename = '李四';

数据准备

sh
#若数据库empMgr不存在,则创建数据库empMgr,默认的字符集为utf8
CREATE DATABASE  IF NOT EXISTS empMgr CHARACTER SET utf8;

#显示创建数据库的语句
SHOW CREATE DATABASE empMgr;

#改变当前数据库为empMgr
USE empMgr;

#若主表dept不存在,则创建表dept,默认的字符集为utf8
CREATE TABLE IF NOT EXISTS dept(
  deptno INT PRIMARY KEY,
  dname VARCHAR(20) UNIQUE
);

#向表dept中插入4条记录
INSERT INTO dept VALUES
(10, '总裁办'),
(20, '研究院'),
(30, '销售部'),
(40, '运营部');

#若数据表emp不存在,则创建表emp,默认的字符集为utf8
CREATE TABLE IF NOT EXISTS emp(
  empno INT PRIMARY KEY,
  ename VARCHAR(10) NOT NULL,
  job VARCHAR(10) NOT NULL,
  mgr INT,
  sal DECIMAL(10, 2) NULL,
  comm DECIMAL(10, 2),
  deptno INT,
  CONSTRAINT pk_dept_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno)
);

#查看表emp的结构
DESC emp;

#查看表emp中的内容
SELECT * FROM emp;

#向表emp中插入11条记录
INSERT INTO emp
VALUES
(9839,'刘一','董事长',NULL,6000,NULL,10),
(9982,'陈二','经理',9839,3450,NULL,10),
(9369,'张三','保洁',9902,900,NULL,20),
(9566,'李四','经理',9839,3995,NULL,20),
(9988,'王五','分析员',9566,4000,NULL,20),
(9902,'赵六','分析员',9566,4000,NULL,20),
(9499,'孙七','销售',9698,2600,300,30),
(9521,'周八','销售',9698,2250,500,30),
(9654,'吴九','销售',9698,2250,1400,30),
(9844,'郑十','销售',9698,2500,0,30),
(9900,'萧十一','保洁',9698,1050,NULL,30);

#查看表emp中的内容
SELECT * FROM emp;