不写 FOR EACH ROW情况
时间: 2024-02-11 17:04:59 浏览: 82
在 MySQL 中,如果您在创建触发器时未指定 `FOR EACH ROW`,则默认为 `FOR EACH STATEMENT`。这意味着 MySQL 只会为每个 SQL 语句执行一次触发器中的操作,而不是为每个受影响的行执行。
以下是一个示例,在 `orders` 表上创建一个 `BEFORE INSERT` 触发器,每次插入新行时都会更新 `order_total` 字段的值,但未指定 `FOR EACH ROW`:
```sql
CREATE TRIGGER update_order_total BEFORE INSERT ON orders
BEGIN
UPDATE orders SET order_total = price * quantity;
END;
```
在这个例子中,当您执行一个插入语句时,MySQL 只会更新一次 `orders` 表中的所有行的 `order_total` 字段,而不是为每个新插入的行计算和更新 `order_total`。
因此,如果您需要在触发器中为每个受影响的行执行操作,则必须使用 `FOR EACH ROW` 语法。
相关问题
mysql for each row
`FOR EACH ROW` 是 MySQL 中的触发器(Trigger)语法,它用于指定在每个受影响的行上执行触发器中定义的操作。当在触发器中指定了 `FOR EACH ROW` 时,MySQL 会为每个受影响的行分别执行触发器中的操作。
举个例子,如果您创建了一个在表中插入新行时触发的触发器,并且在触发器中指定了 `FOR EACH ROW`,则在每次插入新行时,MySQL 都会执行一次触发器中的操作。
以下是一个示例,在 `orders` 表上创建一个 `BEFORE INSERT` 触发器,每次插入新行时都会更新 `order_total` 字段的值:
```sql
CREATE TRIGGER update_order_total BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
SET NEW.order_total = NEW.price * NEW.quantity;
END;
```
这个触发器中的 `FOR EACH ROW` 指定了在每个受影响的行上执行触发器中的操作。在这个例子中,每次插入新行时,MySQL 都会计算 `order_total` 的值,并将其存储在新行中。
for each row 和for each statement有什么区别
"for each row"是一种循环语句,用于在数据库中遍历每一行数据。它是SQL语言中的一个特殊语法,用于在游标中循环处理每一行数据。
"for each statement"是一种程序控制语句,用于在程序中遍历每一条语句。它通常用于编写自定义存储过程或触发器等程序对象,以便在执行每一条SQL语句时执行一些特定的操作。
因此,两者之间有很大的区别:一个是用于遍历数据库中的每一行数据,另一个是用于在程序中遍历每一条SQL语句。
阅读全文