Câu trả lời là CÓ. Hàm NOW() trả về thời điểm bắt đầu thực thi câu lệnh, nên tất cả hàng được cập nhật trong cùng một câu lệnh UPDATE sẽ nhận giá trị DATETIME giống hệt nhau.
Tương tự, SYSDATE() (từ MySQL 5.0.13) cũng trả về cùng một giá trị trong một câu lệnh đơn.
Ví dụ minh họa:
CREATE TABLE NowDemo (DueDateTime DATETIME);
INSERT INTO NowDemo VALUES ('2018-12-19'), ('2018-11-10'), ('2017-11-21');
Dữ liệu ban đầu:
+---------------------+ | DueDateTime | +---------------------+ | 2018-12-19 00:00:00 | | 2018-11-10 00:00:00 | | 2017-11-21 00:00:00 | +---------------------+
Trường hợp 1: Dùng NOW()
UPDATE NowDemo SET DueDateTime = NOW();
Kết quả: Tất cả 3 hàng có cùng giá trị (ví dụ: 2018-12-20 16:10:00).
Trường hợp 2: Dùng SYSDATE()
UPDATE NowDemo SET DueDateTime = SYSDATE();
Kết quả: Cũng giống nhau (ví dụ: 2018-12-20 16:10:35).
Khi nào khác biệt? Chỉ khi dùng trong trigger hoặc stored procedure có nhiều câu lệnh, SYSDATE() sẽ trả về thời điểm thực thi từng câu lệnh, còn NOW() vẫn cố định ở thời điểm bắt đầu.
Giải pháp nếu cần giá trị khác nhau: Sử dụng trigger BEFORE UPDATE gán NEW.cot = SYSDATE() cho từng hàng, hoặc xử lý ở lớp ứng dụng.