Mysql触发器与事务
一:触发器(只有insert,delete,update才有触发器,没有select触发器)
今天碰到mysql的insert触发器的时候,发现其实不管是前置触发器还是后置触发器得出的结果都是一样的,这样的话干嘛还要分前置和后置呢?后来终于明白了,从语法上来讲,两者结果确实是一样的,但是重点就在于需要看使用场合!单纯的抠语法的话,会使自己陷入死胡同当中。
例如:有一个学生表和一个班级表,学生表中有班级表的外键,这样在删除班级表之前,如果班级表在学生表中存有外键的话那么就需要先把学生表中的外键删除才能够删除班级表,这就一定得需要前置触发器了!
CREATE TRIGGER before_del_t_class
BEFORE DELETE ON t_class
FOR EACH ROW
DELETE FROM t_student WHERE classid = old.classid;
DELETE FROM t_class WHERE classid = 1;
二:事务
1:是编程中最小的执行单元,它的代码要么全部成功,要么全部失败,不能部分成功,部分失败
2.例子:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Savepoint;
public class Test1 {
public static void main(String[] args) {
Connection conn = null;
Savepoint sp = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");
conn.setAutoCommit(false); //写事务的开始,相当于START TRANSACTION
String sql1 = "INSERT INTO t_prod(prodname,price) VALUES('乌龟',52.6)";
String sql2 = "INSERT INTO t_prod(prodname,price) VALUES('王八',33.5)";
PreparedStatement stat = conn.prepareStatement(sql1);
stat.executeUpdate();
//设置保留点,可以将这个保留点之前的部分先提交,等一下rollback的时候可以直接回到这个保留点,不用从头再来,可以没有保留点
sp = conn.setSavepoint();
stat = conn.prepareStatement(sql2);
stat.executeUpdate();
conn.commit(); //执行完SQL语句之后记得要提交才可以
} catch (Exception e) {
e.printStackTrace();
try {
//当事务出现异常时(比如只有部分的squall语句能够执行),则需要回滚到指定的保留点,如果没有保留点的话,则会回滚到最开头
conn.rollback(sp);
conn.commit(); //在JDBC中回滚完之后还得提交才可以
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}
转载于:https://www.cnblogs.com/dongzhouzhou/archive/2012/08/27/2658339.html
Mysql触发器与事务相关推荐
- mysql七:视图、触发器、事务、存储过程、函数
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...
- mysql latid1_【转】mysql触发器的实战经验(触发器执行失败,sql会回滚吗) | 学步园...
1 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...
- mysql-视图、触发器、事务、存储过程、流程控制
目录 视图 触发器 事务 存储过程 流程控制 一.视图 视图是由查询结果构成的一张虚拟表,和真实的表一样,带有名称的列和行数据 强调:视图是永久存储的,但是视图存储的不是数据,只是一条sql语句 视图 ...
- [数据库] Navicat for MySQL触发器更新和插入操作
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...
- 关于mysql触发器和存储过程的理解
内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...
- MySQL触发器(转载)
触发器(trigger)是数据库中的一个很重要的.很实用的基于事件的处理器,在处理一些业务需求的时候,使用触发器会很方便.似乎在<高性能MySQL>中,对触发器作了一定的描述,也提到使用中 ...
- mysql触发器的要素_MySQL触发器
触发器是一类特殊的事务,可以监视某种数据操作(insert,update,delete),并触发相关操作(insert,update,delete) 触发器创建之四要素: 监视地点 (table) 监 ...
- 【无标mysql触发器trigger实例详解
文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 目录 什么是触发器 创建 ...
- mysql触发器大全
在研究MySQL触发器经历几番波折之后,我终于决定写下这篇MySQL触发器的使用介绍,以便后来人! 一.mysql触发器的作用及语法 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触 ...
- 【MYsql触发器】
一.基本概念 触发器是一种特殊类型的存储过程,它不同于存储过程,主要是通过事件触发而被执行的,即不是主动调用而执行的:而存储过程则需要主动调用其名字执行 触发器:trigger,是指事先为某张表绑定一 ...
最新文章
- 删除a3.txt文件中含dong的行
- mysql使用中遇到的问题吗_MySQL使用中遇到的问题及解决办法
- Servlet应用之细节
- Ubuntu录制GIF动画
- tinyxml2解析XML文件
- mfc怎么获取进程的线程数_Python多线程获取小米应用商店App,看看我是怎么做到的
- java 提交的内存_Java使用内存映射实现大文件的上传
- 面向对象设计原则之4-依赖倒置原则
- 来自未来的缓存 Caffeine,带你揭开它的神秘面纱
- Mysql:语法:标志符、关键字
- js获取用户使用的设备类型及平台
- 小程序未来移动社交电商!
- Python 根据身份证号判断所属省份,生日与性别
- Express 介绍
- IOS UI学习 UI 十个小控件 初度学习
- FFmpeg转换ts为mp4
- 经济基础知识(初级)【17】
- Cesium中的Heading/Pitch/Roll详解
- Python打印简单杨辉三角形
- HTTP协议:接口测试_发送请求_post方法