now&sysdate函式差異

shiri512003發表於2010-03-14

作者: 絃樂之花 | 可以轉載, 但必須以超連結形式標明文章原始出處和作者資訊及版權宣告

連結:http://shiri512003.itpub.net/post/37713/497442

[@more@]

mysql中now和sysdate行為是不一樣的,引用文件中的說法

NOW() returns a constant time that indicates the time at which the statement began to execute.

SYSDATE() returns the time at which it executes.

兩者的區別在於,對於一個語句,多個now函式的返回值是確定的,而對於sysdate,一個語句中的多個sysdate呼叫返回的結果是不能保證一致的,對於使用基於SBR的複製環境而言,可能造成主庫和備庫值不一致, (it is nondeterministic and therefore unsafe for replication if statement-based binary logging is used. )所以對相應欄位有一致性要求的應用,就要慎用這個函式了,最好還是使用now()函式。
如果應用中已經使用了這個函式,剛好還使用了SBR的複製環境,還有一致性需求,不想改動程式碼的話,可以透過設定sysdate-is-now引數,使mysql對於sysdate呼叫採用和now一樣的行為,很方便的解決這個問題。對於採取row模式的複製環境,這個就無關緊要了。

參考文件

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_sysdate

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_now

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7591490/viewspace-1031810/,如需轉載,請註明出處,否則將追究法律責任。

相關文章