Returning

我们经常做的事情是创建一个对象,操作这个对象,然后返回这个对象:

def build_options
options = Hash.new
options[:key1] = 'value1'
options[:key2] = 'value2'
options
end

Rails提供了returning,使用ruby最常用的block技术,简化这个步骤:

class Object
def returning(value)
yeild (value)
return value
end
end

现在我们的代码:

def build_options
returning Hash.new do |options|
options[:key1] = 'value1'
options[:key2] = 'value2'
end
end
MySQL 8.0.43 版本中引入了对 RETURNING 子句的支持,这一功能使得在执行 INSERT、UPDATE 或 DELETE 等 DML(数据操作语言)语句后,可以直接返回受影响行的数据,而无需再执行额外的 SELECT 查询[^5]。这不仅减少了客户端与服务器之间的交互次数,还提升了整体的查询效率。 在 MySQL 中,RETURNING 子句可以用于以下场景: - **插入操作后返回新行数据**:可以在执行 INSERT 后立即获取新插入行的内容,特别是对于包含自增主键的表,RETURNING 子句非常有用,可以避免额外查询来获取刚插入的主键值。 - **更新操作后返回更新后的行数据**:执行 UPDATE 语句时,可以通过 RETURNING 子句返回更新后的行内容,便于后续业务逻辑处理。 - **删除操作后返回被删除的行数据**:在 DELETE 操作中使用 RETURNING 可以获取被删除的行信息,有助于日志记录或审计等用途。 ### 使用示例 #### 插入后返回新行数据 ```sql INSERT INTO employees (first_name, last_name, department_id) VALUES ('John', 'Doe', 110) RETURNING employee_id, first_name, last_name, department_id; ``` 该语句将在插入新员工记录后返回新插入行的字段值,包括自增主键 `employee_id`。 #### 更新后返回更新后的数据 ```sql UPDATE employees SET first_name = 'Jane' WHERE employee_id = 101 RETURNING employee_id, first_name, last_name, department_id; ``` 该语句将更新指定 `employee_id` 的记录,并返回更新后的完整行信息。 #### 删除后返回被删除的数据 ```sql DELETE FROM employees WHERE department_id = 110 RETURNING employee_id, first_name, last_name, department_id; ``` 此语句将删除 `department_id` 为 110 的所有员工记录,并返回这些被删除的行数据。 需要注意的是,RETURNING 子句返回的数据类型为结果集(Resultset),这意味着它可以被客户端程序直接处理,而不再需要额外的查询操作。这种设计显著提高了数据库操作的效率和简洁性。 ### 注意事项 - RETURNING 子句在 MySQL 中仅支持与单表操作一起使用,不支持多表更新或删除操作中的 RETURNING。 - 使用 RETURNING 时,应确保客户端驱动程序支持该功能,以正确解析返回的结果集。 - RETURNING 子句的使用应结合事务处理,以确保数据一致性,尤其是在需要回滚或提交操作的场景中。 MySQL 8.0.43 对 RETURNING 的支持,使得数据库操作更加高效和简洁,特别是在需要获取 DML 操作影响行数据的场景下,极大简化了开发流程和提升了性能[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值