我正在查看 Rails 指南,并遇到了关于活动记录的 first_or_create 方法的部分。它指出以下代码:
Client.where(:first_name => 'Andy').first_or_create(:locked => false)
# => #<Client id: 1, first_name: "Andy", orders_count: 0, locked: false, created_at: "2011-08-30 06:09:27", updated_at: "2011-08-30 06:09:27">
将产生以下 SQL:
SELECT * FROM clients WHERE (clients.first_name = 'Andy') LIMIT 1
BEGIN
INSERT INTO clients (created_at, first_name, locked, orders_count, updated_at) VALUES ('2011-08-30 05:22:57', 'Andy', 0, NULL, '2011-08-30 05:22:57')
COMMIT
我了解 first_or_create 使用时的作用,我的问题。. .
从 SQL 语句的角度来看。为什么只有在 SELECT 语句失败时才运行 Insert 语句?