当前位置: 首页 > 面试题库 >

mysql“插入后”触发器基于其他字段来计算一个字段

赵华彩
2023-03-14
问题内容

我正在尝试创建一个触发器,该触发器将根据用户输入的lat / lng列来更新GEOMETRY列。我的触发器看起来像这样-

CREATE TRIGGER `tbl.foo`   
    AFTER INSERT ON `tbl` FOR EACH ROW  
    BEGIN  
        UPDATE tbl
        SET coord = Point(lng, lat)
        WHERE id = NEW.id; 
    END

但是,当我插入带有lng,lat值的新行时,出现以下错误-

错误1442(HY000):无法更新存储函数/触发器中的表’tbl’,因为调用该存储函数/触发器的语句已使用该表。

我不能创建这样的触发器吗?如果没有,那么自动化的方法是什么?


问题答案:

尝试使用INSERT触发器之前,并修改所需的值,例如-

CREATE TRIGGER trigger1
  BEFORE INSERT
  ON table1
  FOR EACH ROW
BEGIN
  SET NEW.column1 = 'another value';
END

编辑

CREATE TABLE table_test_trigger (
  id INT(11) NOT NULL AUTO_INCREMENT,
  a INT(11) DEFAULT NULL,
  b INT(11) DEFAULT NULL,
  c INT(11) DEFAULT NULL,
  PRIMARY KEY (id)
);

DELIMITER $$

CREATE TRIGGER trigger1
    BEFORE INSERT
    ON table_test_trigger
    FOR EACH ROW
BEGIN
  SET NEW.c = NEW.a + NEW.b;
END
$$

DELIMITER ;

INSERT INTO table_test_trigger(a, b) VALUES (10, 5);

SELECT * FROM table_test_trigger;

+----+------+------+------+
| id | a    | b    | c    |
+----+------+------+------+
|  1 |   10 |    5 |   15 |
+----+------+------+------+


 类似资料:
  • 问题内容: 我有一个带有DATETIME列的表。我想选择此datetime值并将其插入另一列。 我做到了(请注意:“ 2011-12-18 13:17:17”是前SELECT从DATETIME字段给我的值): 并得到 好的,我知道在其中放置未加引号的字符串是错误的,但是DATETIME首先只是一个字符串吗?什么 做 我摆在那里?我想要的只是可靠地将现有值转移到新的datetime字段… 编辑: 我

  • 以下是我想做的: 当表中有新的 时,我需要通过设置 ' 来更新中的行 = ,以表示特定(旧)帐户已被编辑。 要求不是操作新插入的列,而是使用< code>pk = NEW.edit_on操作已经存在的列 但是,我无法更新同一个表: 请建议一个解决方法 PS:我已经完成了更新同一表后在触发器中更新表、插入到同一表中触发器mysql、在同一表上用插入后触发器更新以及在表上用Insert和update在

  • 问题内容: 我如何定义一个具有两个计算字段的视图,例如… …并根据前两个计算字段创建第三个计算字段,如… …? 当我按名称引用前两个计算字段时,我收到一条消息,指出字段未知。 谢谢! 问题答案: 由于视图中不允许子查询,因此您需要通过创建多个视图来模拟它们。 例如,如果直接执行此查询,将解决您的问题: 根据MySQL文档,视图在FROM子句中具有不能包含子查询的限制。要变通解决此限制并将该查询转换

  • 问题内容: 我正在尝试编写触发器,我有下表:BookingRequest: 状态表: 被占领的房间: 我需要一个触发器,如果​​将具有相同ID的请求插入到OccupiedRoom表中,它将把BookingReques中的状态更改为1,所以我尝试了类似的操作 而且它不起作用,所以任何建议都非常有用 问题答案: 尝试这个:

  • 问题内容: 我有两个表,其中一个命名如下 另一个表具有以下字段: SID CID Per 如何为以下内容编写触发器: 如果表h1-h0的任何字段中发生 更新,则使用以下值更新表中的列: ((总数为1s-总数为0s / (总数1s +总数0s))/ 100 在此先感谢 我开发了一个触发器,但是它不起作用,它在第11行说了错误,您能说出什么问题吗? 问题答案: 在定义触发器之前,请确保更改定界符。另外