问题标签 [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.
mysql - MySQL触发器为新行设置值并更新同一个表中的另一个
我有一张表格,用于跟踪特定项目的费用。这些费用会随着时间而改变,所以我有两列(startDate、endDate),当前的费用集在遥远的将来总是有一个 endDate。我已经有一个触发器,用于对正在输入的新行进行一些计算,但我还希望发生的是,如果我输入一个已经有条目的项目,我想将上一个条目的 endDate 设置为前一天新条目的 startDate 和新的 endDate 到预定的遥远日期。这是我首先尝试的代码:
我得到的错误是:
android - SQLite:如何根据时间戳限制行数?
我成功地使用了以下BEFORE INSERT
触发器来限制存储在 SQLite 数据库表位置中的行数。数据库表在 Android 应用程序中充当缓存。
同时,我添加了第二个触发器,允许我进行INSERT OR UPDATE
行。- 关于该主题的讨论可以在另一个线程中找到。第二个触发器需要VIEW
在其上执行每个触发器INSERT
。
由于 anINSERT
不再在位置上执行,而是在TABLE
locations_view上执行,因此上述触发器不再起作用。如果我在以下错误消息上应用触发器,则会引发以下错误消息。VIEW
VIEW
问题:
如何更改上述触发器以观察每个触发器INSERT
-VIEW
或者您是否推荐另一种限制行数的方法?我更愿意在数据库中处理这种操作,而不是在我的客户端上运行前端代码。
性能问题:
虽然,限制器(上述触发器)通常工作 - 它的性能不如最佳!实际上,数据库操作需要很长时间,以至于引发了 ANR。据我所知,原因是每次发生时都会调用限制器INSERT
。为了优化设置,批量INSERT
应该被包装到一个事务中,并且限制器应该在之后执行。这可能吗?如果您愿意提供帮助,请将有关批量的优化评论INSERT
放入原始问题中。欢迎对限制器发表评论。
mysql - MySQL - 插入后更新同一张表的触发器
这是我正在尝试做的事情:
INSERT
当表格中有新内容时ACCOUNTS
,我需要通过设置来更新ACCOUNTS
where pk
=中的行,以表示特定(旧)帐户已被编辑。NEW.edit_on
status='E'
要求不是我操纵新插入的列,而是一个已经存在的列pk = NEW.edit_on
但是,我无法更新同一张表:Can't update table ACCOUNTS ... already used by the statement that invoked this trigger
请提出解决方法
PS:我已经在同一张表上更新后在触发器中更新表,插入到同一张表中触发mysql,在同一张表上使用插入触发器后更新,在表上插入后使用插入和更新的mysql触发器,但他们似乎没有回答我的问题。
编辑
ACCOUNTS
桌子:
mysql - 如何在 MySQL 中禁用触发器?
在我的 MySQL 数据库中,我有一些触发器ON DELETE
和ON INSERT
. 有时我需要禁用一些触发器,我必须DROP
例如
并重新安装。是否有任何快捷方式可以SET triggers hostgroup_before_insert = 0
像我们一样使用外键:
编辑答案 MySQL 中没有内置的服务器系统变量 TRIGGER_CHECKS。
一个简单的解决方法是改用用户定义的会话变量。
这个TRICK 在这里解释。
sql - 实时表的历史视图的数据库触发器?
我正在开发一个数据库来跟踪整个制造过程中物体的移动。目前我有一个“实时”表,其中包含目前正在处理的内容,包括它的当前位置(tLiveTable)
tLiveTable:
当 PieceID 移动到新位置时,我们执行更新,将 LocationRef 更新到新位置,并使用 GetDate() 更新时间戳。
但是,对于过去 PieceID 所在位置的历史视图,我还创建了一个跟踪表 (tPieceTracking)
tPieceTracking:
InOut 含义:1 = 进入该位置,0 = 离开该位置
我最初的计划是每次 PieceID 移动时手动向 tPieceTracking 插入一条新记录。
我的问题是,我是否可以在 SQL 2005 SP3 中使用数据库触发器或其他类型的脚本,以便数据库可以自动执行此跟踪(这样我的应用程序不负责执行此操作)?
我研究了数据库触发器,但我遇到的第一个绊脚石是 MSSQL 显然不支持 BEFORE UPDATE,我认为这是我需要触发的。
任何帮助,将不胜感激。
sql-server - 将新行添加到表后动态创建视图
我有一个包含 4 个表的数据库
-电池-电池-所有者
每个电池有多个电池和一个所有者。
单元格表将包含大量条目。我想要一个触发器,为每个显示电池信息及其电池信息的新电池创建视图。
我有一个运行良好的 postgre sql 触发器(感谢 stackoverflow :)):
但我无法将其转置到 SQL 服务器,而且我完全不知道该怎么做。
这是我的数据库的简单图表:
因此,最后对于每个新电池,我都需要查看它及其电池。
Ps:对不起,如果我的英语不流利:/
oracle - Oracle 创建触发器错误(错误的绑定变量)
我尝试使用以下代码创建触发器。
我收到错误
有任何想法吗?谢谢。
database-design - 使用触发器与视图获取当前数据状态
我是数据库设计的新手,我有一个关于为我的项目选择触发器与视图的问题。以下是一些细节:
使用的数据库:MySQL
每个名称 CAN(不是强制性的,但可能)包含级别和状态的所有组合。
例子:
名称:“王”可持有1级状态a、1级状态b、......、2级状态a、2级状态b..... 3级状态a、3级、状态b...... ..
现在我必须查询数据库以进行一些计算,以通过在网络上工作的 GUI(Java Swing)向用户显示它们。我需要的计算是......
每个名称的每个级别的每个状态的计数。例如:
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 行,并且用户可以是任意数字。请建议。
谢谢,拉朱
oracle - 为什么我不能在 SYS 拥有的对象上创建触发器?
在尝试创建名为的触发器时ghazal_current_bef_upd_row
:
我收到以下错误:
命名ghazals_current
和ghazal_current_audit
创建的表均由SYS
. 为什么我不能在由SYS
.
oracle - 如何将 PL/SQL 游标用于触发器的循环
嗨,我是 plsql 的新手,这是我第一次使用 plsql
我使用 plsql 创建了触发器。这是我用来创建该触发器的语法。但它给出了一个错误“ [Err] ORA-24344: success with compilation error
”我无法弄清楚我哪里出错了。在这个触发器中,我使用带有光标的 for 循环。我认为那个光标有问题 谁能帮我弄清楚我哪里出错了。我使用 Navicat 来执行此操作。我为此苦苦挣扎了将近 5 天 :( 在此先感谢