SYSDATE
Sintassi
SYSDATE()
Spiegazione
Restituisce l'orario e la data correnti nel formato 'YYYY-MM-DD HH:MM:SS' o YYYYMMDDHHMMSS.uuuuuu, a seconda che la funzione sia usata in un contesto numerico o stringa.
SYSDATE() restituisce l'orario al quale è stata eseguita. Tale comportamento differisce da quello di NOW(), che restituisce un orario costante che indica quando è iniziata l'esecuzione dell'istruzione. In una Stored Routine e in un Trigger, NOW() restituisce il momento in cui è iniziata l'esecuzione della Stored Routine o del Trigger.
MariaDB [(none)]> SELECT NOW(), SLEEP(2), NOW(); +---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2010-03-27 13:23:40 | 0 | 2010-03-27 13:23:40 | +---------------------+----------+---------------------+ 1 row in set (2.00 sec) MariaDB [(none)]> SELECT SYSDATE(), SLEEP(2), SYSDATE(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2010-03-27 13:23:52 | 0 | 2010-03-27 13:23:54 | +---------------------+----------+---------------------+ 1 row in set (2.00 sec) MariaDB [(none)]>
Inoltre l'istruzione SET TIMESTAMP influenza il valore restituito da NOW(), ma non da SYSDATE(). Pertanto l'impostazione del timestamp nel log binario non hanno alcun effetto sulle chiamate a SYSDATE().
Poiché SYSDATE() può restituire valori diversi anche nella stessa istruzione, e non è influenzato da SET TIMESTAMP, non è da considerarsi deterministico; per questo motivo non è sicuro usarlo nella replica, se si usa il logging basato sulle istruzioni. Se questo è un problema si può usare il logging basato sulle righe, oppure avviare il server con l'opzione --sysdate-is-now per far sì che SYSDATE() sia considerata un sinonimo di NOW(). La natura non deterministica di SYSDATE() che non è possibile usare un indice per valutare le espressioni che la contengono.