mysql触发器对同一张表做操作_MySql 触发器对同表操作
触发器初始结构:
DELIMITER $$
CREATE
TRIGGER `数据库名`.`触发器名` BEFORE/AFTER INSERT/UPDATE/DELETE
ON `数据库名`.`表名`
FOR EACH ROW BEGIN
-- 逻辑、条件语句
END$$
DELIMITER ;
目的:当一张表中的某个字段值更新为特定值时,触发更新本条数据的另一字段值
( 示例:根据 prj_base_info 表中的 project_status 的值判断是否是600时,触发更新同表的 complete_time 字段的时间为系统当前时间 )
开始写出的触发器如下所示
DROP TRIGGER IF EXISTS update_complete_time;
DELIMITER $
CREATE TRIGGER update_complete_time AFTER UPDATE
ON prj_base_info FOR EACH ROW
BEGIN
IF (new.project_status=600)
THEN
UPDATE prj_base_info
SET complete_time =DATE_FORMAT(NOW(), '%Y-%m-%d')
WHERE prj_base_info.id = new.id;
END IF;
END $
执行结果没有问题,创建触发器成功,但是执行 update 语句进行测试如下报错,提示:无法更新存储函数/触发器中的表 'prj_base_info',因为它已经被调用此存储函数/触发器的语句使用。
1 queries executed, 0 success, 1 errors, 0 warnings
查询:update prj_base_info set type=2,project_status=600 where id='1537842899333'
错误代码: 1442
Can't update table 'prj_base_info' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
通过查阅资料了解,同表的更新不能在触发器里使用 update,而是直接使用set
修改为:
DROP TRIGGER IF EXISTS update_complete_time;
DELIMITER $
CREATE TRIGGER update_complete_time AFTER UPDATE
ON prj_base_info FOR EACH ROW
BEGIN
IF (new.project_status=600)
THEN
SET new.complete_time =DATE_FORMAT(NOW(), '%Y-%m-%d')
;
END IF;
END $
结果发现还报错。。。
错误代码: 1362
Updating of NEW row is not allowed in after trigger
把 AFTER 修改为BEFORE即可:
DROP TRIGGER IF EXISTS update_complete_time;
DELIMITER $
CREATE TRIGGER update_complete_time BEFORE UPDATE
ON prj_base_info FOR EACH ROW
BEGIN
IF (new.project_status=600)
THEN
SET new.complete_time =DATE_FORMAT(NOW(), '%Y-%m-%d')
;
END IF;
END $
BEFORE 与 AFTER 区别:
BEFORE:( insert、update )可以对 new 进行修改,AFTER 不能对 new 进行修改,两者都不能修改 old 数据。
对于 INSERT 语句, 只有 NEW 是合法的;
对于 DELETE 语句,只有 OLD 才合法;
对于 UPDATE 语句,NEW、OLD 可以同时使用。
总结:BEFORE 或 AFTER 关键字决定何时执行触发器动作,决定是在关联行的插入、修改或删除之前或者之后执行触发器动作。
mysql触发器对同一张表做操作_MySql 触发器对同表操作相关推荐
- MySQL简单表的数据_MySQL(二)表的操作与简单数据操作
六大约束:主键约束.外键约束.非空约束.唯一约束.默认约束.自动增加 1.not null非空 2.defaul默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primar k ...
- MySQL优化调优有没有做过_MySQL 调优/优化的 100 个建议
MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定的安装环境,但是思路是相通的.我已经将它们分成 ...
- mysql 吧库下的表名都加_MySQL 数据库名、表名、字段名大小写敏感记录
问题如下: 比如上图中的PERSON表,查询SQL语句中如果表名是小写,就会报错说person表不存在. 因为Linux环境下的MySQL数据库的表名默认是区分大小写的,可以查看Linux上的MySQ ...
- mysql行锁还需要乐观锁吗_mysql行锁、表锁。乐观锁,悲观锁
锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...
- mysql 中间表的好处_Mysql中使用中间表提高统计查询速度
对于数据量较大的表,在其上进行统计查询通常会效率很低,并且还要考虑统计查询是否会对在线的应用产生负面影响.通常在这种情况下,使用中间表可以提高统计查询的效率, 下面通过对session 表的统计来介绍 ...
- excel 表做下拉框_Excel工作表的组合框下拉列表
excel 表做下拉框 Would you prefer a bigger font size for items in a data validation drop down list? Would ...
- 怎么修改mysql表的结构_MySQL数据库如何修改表结构
MySQL数据库修改表结构的方法:1.使用add添加字段,使用drop删除字段:2.使用alter修改字段名:3.修改列类型:4.修改表名:5.修改表选项:6.修改列属性. [相关图文教程:mysql ...
- mysql建库建表的语句_mysql建库建表语句
1.mysql管理数据库 1.1 创建数据库 创建数据库:CREATE DATABASE 数据库名; 显示数据库名: show database; 1.2删除数据库 删除数据库:drop databa ...
- mysql插入另一个表中数据_MySql中把一个表的数据插入到另一个表中的实现
1.如果2张表的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表; insert into insertTest select * ...
- mysql删除表编码字段_mysql 修改 添加 删除 表字段
mysql 修改 添加 删除 表字段 添加表的字段 alter table 表名 add 字段名 字段的类型 例子: alter table table1 add transactor varchar ...
最新文章
- RDKit | 基于RF和SVM的溶解度预测模型比较
- php 图片预览原理,JavaScript_纯JS实现的批量图片预览加载功能,1.实现原理直接见代码,需要一 - phpStudy...
- 马斯克的火箭,这次没!爆!炸!
- Gnu/Linux 链接XServer方法
- mysql 中文含数字排序_英语| 124期 Sort 坑爹的字符串排序
- 「Python」unindent does not match any outer indentation level
- mybatis使用in语句作为查询条件
- ROS入门 Client Library与roscpp
- 【转】惹恼程序员的十件事
- 【spring】注解开发和spring整合junit
- 计算机机房维护与管理,计算机机房的管理与维护.doc
- php项目推荐,php教程推荐:最值得推荐的10个php教程
- java web 项目分模块,javaweb项目模块划分
- 主力用计算机吸筹,通达信主力吸筹指标
- 感冒究竟能不能喝咖啡
- 怎么给图片加边框线?图片加边框的方法
- cs服务器(cs索沛服务器)
- (基础篇1-15)项目架构简介及环境搭建
- 动手深度学习v2 汇聚层pooling 课后习题
- ebcdic java_在Java中将EBCDIC转换为ASCII
热门文章
- c语言程序中的注释必须单独占一行,C语言习题第一章
- extract进程 oracle,ogg extract进程stoped问题
- java中集合的区别_Java中的集合与集合之间的区别
- 添加域名不生效_域名注册+域名解析、备案方法
- linux查看无线网卡频率,查看无线网卡工作模式
- python对话机器人软件_如何用Python为聊天机器人创建对话?
- 查看MySQL句柄_mysql查询语句-handler
- python函数的高级用法
- test index.php,index.php
- 24有几种封装尺寸_Y6T16 光模块尺寸演进