触发器(trigger)与事务

触发器(trigger)

触发器:前触发(before)、后触发(after)

触发事件(会引起触发器工作的事件):update \insert\delect

A事件——>触发器事件:A之前发生触发器事件那就是前触发器

​ A之后发生触发器事件那就是后触发器

CREATE TRIGGER 触发器名
触发时间 触发事件
ON 表名
FOR EACH ROW  _(行级触发器,每一行)
BEGIN 
触发程序
END


DELIMITER //
CREATE TRIGGER t1
BEFORE INSERT 
ON student 
FOR EACH ROW
BEGIN
IF(new.ssex!='男'&&new.ssex!='女')
THEN signal SQLSTATE 'ERROR' SET message_text='学生性别只能是男女';
END IF;
END;//
DELIMITER ;

old内存表:暂时保存修改之前的旧表

new内存表:暂时保存修改之后的新表

事务

OLTP:在线事务处理(业务处理增删改操作)

OLAP:在线分析处理(查询大量数据为了决策提供)

事务特性:

  • 原子性:事务中所有操作视为一个原子单元,即对事务所进行的数据修改等操作只能完全提交或者完全回滚
  • 一致性:事务完成时所有的变更都必须应用于事务的修改,以确保数据的完整性
  • 隔离性:一个事务中的操作语句所做的修改必须与其他事务所做的修改相隔离,这种特性通过锁机制实现
  • 持久性:事务完成之后,所做的修改对数据的影响是永久的

使用BEGIN开始事务,COMMIT结束事务提交,ROLLBACK回滚事务。

MySQL通过SET AUTOCOMMIT \ START TRANSACTION \ COMMIT和ROLLBACK等语句支持本地事务。

方法一:执行命令“SET AUTOCOMMIT”

方法二:执行命令“START TRANSACTION”(推荐使用该方法)

START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0|1}

例题:

CREATE DATABASE test4;
USE test4;
CREATE TABLE account
(account_no INT PRIMARY KEY,
account_name CHAR(10) NOT NULL,
balance INT UNSIGNED);

INSERT INTO account VALUES(123,'甲',1000);
INSERT INTO account VALUES(456,'乙',1000);

DELIMITER //
CREATE PROCEDURE TRAN_proc(IN from_account INT,IN to_account INT,
IN money INT)
MODIFIES SQL DATA
BEGIN
DECLARE EXIT HANDLER FOR 1690
BEGIN
ROLLBACK TO b;
SELECT '转账失败';
ROLLBACK;
END;
START TRANSACTION;
SAVEPOINT a;
SELECT 'a';
UPDATE account SET balance=balance+money WHERE account_no=to_account;
SAVEPOINT b;
SELECT 'b';
UPDATE account SET balance=balance-money WHERE account_no=from_account;
SAVEPOINT c;
SELECT 'c';
COMMIT;
END;
//
DELIMITER ;

CALL TRAN_proc('123','456',800);
SELECT * FROM test4;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值