2014-05-17 31 views
0

比方說,我有一個默認值爲GETDATE()的表上的DATETIME列。我也有一個INSERT語句進入該表,而不是列出列中列的列(所以默認是隱式應用)。在SQL Server(和其他SQL數據庫)上的事務中,在INSERT或COMMIT上應用了列默認值?

此INSERT語句位於一個事務塊的開始處,總的來說,運行5秒即可。

比方說,我開始在12:30:00運行事務(上面的INSERT語句是事務中的第一條語句),它在12:30:05提交。

在默認欄中,我會看到12:30:00還是12:30:05?

獎勵:其他RDBMS如MySQL,PostgreSQL和Oracle怎麼樣?

我的假設是12:30:00,而只是想檢查...

+0

插入後你實際看到了什麼?你檢查過了嗎? – Rahul

+0

不,這是一個理論問題,我想知道所有RDBMSs ...我可以在SQL Server上自己測試,但不是其他人。 – Ruslan

+0

概念在每個RDBMS中都是一樣的。列默認值將在插入點應用,而不是在提交點。如果tran成功,你會看到添加的行或根本沒有。 – Rahul

回答

1

在概念上,你會看到時間是在該點插入的時間(INSERT)命令命中,而不是時候COMMIT命中。我相信,對於所有其他的RDBMS,這種行爲也是一樣的,而對於由Ruslan添加的MyISAM引擎上的MySQL延遲寫入這一例外情況也是如此。