我在看Rails指南,遇到了the section on active record's first_or_create method。它說,下面的代碼:你能解釋SQLwise爲什麼這個INSERT語句只有在SELECT語句失敗時才運行? (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語句?
感謝快速反應AJ。我明白它是如何工作的,我的問題是**爲什麼insert語句每次都不執行**?除非SELECT語句返回任何記錄,否則會阻止INSERT語句運行? – 2013-03-03 18:49:49
啊sql問題 – AJcodez 2013-03-03 18:50:31
的確,這是如何工作的?我編輯了更具體的問題。 – 2013-03-03 18:51:40