MySQL 触发器语法
时间: 2023-11-01 14:08:29 浏览: 51
MySQL 触发器是一种在数据库表上自动执行的存储过程。它们可以在插入、更新或删除表中的数据时触发,并且可以执行一系列预定义的操作。以下是MySQL触发器的基本语法:
```sql
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
FOR EACH ROW
BEGIN
-- 触发器执行的操作语句
END;
```
其中,关键字解释如下:
- `CREATE TRIGGER`:创建触发器的语法。
- `trigger_name`:触发器的名称,应该是唯一的。
- `BEFORE` 或 `AFTER`:指定触发器在触发事件前还是之后执行。
- `INSERT`、`UPDATE` 或 `DELETE`:指定触发器在哪个事件上触发。
- `table_name`:要应用触发器的表名。
- `FOR EACH ROW`:指定对于每个受影响的行都要执行触发器。
- `BEGIN ... END`:触发器执行的操作语句块。
在 `BEGIN` 和 `END` 之间,你可以使用 SQL 语句编写触发器的操作逻辑,例如插入新的数据、更新其他表、记录日志等。在触发器中,你可以使用 `NEW` 关键字引用正在被插入、更新或删除的新数据行。
请注意,MySQL触发器只能应用于支持触发器的存储引擎(如 InnoDB)。
相关问题
Mysql触发器语法
MySQL触发器是一种在特定事件发生时自动执行的数据库对象。下面是MySQL触发器的基本语法:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
BEGIN
-- 触发器执行的SQL语句
END;
其中,trigger_name 是触发器的名称,可以根据实际需求自定义。BEFORE 或 AFTER 关键字指定触发器是在事件之前还是之后执行。INSERT、UPDATE 和 DELETE 是触发器要监听的事件类型。table_name 是触发器所属的表名。
FOR EACH ROW 关键字表示每次执行触发器时都会针对触发事件中的每一行执行相应的操作。
在 BEGIN 和 END 之间,可以编写触发器要执行的SQL语句,可以包含条件判断、更新数据等操作。
例如,下面是一个创建在表 `orders` 上的 `AFTER INSERT` 触发器的示例:
CREATE TRIGGER after_order_insert
AFTER INSERT
ON orders
FOR EACH ROW
BEGIN
-- 触发器执行的SQL语句
INSERT INTO order_logs(order_id, log_message)
VALUES(NEW.order_id, 'New order created');
END;
该触发器会在 `orders` 表上进行插入操作后执行,每次插入一条新的订单记录时,会将相应的订单日志插入到 `order_logs` 表中。
请注意上述示例中使用了 `NEW.order_id` 来引用插入的新行的 `order_id` 值。`NEW` 是一个特殊的关键字,代表了触发器所关联的事件中的新增行。
以上是MySQL触发器的基本语法,根据实际需求,你可以根据不同的事件和操作编写相应的触发器逻辑。
mysql触发器if的语法
在MySQL触发器中使用IF语句,语法如下:
```
IF expression THEN
statements;
END IF;
```
其中,expression是一个条件表达式,可以是任何返回TRUE或FALSE的表达式。如果expression计算结果为TRUE,则会执行statements中的SQL语句。如果expression计算结果为FALSE,则不会执行statements中的SQL语句。
以下是一个使用IF语句的MySQL触发器示例:
```
CREATE TRIGGER `trg_update_order` BEFORE UPDATE ON `orders`
FOR EACH ROW
BEGIN
IF NEW.status = 'completed' THEN
INSERT INTO `order_logs` (`order_id`, `log_message`) VALUES (NEW.id, 'Order completed.');
END IF;
END;
```
在这个示例中,如果订单的状态为'completed',则会在order_logs表中插入一条新记录,表示订单已完成。否则,不会执行任何操作。