如何使用触发器(MySQL)在插入时更改同一表的字段值

Posted

技术标签:

【中文标题】如何使用触发器(MySQL)在插入时更改同一表的字段值【英文标题】:How to change a field value of the same table on insert using trigger (MySQL) 【发布时间】:2020-01-21 10:51:20 【问题描述】:

我有一个“example_table”,它有几个字段。我想在 example_field='Faiyaj' AND example_field_two Like '096%' 时更改插入时的 'example_field' 值,然后我想设置 example_field = 'Faiyaj11'。

这是我的迁移表(UP 函数):

public function up()

   $this->create('example_table', function (Blueprint $table) 

       $table->bigIncrements('id');
       $table->integer('user_id')->unsigned();
       $table->text(description, 1600);
       $table->string('example_field');
       $table->string('example_field_two');
       $table->timestamp('created_at');

   );


   $insertTrigger = "CREATE TRIGGER example_table_generator_insert AFTER INSERT ON example_table
FOR EACH ROW
BEGIN
IF EXISTS(SELECT * FROM example_table WHERE example_field='Faiyaj' AND example_field_two Like '096%') THEN
UPDATE `example_table` SET `example_field` = 'Faiyaj11';
END IF;
END;
";


   $this->unprepared($insertTrigger);



我在我的迁移表中使用了上述触发器,但它不起作用,并且它没有在数据库中插入任何值。我已经以多种方式尝试了触发器,但都失败了。 (插入之前/之后)

【问题讨论】:

【参考方案1】:

我今天已经解决了这个问题。这是解决方案:

$insertTrigger = "CREATE TRIGGER example_table_generator_insert BEFORE INSERT ON example_table
FOR EACH ROW IF NEW.example_field = 'Faiyaj' AND NEW.example_field_two LIKE '096%' THEN SET NEW.example_field = 'Faiyaj11';
END IF;";

$this->unprepared($insertTrigger);

【讨论】:

以上是关于如何使用触发器(MySQL)在插入时更改同一表的字段值的主要内容,如果未能解决你的问题,请参考以下文章

为 MySQL 表实现审计

在 Mysql 中添加新列时如何轻松维护审计触发器

触发器导致在视图中使用的表上插入后,如何进行 MYSQL 视图更新

如何使用触发器在同一张表中插入新行(Oracle PL/SQL 10G)?

插入触发器后MySQL不起作用

根据列中的状态更改创建触发器并在表的另一列中插入值