1. Tổng quan về Hàm NOW() của MySQL
Hàm NOW() của MySQL được sử dụng để dễ dàng lấy ngày và giờ hiện tại trong cơ sở dữ liệu. Bằng cách sử dụng hàm NOW(), bạn có thể lấy dấu thời gian khi chèn dữ liệu hoặc lấy thông tin thời gian hữu ích cho mục đích ghi nhật ký. Mặc dù đơn giản, đây là một công cụ rất mạnh mẽ được sử dụng rộng rãi.
Cú pháp Cơ bản của Hàm NOW()
Cú pháp của hàm NOW() rất đơn giản. Bạn có thể lấy ngày và giờ hiện tại với truy vấn sau.
SELECT NOW();
Kết quả thực thi được trả về dưới định dạng YYYY-MM-DD HH:MM:SS. Ví dụ, nếu ngày và giờ là 24 tháng 10 năm 2024 lúc 16:30, kết quả sẽ như sau.
2024-10-24 16:30:00
Hàm NOW() trả về ngày và giờ hiện tại dựa trên múi giờ của cơ sở dữ liệu. Điều này cho phép quản lý thời gian nhất quán trên toàn hệ thống.
Các Trường Hợp Sử Dụng Phổ Biến của Hàm NOW()
Hàm NOW() đặc biệt hữu ích trong các tình huống sau.
- Ghi nhật ký : Tự động ghi lại thời gian khi dữ liệu được sửa đổi hoặc chèn.
- Dấu thời gian : Sử dụng để ghi lại thời điểm của các hành động người dùng.
- Lọc phụ thuộc thời gian : Trích xuất dữ liệu xảy ra trong một khoảng thời gian cụ thể.
2. Các Ví Dụ Sử Dụng Cơ Bản của Hàm NOW()
Hãy xem xét các ví dụ cơ bản về việc lấy ngày và giờ hiện tại bằng hàm NOW().
SELECT NOW();
Truy vấn này trả về ngày và giờ hiện tại. Ngoài việc lấy dưới dạng chuỗi, bạn cũng có thể lấy dưới định dạng số. Sử dụng truy vấn sau, ngày và giờ hiện tại được trả về dưới định dạng số (YYYYMMDDHHMMSS).
SELECT NOW() + 0;
Ví dụ, kết quả có thể được trả về là “20241024163000”, điều này tiện lợi khi xử lý giá trị theo cách số học.
Chỉ Định Độ Chính Xác Phần Giây Phân Số
Hàm NOW() cho phép bạn chỉ định độ chính xác phần giây phân số. Bạn có thể đặt độ chính xác bằng cách sử dụng đối số như được hiển thị bên dưới.
SELECT NOW(3);
Truy vấn này trả về kết quả với độ chính xác mili giây (ba chữ số sau dấu thập phân). Ví dụ, nó có thể trả về giá trị như “2024-10-24 16:30:00.123”. Tính năng này cực kỳ hữu ích trong các hệ thống yêu cầu độ chính xác cấp giây.
3. Sự Khác Biệt Giữa SYSDATE() và NOW()
Có một hàm tương tự như NOW() gọi là SYSDATE(), nhưng chúng hoạt động hơi khác nhau.
- NOW() : Lấy thời gian tại thời điểm bắt đầu thực thi truy vấn và duy trì giá trị giống nhau trong toàn bộ câu lệnh. Ngay cả nếu một giao dịch chạy trong thời gian dài, nó trả về kết quả giống nhau.
- SYSDATE() : Lấy thời gian hiện tại tại mỗi bước của truy vấn. Nói cách khác, ngay cả trong các giao dịch chạy lâu, nó trả về thời gian hiện tại thời gian thực.
Ví dụ, trong các quy trình batch chạy lâu, SYSDATE() có thể cung cấp kết quả thời gian thực chính xác hơn. Tuy nhiên, khi tính nhất quán giao dịch quan trọng, NOW() thường được khuyến nghị.
Ví Dụ Hiển Thị Sự Khác Biệt Trong Một Truy Vấn
Truy vấn sau chứng minh sự khác biệt trong hành vi giữa SYSDATE() và NOW().
SELECT NOW(), SYSDATE();
Kết quả có thể trông như thế này.
NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
Sự khác biệt thời gian tại thời điểm thực thi truy vấn được phản ánh trong SYSDATE(), trong khi NOW() giữ nguyên thời gian khi bắt đầu thực thi truy vấn. Mặc dù sự khác biệt là tinh tế, nhưng quan trọng là chọn hàm phù hợp tùy thuộc vào trường hợp sử dụng.

4. Các Ứng Dụng Thực Tế của Hàm NOW()
Hàm NOW() rất hữu ích trong các tình huống cụ thể. Ví dụ, nếu bạn muốn tự động ghi lại ngày và giờ khi chèn dữ liệu, bạn có thể sử dụng hàm NOW() như được hiển thị bên dưới.
INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
Điều này tự động ghi lại thời gian hiện tại vào cột created_at khi bản ghi được chèn. Tính năng này đặc biệt có giá trị cho việc ghi nhật ký và theo dõi sự kiện.
Ngoài ra, nếu bạn muốn lấy dữ liệu được tạo trong bảy ngày qua, bạn có thể sử dụng hàm NOW() như sau.
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
Truy vấn này lấy tất cả các bản ghi được tạo trong bảy ngày qua từ ngày và giờ hiện tại. Hàm NOW() cực kỳ hiệu quả cho việc trích xuất dữ liệu phụ thuộc vào thời gian.
5. Những Lưu Ý Quan Trọng Khi Sử Dụng Hàm NOW()
Có một số điểm quan trọng cần xem xét khi sử dụng hàm NOW(). Đặc biệt, nó có thể ảnh hưởng đến tính nhất quán giao dịch, vì vậy rất quan trọng để sử dụng nó một cách phù hợp tùy thuộc vào ngữ cảnh.
- Hành Vi Trong Giao Dịch : Hàm NOW() trả về kết quả nhất quán trong một giao dịch, nghĩa là nó trả về cùng một dấu thời gian ngay cả trong các quá trình chạy lâu. Điều này quan trọng để duy trì tính nhất quán dữ liệu. Tuy nhiên, nếu cần dấu thời gian thời gian thực, sử dụng SYSDATE() sẽ phù hợp hơn.
Ngoài ra, vì hàm NOW() phụ thuộc vào cài đặt múi giờ, nó có thể trả về kết quả khác nhau tùy thuộc vào cấu hình hệ thống. Trong các ứng dụng toàn cầu, việc thiết kế với các cân nhắc về múi giờ là rất cần thiết.


