触发器的作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了触发器的作用?相关的知识,希望对你有一定的参考价值。

触发器是可以跟踪间户对数据库的操作,实现复杂的非标准的数据库的完整性规则,能够同步实时的复制表中的数据及自动计算数据值等 参考技术A 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。
触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。
触发器的作用:
可在写入数据表前,强制检验或转换数据。
触发器发生错误时,异动的结果会被撤销。
部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
可依照特定的情况,替换异动的指令 (INSTEAD OF)。
触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。
参考技术B 触一哈,就启动了 参考技术C 控制通断电源 参考技术D 我什么都不知道

项目触发器不起作用

【中文标题】项目触发器不起作用【英文标题】:Project Trigger Not working 【发布时间】:2017-02-07 02:16:43 【问题描述】:

我正在使用 Cognito 表单收集信息,然后使用 Zapier 将此信息传递到我的 google 电子表格数据库。我发现我在谷歌电子表格中的脚本不会像我期望的那样触发。

这个:

function onEdit(event)
  var ColCR = 96;  // Column Number of "CR"
  var changedRange = event.source.getActiveRange();
  if (changedRange.getColumn() == ColCR) 
    var state = changedRange.getValue();
    var adjacent = event.source.getActiveSheet().getRange(changedRange.getRow(),ColCR+1);
    var adjacentv = adjacent.getValue();
    var timestamp = Utilities.formatDate(new Date(), "GMT-7", "M/dd/yy', 'h:mm a"); 
     switch (adjacentv) 
      case "":
     adjacent.setValue("("+timestamp+")"+" "+state);
     changedRange.clearContent();
        break;
      default:
     adjacent.setValue(adjacentv+"\n"+"("+timestamp+")"+" "+state);
     changedRange.clearContent();
        break;
      
   

当用户直接编辑电子表格单元格时工作正常,但在 Zapier 更新单元格时不能正常工作。当用户修改电子表格时,它也适用于几种不同类型的触发器。直接编辑电子表格与使用 Zapier 等应用程序编辑表单有什么区别?我可以编写一个脚本来查看 Zapier 等应用的编辑吗?

这个:

function Timestamp() 
 var sheet = SpreadsheetApp.getActiveSpreadsheet();
 var cell = sheet.getActiveCell();
  var comments = cell.getComment();
  var formattedDate = Utilities.formatDate(new Date(), "GMT-7", "M/dd/yy', 'h:mm a    ");
   Newline works in msgBox, but not in Note.
  comments = comments + "Mod: " + formattedDate; 
 Browser.msgBox(comments);
 cell.setComment(comments);

当用户编辑单元格并由 On Change 触发器触发时可以正常工作,并且在 Zapier 更新单元格时也可以正常工作,但是当 Zapier 连续更新多个单元格时,它只会将注释放在范围内的第一个单元格中.我将如何修改脚本,使其在每个单元格的每次更改时触发,而不仅仅是范围?

我确定这与 Zapier 如何与我的电子表格交互有关,但我不明白 Zapier 编辑与用户编辑有何不同?

感谢您的任何建议或建议。

【问题讨论】:

【参考方案1】:

我也遇到过这个问题,最后得出的结论是 Zapier 操作使用 API 来更新 Google Sheet,因此没有触发触发器。 Google 的简单触发器文档中提供了详细信息:

https://developers.google.com/apps-script/guides/triggers/

【讨论】:

以上是关于触发器的作用?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL触发器的作用

作用于表的触发器vs作用于数据库的触发器(包含SQL语言与触发器个别相关知识)

数据库中触发器的作用是什么?

触发器作用

oracle中触发器有啥作用

我正在尝试在触发器上使用算术,但我的触发器不起作用