【MySQL】now()與sysdate()的區別
now()與sysdate()兩個函式都以'YYYY-MM-DD HH:MM:SS'的形式表示表示當前的時間。比如:
root@rac1 21:13:10> select sysdate();
+---------------------+
| sysdate() |
+---------------------+
| 2013-01-12 21:14:21 |
+---------------------+
1 row in set (0.00 sec)
root@rac1 21:14:21> select now();
+---------------------+
| now() |
+---------------------+
| 2013-01-12 21:14:29 |
+---------------------+
1 row in set (0.00 sec)
兩者的區別在於對於一個語句中呼叫多個函式
NOW() 返回語句呼叫時的值,在存過或者trigger 中now()返回的值是存過或者trigger 執行的時刻的時間。
SYSDATE() 返回撥用該函式的時刻的時間值。
舉例說明兩者之間的區別:
root@rac1 21:07:16> select now(),sleep(3),now(); -返回的時間是一致的。
+---------------------+----------+---------------------+
| now() | sleep(3) | now() |
+---------------------+----------+---------------------+
| 2013-01-12 21:07:30 | 0 | 2013-01-12 21:07:30 |
+---------------------+----------+---------------------+
1 row in set (3.00 sec)
root@rac1 21:10:23> select sysdate(),sleep(2),sysdate();
+---------------------+----------+---------------------+
| sysdate() | sleep(2) | sysdate() |
+---------------------+----------+---------------------+
| 2013-01-12 21:11:06 | 0 | 2013-01-12 21:11:08 |
+---------------------+----------+---------------------+
上述查詢返回sysdate()函式被呼叫的時刻的時間值。
還有另外一個時間相關的函式current_timestamp() 與now()一致。
root@rac1 21:07:33> select now(),current_timestamp(),sysdate();
+---------------------+---------------------+---------------------+
| now() | current_timestamp() | sysdate() |
+---------------------+---------------------+---------------------+
| 2013-01-12 21:09:59 | 2013-01-12 21:09:59 | 2013-01-12 21:09:59 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
root@rac1 21:10:08> select now(),sleep(2),current_timestamp();
+---------------------+----------+---------------------+
| now() | sleep(2) | current_timestamp() |
+---------------------+----------+---------------------+
| 2013-01-12 21:10:21 | 0 | 2013-01-12 21:10:21 |
+---------------------+----------+---------------------+
1 row in set (2.00 sec)
當sysdate函式在基於satement 模式的主從環境下可能造成資料的不一致。因為語句在主庫中執行到日誌傳遞到備庫,存在時間差,到備庫執行的時候就會變成不同的時間值。
解決方法:
1 透過設定sysdate-is-now引數,使mysql對於sysdate呼叫採用和now一樣的行為,配置該引數的時候要在主備同事配置。
2 採取row模式的複製環境。
參考資料:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-752576/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- now&sysdate函式差異函式
- MySQL的@與@@區別MySql
- oracle中sysdate和current_date兩者的區別Oracle
- Postgresql與MySQL的區別MySql
- Mysql與mongodb的區別MySqlMongoDB
- mysql與Oracle的區別MySqlOracle
- TypeScript 中 unknown 與 any 有啥區別TypeScript
- MySQL的create table as 與 like區別MySql
- MySQL語法中=與:=的區別MySql
- Mysql與Oracle的50個區別MySqlOracle
- 幽默:MySQL與mongodb區別MySqlMongoDB
- select for update nowait 與 select for update 區別AI
- mysql與redis的區別與使用場景MySqlRedis
- MySQL與SQLite的區別及遷移MySqlSQLite
- Oracle與MySQL的幾點區別(轉)OracleMySql
- ExecutorService shutdown()和shutdownNow()方法區別
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- MySQL字元資料型別char與varchar的區別MySql字元資料型別
- oracle 中關於當前的sysdate,sysstimestap,current_date,curent_timestamp 區別Oracle
- 關於MySQL與SQLLite的GroupBy排序原理的區別MySql排序
- MySQL主機127.0.0.1與localhost區別MySql127.0.0.1localhost
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- ??與?:的區別
- MYSQL和SQL的區別MySql
- mysql中!=和is not的區別MySql
- mysql中“ ‘ “和 “ ` “的區別MySql
- MySQL和Oracle的區別MySqlOracle
- Oracle和MySQL的區別OracleMySql
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- &與&&, |與||區別
- my.cnf中[mysql]與[mysqld]下引數的區別MySql
- MySQL資料庫中的timestamp型別與時區MySql資料庫型別
- in與exist , not in與not exist 的區別
- 【轉】mysql 和 redis的區別MySqlRedis
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- MySQL中普通sql與預編譯sql 區別MySql編譯
- mysql中key 、primary key 、unique key 與index區別MySqlIndex