草庐IT

TRIGGERS

全部标签

mysql - 从 MySQL 中的 TRIGGER 中更改 LAST_INSERT_ID()

我有一个BEFOREINSERTTRIGGER用于计算AUTO_INCREMENT列的值(id_2)。id_1|id_2|data1|1|'a'1|2|'b'1|3|'c'2|1|'a'2|2|'b'2|3|'c'2|4|'a'3|1|'b'3|2|'c'我有PRIMARY(id_1,id_2)并且我正在使用InnoDB。之前,该表使用的是MyISAM,我没有遇到任何问题:id_2被设置为AUTO_INCREMENT,因此id_1的每个新条目会生成新的id_2在其自己的。现在,在切换到InnoDB之后,我有这个触发器来做同样的事情:SET@id=NULL;SELECTCOALESCE(

触发器中的 MySQL 错误 "Unknown column in ' NEW'"

我在MySQL中遇到“插入触发器之前”的不一致错误,无法找出原因。我有一个表,其中包含以下描述:+-----------+---------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+---------------+------+-----+---------+-------+|ROW_ID|int(11)|NO|PRI|0|||ID|int(11)|NO|UNI|NULL|||TITLE|varchar(32)|NO||NULL|||TEXT|varchar

Mysql:何时使用触发器

我目前正在制作在线多人国际象棋游戏。我想知道用户触发器是否适合登录每个Action。然后,我会使用nodejs重复检查触发器表并更新玩家和观察者的视觉效果。因为我只需要在数据库中进行更改,视觉方面会自动跟进(使用循环功能检查数据库中更改的数据)。这样做的目的是将视觉效果与制作游戏所涉及的逻辑分开。你们中有人会推荐这种技术还是根本不行? 最佳答案 您为您的任务描述了一个可能的技术解决方案。但我强烈建议不要这样做。这不会很好地扩展-它会增加数据库和应用程序服务器的大量开销和负载。还有其他扩展性更好的轻量级可能性:使用消息队列(例如)re

mysql - 在存储过程中使用动态 SQL 的解决方法是什么

存储过程DELIMITER$$CREATEPROCEDURE`lms`.`leads_to_bak`()BEGINSET@table1=(SELECT`tabler_name`FROM`sets`WHERE`on_off`=0LIMIT1);SET@table2=CONCAT(@table1,'_bak');SET@SQL1=CONCAT('INSERTINTO',@table2,'(',(SELECTREPLACE(GROUP_CONCAT(COLUMN_NAME),'lead_id,','')FROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME

php - 通过 PHP 创建 mysql 触发器?

我在PHP5.3中执行以下操作:$sql="CREATETRIGGER`_photo_fulltext_insert`AFTERINSERTON`photo`FOREACHROWINSERTINTO`_photo_fulltext`SELECT*FROM`photo`WHERE`id`=NEW.`id`;CREATETRIGGER`_photo_fulltext_delete`AFTERDELETEON`photo`FOREACHROWDELETEFROM`_photo_fulltext`WHERE`id`=OLD.`id`;DELIMITER|CREATETRIGGER`_photo

mysql - 在更新语句后获取 MySQL 触发器中的旧值

我有以下MySQL触发器SET@iUserId=OLD.LastChangedBy;IFNOTNEW.LastChangedByOLD.LastChangedByTHENSET@iUserId=NEW.LastChangedBy;ENDIF;IFNOTNEW.BookingIdOLD.BookingIdTHENINSERTINTOAuditTrailVALUES(UUID(),@iUserId,'UPDATE','Booking',OLD.BookingId,'BookingType',OLD.BookingType,NEW.BookingType,NOW());ENDIF;这称为创建

mysql触发器 "without"FOR EACH ROW

我设计了一个应用程序来分析一个城市不同地方的客流量统计数据。我为每个计数站点设计了一个数据表(以下简称DT):startDate(DATETIME),dataCount(INT).每条记录都包含计数的开始日期和柜台前访问的数量。每条记录都清楚访问的次数。记录间隔取决于计数器(一般为每小时数据)。我有一张表(以下简称resumeDT)总结了我所有的统计站点:name,dateReference,location,描述...和dailyAvg。我想创建一个这种类型的触发器:CREATETRIGGERavgDTAFTERUPDATE,INSERT,DELETEONDTFOREACHROWUP

MySQL 触发器 - 插入触发器后 + UDF sys_exec() 问题

问题:我有一个包含某些记录的表。插入完成后,我想通过MySQL的sys_*UDF调用外部程序(php脚本)。现在,问题-我已经将记录的ID传递给脚本的触发器。当我尝试通过脚本提取数据时,我得到0行。在我自己的测试中,我得出结论,触发器调用php脚本并在实际插入发生之前传递参数,因此我没有得到给定ID的记录。我已经在MySQL5.0.75和5.1.41(UbuntuOS)上测试过了。我可以确认参数在实际插入发生之前已传递给脚本,因为我添加了sleep(2);到我的php脚本,我已经正确地获得了数据。没有sleep();语句,我收到给定ID的0条记录。我的问题是-如何解决这个问题而不必在p

MySQL CHECK 约束替代

根据MySQL手册“CHECK子句被解析但被所有存储引擎忽略。”所以我知道简单的解决方案是不可能的,但是是否有另一种可行的方法可以达到相同的结果?也许通过使用触发器或存储过程?如果是怎么办?此外,因为它只是被“解析”,所以说因为它没有用处而避免使用它是不是好?使用MySQL5.5.11和InnoDB表 最佳答案 看看这篇有趣的文章https://wikis.oracle.com/display/mysql/Triggers#Triggers-EmulatingCheckConstraints我经常使用这种方法。

php - 管理 session 变量的方法

最近几天我一直在阅读有关(mysql)触发器的内容……具体来说,我想做的是找出一种更新用户信息的好方法。这个用例与用户管理系统有关:例如,admin用户将regular用户更新为manager,此用户type更改将在界面上启用|禁用软件功能。问题:除非您查询数据库并重置例如$_SESSION['user']['type']变量,否则您不会知道此用户type更改,并且或用户登录|退出系统。问题:有什么好的方法可以解决这个头痛的问题吗? 最佳答案 我不认为mysqltriggerswouldbeidealforthis.为什么?因为您很