问题标签 [recursive-triggers]
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.
sqlite - 为什么在我没有*未*指定编译指示的 3.8.8.3 数据库中禁用递归触发器?
根据 SQLite 文档,从 3.7.0 版开始,递归触发器应该默认启用。但是,当我使用 3.8.8.3 版(特别是使用 NuGet 的 System.Data.SQLite 核心)打开与数据库的连接并检查编译指示时,它们被设置为“0”或关闭,果然,它们没有递归触发。
如果我在使用 3.8.2 的开源工具 Sqlite 浏览器之类的东西中打开数据库,它也会显示 pragma 设置为关闭。我可以在 UI 中启用它们,但是一旦我关闭,然后重新打开数据库,它们就会再次关闭。怎么回事?!!
我什至尝试添加“PRAGMA RECURSIVE_TRIGGERS = 1;” 到连接字符串,一些在线文档说应该可以工作,但当然不能。
我还查看了 SQLiteConnectionStringBuilder,虽然它确实提供了对其他与编译指示相关的东西(例如二进制 GUID)的参考,但它没有对递归触发器的参考,这让我更加相信您不能为此使用连接字符串。
简而言之,这破坏了我们的应用程序。我们依赖于数据完整性的递归触发器。
我们唯一的解决方案是手动编辑应用程序用来添加编译指示的每个 SQL 查询,这真是个婊子!
所以......谁能帮我弄清楚为什么默认情况下没有启用递归触发器?
postgresql - Postgres - 将收集的数据从一个视图存储到表中?
版本:Postgres 9.3 / PG-Admin 3
我不知道是否有办法做到这一点 - 但我创建了一个视图,用于查询一行的实时数据集合。它运行一个查询并给出那个时间的结果。这是我的目标:
- 将该查询设置为每 5 分钟运行一次
- 每次运行该查询时,我都想将该段数据存储到另一个永久表中。所以视图收集数据 - 表将存储数据。
每次视图刷新时,我都会丢失以前的记录 - 这就是我尝试将数据存储到另一个表中的原因。
一次收集一行以收集实时数据的查询的原因 - 但我需要一个地方来存储它,以便以后可以有历史数据参考。
有没有办法在 Postgres 中做到这一点?非常感谢任何提示或想法!
mysql - MySQL递归更新触发器
我发现了很多关于这个的讨论,似乎 mySQL 根本不允许使用递归触发器。其他讨论建议不要尝试这样做,但我对触发器的设计相当有信心,因此它不会冒无限循环的风险。
我想我是在要求确认 mySQL 中的这种限制/设计选择,以及对我想要实现的替代方法的任何建议。
- -'问题' - -
总而言之,我有一个数据库,其中包含一个联系人/用户表,以及一些“信息”表,例如地址/电话/电子邮件。出于这个问题的目的,我将只关注地址。地址表有一个contact_id col,用于指定它属于哪个联系人。
为了快速澄清,联系人可以将非对多地址附加到他们的帐户,这就是我将该信息分隔到单个表的原因。
当用户登录他们的帐户时,我会进行查询以获取带有他们的contact_id的地址列表,然后允许他们编辑/删除它/添加新条目等。
我现在想为联系人指定一个主要地址,因此在完成订单时,他们可用地址的下拉列表默认为他们的主要地址。
我正在尝试设置地址更新触发器,因此如果 is_primary col 从 0/false 更新为 1/true 它也会更新以前的主地址。
本质上,我只希望地址表中的每个contact_id 有1 行能够将is_primary 设置为1/true。
- -方法 - -
我写了下面的触发器(我在更新前后都试过了)
(请暂时忽略多个 ';' 分隔符的情况)
我相信触发器应该是正确的。
更新地址之前
如果 is_primary 从 0/false 变为 1/true(即它成为主要的)
将具有相同 contact_id 的主地址的 is_primary 更改为 0/false (is_primary = 1/true)
MySQL(通过 phpmyadmin 访问)允许我添加触发器,但在触发器运行时抛出错误(当我将行 is_primary 从 0 更新为 1 时)。
---为什么我认为我的方法应该有效---
我理解为什么在更新同一个表时调用的触发器内的更新表语句可能会导致问题。但我认为这应该留给设计师。
此触发器不可能遇到无限循环,因为“内部”更新语句将始终将 OLD.is_primary = 1 更新为 NEW.is_primary = 0,并且触发器更新查找 OLD.is_primary = 0 到 NEW.is_primary = 1。
知道 mySQL 无法控制我做我需要做的事情,让我免于我已经考虑和解决的可能问题,这有点令人沮丧。
- -问题 - -
有谁知道我如何让这个触发器在 mySQL 中起作用?
有人看到我可能忽略的触发器有问题吗?
或者有没有人建议实施我所描述的情况?
我知道我可以添加一个 primary_addresses 表,并在触发器中更改它。但我真的很想避免添加单独的表格。但我想如果它能够实现我需要的功能,我应该考虑一下。