问题标签 [database-trigger]

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.

0 投票
4 回答
34411 浏览

mysql - MySQL触发器为新行设置值并更新同一个表中的另一个

我有一张表格,用于跟踪特定项目的费用。这些费用会随着时间而改变,所以我有两列(startDate、endDate),当前的费用集在遥远的将来总是有一个 endDate。我已经有一个触发器,用于对正在输入的新行进行一些计算,但我还希望发生的是,如果我输入一个已经有条目的项目,我想将上一个条目的 endDate 设置为前一天新条目的 startDate 和新的 endDate 到预定的遥远日期。这是我首先尝试的代码:

我得到的错误是:

0 投票
1 回答
1931 浏览

android - SQLite:如何根据时间戳限制行数?

我成功地使用了以下BEFORE INSERT触发器来限制存储在 SQLite 数据库表位置中的行数。数据库表在 Android 应用程序中充当缓存。

同时,我添加了第二个触发器,允许我进行INSERT OR UPDATE行。- 关于该主题的讨论可以在另一个线程中找到。第二个触发器需要VIEW在其上执行每个触发器INSERT

由于 anINSERT不再在位置上执行,而是TABLE locations_view上执行,因此上述触发器不再起作用。如果我在以下错误消息上应用触发器,则会引发以下错误消息。VIEW VIEW

问题:

如何更改上述触发器以观察每个触发器INSERT-VIEW或者您是否推荐另一种限制行数的方法?我更愿意在数据库中处理这种操作,而不是在我的客户端上运行前端代码。


性能问题:

虽然,限制器(上述触发器)通常工作 - 它的性能不如最佳!实际上,数据库操作需要很长时间,以至于引发了 ANR。据我所知,原因是每次发生时都会调用限制器INSERT。为了优化设置,批量INSERT应该被包装到一个事务中,并且限制器应该在之后执行。这可能吗?如果您愿意提供帮助,请将有关批量的优化评论INSERT放入原始问题中。欢迎对限制器发表评论。

0 投票
6 回答
113350 浏览

mysql - MySQL - 插入后更新同一张表的触发器

这是我正在尝试做的事情:

INSERT当表格中有新内容时ACCOUNTS,我需要通过设置来更新ACCOUNTSwhere pk=中的行,以表示特定(旧)帐户已被编辑。NEW.edit_onstatus='E'

要求不是我操纵新插入的列,而是一个已经存在的pk = NEW.edit_on

但是,我无法更新同一张表:Can't update table ACCOUNTS ... already used by the statement that invoked this trigger

请提出解决方法

PS:我已经在同一张表上更新后在触发器中更新表插入到同一张表中触发mysql在同一张表上使用插入触发器后更新,在表上插入后使用插入和更新的mysql触发器,但他们似乎没有回答我的问题。

编辑

ACCOUNTS桌子:

0 投票
1 回答
79534 浏览

mysql - 如何在 MySQL 中禁用触发器?

在我的 MySQL 数据库中,我有一些触发器ON DELETEON INSERT. 有时我需要禁用一些触发器,我必须DROP例如

并重新安装。是否有任何快捷方式可以SET triggers hostgroup_before_insert = 0像我们一样使用外键:

编辑答案 MySQL 中没有内置的服务器系统变量 TRIGGER_CHECKS
一个简单的解决方法是改用用户定义的会话变量。

这个TRICK 在这里解释

0 投票
1 回答
67 浏览

sql - 实时表的历史视图的数据库触发器?

我正在开发一个数据库来跟踪整个制造过程中物体的移动。目前我有一个“实时”表,其中包含目前正在处理的内容,包括它的当前位置(tLiveTable)

tLiveTable:

当 PieceID 移动到新位置时,我们执行更新,将 LocationRef 更新到新位置,并使用 GetDate() 更新时间戳。

但是,对于过去 PieceID 所在位置的历史视图,我还创建了一个跟踪表 (tPieceTracking)

tPieceTracking:

InOut 含义:1 = 进入该位置,0 = 离开该位置

我最初的计划是每次 PieceID 移动时手动向 tPieceTracking 插入一条新记录。

我的问题是,我是否可以在 SQL 2005 SP3 中使用数据库触发器或其他类型的脚本,以便数据库可以自动执行此跟踪(这样我的应用程序不负责执行此操作)?

我研究了数据库触发器,但我遇到的第一个绊脚石是 MSSQL 显然不支持 BEFORE UPDATE,我认为这是我需要触发的。

任何帮助,将不胜感激。

0 投票
1 回答
1035 浏览

sql-server - 将新行添加到表后动态创建视图

我有一个包含 4 个表的数据库

-电池-电池-所有者

每个电池有多个电池和一个所有者。

单元格表将包含大量条目。我想要一个触发器,为每个显示电池信息及其电池信息的新电池创建视图。

我有一个运行良好的 postgre sql 触发器(感谢 stackoverflow :)):

但我无法将其转置到 SQL 服务器,而且我完全不知道该怎么做。

这是我的数据库的简单图表:

数据库图

因此,最后对于每个新电池,我都需要查看它及其电池。

Ps:对不起,如果我的英语不流利:/

0 投票
4 回答
37806 浏览

oracle - Oracle 创建触发器错误(错误的绑定变量)

我尝试使用以下代码创建触发器。

我收到错误

有任何想法吗?谢谢。

0 投票
2 回答
115 浏览

database-design - 使用触发器与视图获取当前数据状态

我是数据库设计的新手,我有一个关于为我的项目选择触发器与视图的问题。以下是一些细节:

使用的数据库:MySQL

每个名称 CAN(不是强制性的,但可能)包含级别和状态的所有组合。

例子:

名称:“王”可持有1级状态a、1级状态b、......、2级状态a、2级状态b..... 3级状态a、3级、状态b...... ..

现在我必须查询数据库以进行一些计算,以通过在网络上工作的 GUI(Java Swing)向用户显示它们。我需要的计算是......

  1. 每个名称的每个级别的每个状态的计数。例如:

    King 的 1 级中有多少“状态 a”。King 的级别 1 中有多少“状态 b”。King 的级别 1 中有多少“状态 c”。国王级别 1 中有多少“状态 d”。King 的 2 级中有多少“状态 a”。很快....

    名称---级别---状态

    国王--- 1 --- 一个

    国王--- 1 --- 一个

    国王--- 1 --- 一个

    国王--- 1 --- b

    国王--- 1 --- b

    国王--- 1 --- d

    以此类推 2 级,然后还有不同的名称。我想计算 1 级的名字“King”

如果我执行单独的查询来获取这些数据,如果我有 20 个名字,我需要执行 320 个查询。我不想。我这里有两个解决方案...

解决方案 1. 我创建了一个触发器。

我创建了表 2:

当原始表 1 更新时,触发器会相应地添加到计数中。现在我直接从这个table2中读取。

解决方案 2:创建一个显示此数据的视图。

名称--级别--状态--计数

国王 1 a 3

国王 1 b 2

国王2一...

很快。

有了这个解决方案,我不需要一直通过网络发送所有查询。我可以只调用一次视图(它确实会执行所有查询,但不需要从程序中执行)

我可以实现两者,但我想知道哪种解决方案更有效。我将为每个用户(使用我的前端)在父表中保留大约 2000 行,并且用户可以是任意数字。请建议。

谢谢,拉朱

0 投票
1 回答
24545 浏览

oracle - 为什么我不能在 SYS 拥有的对象上创建触发器?

在尝试创建名为的触发器时ghazal_current_bef_upd_row

我收到以下错误:

命名ghazals_currentghazal_current_audit创建的表均由SYS. 为什么我不能在由SYS.

0 投票
2 回答
13110 浏览

oracle - 如何将 PL/SQL 游标用于触发器的循环

嗨,我是 plsql 的新手,这是我第一次使用 plsql

我使用 plsql 创建了触发器。这是我用来创建该触发器的语法。但它给出了一个错误“ [Err] ORA-24344: success with compilation error”我无法弄清楚我哪里出错了。在这个触发器中,我使用带有光标的 for 循环。我认为那个光标有问题 谁能帮我弄清楚我哪里出错了。我使用 Navicat 来执行此操作。我为此苦苦挣扎了将近 5 天 :( 在此先感谢