私は Rails ガイドを見ていて、アクティブなレコードの first_or_create method に関するセクションに出くわしました。それは次のコードを述べました:
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
私の質問 . . .
SQL ステートメントの観点から。SELECT ステートメントが失敗した場合にのみ Insert ステートメントが実行されるのはなぜですか?