首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我可以在MySQL触发器中使用类似事务的功能吗

我可以在MySQL触发器中使用类似事务的功能吗
EN

Stack Overflow用户
提问于 2012-02-13 04:27:01
回答 2查看 3.4K关注 0票数 5

我有一个insert触发器,它从表A的行中获取一组列值,并将其中一些插入到表B中,剩下的在表C中。我需要这个操作是一个事务,如果在将数据插入到表B而不是C时出现错误,则应该回滚整个插入操作。

我研究了手册,在this页面的最后,它说触发器中不允许事务

有没有办法在mysql中实现我想要的。

EN

回答 2

Stack Overflow用户

发布于 2012-07-31 08:36:51

是的,你可以,但是你怎么做取决于你的版本。

首先,触发器本身是事务性的;在您的情况下,您有一个insert触发器来执行两次进一步的插入。如果其中一个失败了,你会得到你想要的效果。

考虑以下示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE a (colA INT);
CREATE TABLE b (colB INT);
CREATE TABLE c (colC INT);
delimiter :
CREATE TRIGGER testtrig BEFORE INSERT ON a
  FOR EACH ROW BEGIN
    INSERT INTO b(colB) VALUES(NEW.colA);
    INSERT INTO c(banana) VALUES (NEW.colA); -- note the faulty column name
END;:
delimiter ;

现在,当我运行一个insert失败时,就会发生这种情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> INSERT INTO a VALUES (5);
ERROR 1054 (42S22): Unknown column 'banana' in 'field list'
mysql> SELECT * FROM a;
Empty set (0.00 sec)

这与您期望的结果相匹配。

更一般地,如果在尝试插入之前有可用于验证数据的逻辑,则可以通过不同的方式使触发器失败:

  • 在MySQL 5.5中,您可以使用SIGNAL机制从触发器中引发错误,从而导致整个插入失败。
  • 在MySQL 5.5之前,您可以生成故意的错误以使触发器失败。

我猜您使用的是问题中链接中的5.0,因此如果需要,您可以执行故意的错误,例如故意插入到无效的列中,从而使触发器失败。但是,您在问题中描述的情况已经进行了事务处理,正如我在答案开头所描述的那样。

票数 4
EN

Stack Overflow用户

发布于 2015-07-02 20:49:59

默认情况下,您得到了所要求的结果--触发器中的任何错误都会导致语句失败。因此,如果该语句上存在事务,则会将数据回滚到该语句之前。如果没有事务,那么就不需要。

这可能就是为什么在触发器中不允许创建或结束事务的原因。

所以不需要存储过程。实际上,从触发器调用的存储过程在尝试创建事务时可能会导致错误。

但是,在执行导致触发器的操作之前,可以使用存储过程启动事务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9255608

复制
相关文章
MySQL中触发器的使用
如遇到触发器报错“Not allowed to return a result set from a trigger”;请划到最后看详解;
xbhog
2020/12/10
3.3K0
Mysql中事务的使用【mysql】
1,作用 主要用户操作处理量大,复杂度高的数据。要保证sql语句,要么全执行,要么全不执行,但它必须要满足四个条件:原子性,一致性,隔离性,持久性。 2,方法 事务有两种处理方法 【用 BEGIN, ROLLBACK, COMMIT来实现】 BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认 【直接用 SET 来改变 MySQL 的自动提交模式】 SET AUTOCOMMIT=0 禁止自动提交 SET AUTOCOMMIT=1 开启自动提交
sinnoo
2020/11/13
3.4K0
我应该使用 PyCharm 在 Python 中编程吗?
Python 是一种广泛使用的编程语言,以其简单、多功能和庞大的开发人员社区而闻名。这个社区不断创建新的库和工具,以提高Python编程的效率和便利性。选择正确的环境来编写和调试 Python 代码可能具有挑战性,但 PyCharm 是一个很好的选择,从其他选项中脱颖而出。
很酷的站长
2023/02/20
4.6K0
我应该使用 PyCharm 在 Python 中编程吗?
MySQL 之视图、 触发器、事务、存储
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
py3study
2020/01/16
8960
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
4.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
4290
【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!
程序员,知道Mysql中事务ACID的原理吗?
说到事务的四大特性原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),懂的人很多。但是稍微涉及细节一点,这四大特性在数据库中的实现原理是怎么样的?那就没有几个人能够答得上来了。因此,我们这篇文章着重讨论一下四大特性在Mysql中的实现原理。
乔戈里
2019/11/12
5200
程序员,知道Mysql中事务ACID的原理吗?
OK,回到正题。说到事务的四大特性原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),懂的人很多。但是稍微涉及细节一点,这四大特性在数据库中的实现原理是怎么样的?那就没有几个人能够答得上来了。因此,我们这篇文章着重讨论一下四大特性在Mysql中的实现原理。
JAVA葵花宝典
2019/05/24
4410
Linux去重,实现类似mysql的distinct的功能
按空格区分进行去重,所以得出的是15:31:07.763000000,陕西省咸阳市,qq.com,5这后半部分。
bosh123
2021/01/15
2.8K0
触发器在渗透中的利用
0x01 什么是触发器: 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。 0x02 问题描述: a)通
逸鹏
2018/04/09
1.5K0
触发器在渗透中的利用
聊聊MySQL中的事务
一致性就是说事务符合某些约束,比如我给你转账,你的账户多了10块钱,我的账户就会少10块钱。
AsiaYe
2019/11/06
8620
聊聊MySQL中的事务
【MYSQL函数】MYSQL中IF函数在where中的使用
WHERE IF(条件, true执行条件, false执行条件) 业务需求: 查询SUPPLIER_CLASS=0 and tp1.`TYPE_FLAG` = 1 或者 SUPPLIER_CLASS=1 实现有两种:
用户5640963
2019/07/25
12.2K0
MySQL中的事务和事务隔离级别
一个事务是一个完整的业务逻辑单元,不可再分。 比如:银行账户转账,从A账户向B账户转账10000.需要执行两条update语句。
共饮一杯无
2022/11/28
7790
制作类似ThinkPHP框架中的PATHINFO模式功能
  搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大。
那一叶随风
2018/08/22
1.1K0
制作类似ThinkPHP框架中的PATHINFO模式功能
如何使用小程序实现类似Vux的功能
微信小程序原生没有提供全局的状态管理相关的api,但往往在开发小程序功能的时候又需要使用全局的状态管理,那下面我们就来实现一个类似 vuex 的状态管理功能。
andyhu
2023/03/08
1.1K0
mysql在存储过程中使用事务
CALL addtest('lzc','php','15286962317',@back);
93年的老男孩
2019/12/18
1.7K0
【DB笔试面试572】在Oracle中,模糊查询可以使用索引吗?
(1)若SELECT子句只检索索引字段,那么模糊查询可以使用索引,例如,“SELECT ID FROM TB WHERE ID LIKE '%123%';”可以使用索引。
AiDBA宝典
2019/09/29
9.9K0
MySQL 中事务详解
http://blog.csdn.net/qh_java/article/details/14045765
bear_fish
2018/09/20
1K0
[译]你可以在JSX中使用console.log吗?
可是上面的代码并不可以得到他们想要的结果,浏览器会把这段代码console.log(this.props.todos) 当做纯文本在界面展示出来 。
进击的大葱
2022/08/22
2.3K0
我可以弃用这个端点吗?
让我们假设你是一个开发人员,接管了 Catalog 微服务的所有权。你被要求弃用/v1/catalog 端点而使用新的/v2/catalog 端点。你该怎么做呢?
CNCF
2022/03/25
1.7K0
我可以弃用这个端点吗?

相似问题

我可以在MySQL/InnoDB中关闭事务吗?

22

我可以在UPDATE表MySQL事务中使用GROUP吗?

10

MySQL:在事务中,我可以在IF语句中使用SELECT的结果吗?

14

MySQL触发器:我可以使用更新吗?

13

我可以在触发器中创建MYSQL触发器或条件吗?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文