Hàm MySQL NOW() và SYSDATE() đều trả về giá trị timestamp hiện tại. Nhưng đầu ra của cả hai phụ thuộc vào thời gian thực thi. Điều này tạo ra sự khác biệt lớn giữa chúng.
Hàm NOW() trả về thời gian ổn định, chỉ thị thời điểm câu lệnh cụ thể bắt đầu thực thi. Ngược lại, hàm SYSDATE() trả về thời gian chính xác tại thời điểm câu lệnh thực thi. Ví dụ sau sẽ cho thấy sự khác biệt giữa hai hàm này:
mysql> SELECT NOW(), SLEEP(5), NOW(); +---------------------+----------+---------------------+ | NOW() | SLEEP(5) | NOW() | +---------------------+----------+---------------------+ | 2017-10-31 09:57:36 | 0 | 2017-10-31 09:57:36 | +---------------------+----------+---------------------+ 1 row in set (5.11 sec)
Truy vấn trên cho thấy NOW() trả về thời gian lúc bắt đầu thực thi vì ngay cả sau 5 giây ngủ hệ thống, nó vẫn trả về cùng giá trị.
mysql> SELECT SYSDATE(), SLEEP(5), SYSDATE(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(5) | SYSDATE() | +---------------------+----------+---------------------+ | 2017-10-31 09:58:13 | 0 | 2017-10-31 09:58:18 | +---------------------+----------+---------------------+ 1 row in set (5.00 sec)
Đối chiếu, truy vấn trên cho thấy SYSDATE() trả về thời gian lúc nó thực thi vì sau 5 giây ngủ hệ thống, nó trả về giá trị thực sự tăng 5 giây.