Trong MariaDB, SYSDATE()
và NOW()
các hàm tương tự nhau ở chỗ chúng trả về ngày và giờ hiện tại.
Tuy nhiên, có một sự khác biệt quan trọng:SYSDATE()
trả về thời gian mà nó thực thi, trong khi NOW()
trả về thời gian mà câu lệnh bắt đầu thực thi.
Và khi chạy trong một quy trình hoặc trình kích hoạt được lưu trữ, SYSDATE()
sẽ trả về thời gian mà nó thực thi, trong khi NOW()
sẽ trả về thời gian mà thủ tục được lưu trữ hoặc trình kích hoạt bắt đầu thực thi.
Ví dụ
Trước tiên, hãy xem hai hàm này có thể tạo ra các kết quả khác nhau như thế nào.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Kết quả (sử dụng đầu ra dọc):
NOW(): 2021-05-27 09:22:08 SYSDATE(): 2021-05-27 09:22:08 SLEEP(5): 0 NOW(): 2021-05-27 09:22:08 SYSDATE(): 2021-05-27 09:22:13
Ở đây, chúng tôi đã sử dụng SLEEP()
chức năng tạm dừng xử lý trong năm giây trước khi nhiều hàm thứ hai gọi.
Chúng ta có thể thấy rằng SYSDATE()
lần thứ hai đã được gọi, giá trị trả về của nó khác với lần đầu tiên. NOW()
mặt khác, trả về cùng một giá trị cả hai lần.
Các cân nhắc khác
Có một số điều khác cần lưu ý với hai chức năng này:
-
SET TIMESTAMP
không ảnh hưởng đếnSYSDATE()
, trong khi nó không ảnh hưởng đếnNOW()
hàm số. -
SYSDATE()
không an toàn để sao chép nếu sử dụng ghi nhật ký nhị phân dựa trên câu lệnh. Tuy nhiên, có nhiều cách để đối phó với điều này, nếu cần thiết. Bạn có thể sử dụng--sysdate-is-now
lệnh là một tùy chọn không mặc định cho bí danhSYSDATE()
tớiNOW()
để làm cho nó an toàn để nhân rộng. Xem tài liệu MariaDB choSYSDATE()
để biết thêm thông tin.