问题标签 [mysql-error-1442]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - MySQL 触发器:如果表变得太大,是否可以删除行?
在表 T 中插入新行时,我想检查表是否大于某个阈值,如果是,则删除最旧的记录(最终创建某种 FIFO)。
我以为我可以简单地制作一个触发器,但显然 MySQL 不允许修改我们实际插入的表:
这是我尝试过的触发器:
您对如何在数据库中执行此操作有任何想法吗?
或者这显然是我的程序中要做的事情?
mysql - mysql trigger 存储触发器已被调用存储触发器的语句使用
我想设置一个触发器,以便如果在更新时预测字段 = 3,则触发器将值更改为 4 并将其保存在数据库中。触发器如下。
出于某种原因,我不断收到错误消息:
这是正确的设置方式吗?
mysql - MySQL:如何创建触发器以设置新行的创建日期
当我尝试在我的数据库中创建两个 TIMESTAMP 列时遇到了一个问题。一呼created
一呼updated
。CURRENT_TIMESTAMP
我认为将两者的默认值设置为然后ON UPDATE CURRENT_TIMESTAMP
为updated
列设置会很容易。但由于某种原因,MySQL 意味着这是一个坏主意……所以我一直在寻找方法来做到这一点,而不必在插入查询中设置其中一个。
我通过在这个答案中使用触发器找到了一种方法,但我不断收到错误。我刚刚设法实际创建了触发器,但是现在当我尝试插入声称该触发器的新行时出现错误
1442 - 无法更新存储函数/触发器中的表“任务”,因为它已被调用此存储函数/触发器的语句使用。
我完全不明白这意味着什么。所以,我希望这里有人可以阐明这个主题。
我用来创建表和触发器的SQL如下:
我在这里做错了什么?
mysql - 在树中查找节点级别
我有一棵树(嵌套类别)存储如下:
我需要为我的客户端语言(PHP)提供节点信息(子+父),以便它可以在内存中构建树。我可以调整我的 PHP 代码,但我认为如果我可以按照所有父母都在他们的孩子之前的顺序检索行,那么操作会更简单。如果我知道每个节点的级别,我可以这样做:
你能想出一种方法(视图、存储的例程或其他什么……)来计算节点级别吗?我想如果它不是实时的也没关系,我需要在节点修改时重新计算它。
第一次更新:到目前为止的进展
我根据 Amarghosh 的反馈编写了这些触发器:
它似乎适用于插入和修改。但它不适用于删除:当从ON UPDATE CASCADE
外键更新行时,MySQL 服务器不会启动触发器。
第一个明显的想法是写一个新的删除触发器;categories
但是,不允许table 上的触发器修改同一个 table 上的其他行:
错误:
网格编辑错误:SQL 错误 (1442):无法更新存储函数/触发器中的表“类别”,因为它已被调用此存储函数/触发器的语句使用。
第二次更新:工作解决方案(除非证明是错误的)
我的第一次尝试非常明智,但我发现了一个我无法解决的问题:当您从触发器启动一系列操作时,MySQL 将不允许更改同一张表中的其他行。由于节点删除需要调整所有后代的级别,所以我碰壁了。
最后,我使用此处的代码更改了方法:而不是在节点更改时更正单个级别,我有代码来计算所有级别并在每次编辑时触发它。由于这是一个缓慢的计算和获取数据需要一个非常复杂的查询,我将它缓存到一个表中。就我而言,这是一个可以接受的解决方案,因为版本应该很少见。
1.缓存级别的新表:
2. 计算级别的辅助函数
如果我真的掌握了它的工作原理,它本身并不会真正返回任何有用的东西。相反,它将内容存储在会话变量中。
3. 启动重新计算过程的程序
它基本上封装了检索由辅助函数辅助的级别的复杂查询。
4. 使缓存表保持最新的触发器
5. 已知问题
- 如果节点经常更改,那将是非常不理想的。
- MySQL 不允许触发器和过程中的事务或表锁定。在编辑节点时,您必须注意这些细节。
mysql - 在同一表上更新后在触发器中更新表
在同一张表上更新后,如何在触发器中更新表的列?
这是触发器:
现在当我更新表格时
这不起作用,因为我得到以下信息:
那么我到底怎么才能让它工作呢?
mysql - mysql 5.2.3 在触发器内调用的过程出现语法错误
使用表 Iscr 上的这个,当我尝试插入行时,我得到 ERROR 1442 任何帮助??
谢谢
mysql - MySql 触发器删除同一张表中的子记录
我有一个存储父子记录的表。
我试图创建一个触发器,该触发器将在删除父项时删除所有子记录:
虽然我可以成功保存触发器,但删除时出现此错误:
错误 1442:无法更新存储函数/触发器中的表“tbl”,因为它已被调用此函数的语句使用
我究竟做错了什么?
mysql - 错误 1442:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用
我有一个我想要的表:当表更新后,该表的 2 个字段(标题和描述)会更改并从另一个表中获取值
这是我的触发器:
我的桌子:
- trade_request_type
- 交易请求
错误:
错误 1442:无法更新存储函数/触发器中的表“trade_request”,因为它已被调用此存储函数/触发器的语句使用。
这没用!问题是什么?
mysql - mysql错误1442的真正原因是什么?
好吧,我已经在互联网上寻找了很多地方的原因,mysql error #1442
其中说
无法更新存储函数/触发器中的表“unlucky_table”,因为它已被调用此存储函数/触发器的语句使用
有人说这是 mysql 中的错误或它不提供的功能。
MySQL 触发器无法操作分配给它们的表。所有其他主要的 DBMS 都支持此功能,因此希望 MySQL 将很快添加此支持。
有人声称这是由于 插入记录时的递归行为 mysql 正在执行一些锁定操作。你不能插入/更新/删除你插入的同一个表的行..因为那样触发器会一次又一次地调用..以递归结束
在插入/更新期间,您可以访问包含相关表中所有字段的 NEW 对象。如果您在插入/更新之前执行并编辑要在新对象中更改的字段,它将成为调用语句的一部分,而不是单独执行(消除递归)
现在我不明白为什么这是递归的。我有一个案例,我有 2 个表table1
,table2
并且我运行一个 sql 查询
现在我after update trigger
有table1
一个
现在,当我执行更新查询时,出现 1442 错误。在这种情况下什么是递归的?
mysql - mysql 在表 1 上插入触发器后,在表 2 中插入,该触发器具有更新表 1 的 after insrt 触发器
我有两个表,一个名为fs_note,另一个名为dumy_fs_note
,我在插入之后创建,在fs_table上的 Delete 触发器之后,将带有计算数据的行插入到具有后插入触发器的dumy_fs_table,该触发器应使用新值更新 fs_table 中的某一行
问题是现在我有错误:#1442 Can't update table 'fs_note' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
为什么会这样?是 dumy_fs_note 表试图更新 fs_table 不是同一个表,知道有什么问题吗?
提前致谢