Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SYSDATE () so với NOW () trong MySQL:Sự khác biệt là gì?

Khi trả về ngày / giờ hiện tại trong MySQL, bạn có thể chọn một loạt các hàm. Hầu hết chúng chỉ đơn giản là từ đồng nghĩa với một chức năng khác.

Tuy nhiên, có hai chức năng trông có vẻ giống nhau, nhưng thực tế lại hơi khác một chút. Các hàm mà tôi đang đề cập đến là SYSDATE()NOW() .

Sự khác biệt giữa SYSDATE () và NOW ()

Cả hai hàm đều trả về ngày và giờ hiện tại. Tuy nhiên, chúng khác nhau ở điểm nào:

  • SYSDATE() trả về thời gian mà nó thực thi.
  • NOW() trả về một thời gian không đổi cho biết thời gian tại đó câu lệnh bắt đầu thực hiện.
  • SET TIMESTAMP câu lệnh ảnh hưởng đến giá trị được trả về bởi NOW() nhưng không phải bởi SYSDATE() .

Vì vậy, trong nhiều trường hợp, bạn có thể sẽ nhận được cùng một kết quả bất kể bạn sử dụng chức năng nào. Tuy nhiên, nếu câu lệnh của bạn phức tạp hơn và mất một lúc để chạy, bạn có thể nhận được sự chênh lệch khá lớn trong giá trị trả về tùy thuộc vào hàm bạn sử dụng.

Ví dụ

Dưới đây là một ví dụ để chứng minh giá trị trả về có thể thay đổi như thế nào, tùy thuộc vào chức năng bạn sử dụng.

SELECT
    SYSDATE(), SLEEP(10) AS '', SYSDATE(),
    NOW(), SLEEP(10) AS '', NOW();

Kết quả:

+---------------------+---+---------------------+---------------------+---+---------------------+
| SYSDATE()           |   | SYSDATE()           | NOW()               |   | NOW()               |
+---------------------+---+---------------------+---------------------+---+---------------------+
| 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:36 | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:26 |
+---------------------+---+---------------------+---------------------+---+---------------------+

Vì vậy, trong ví dụ này, tôi chạy SYSDATE() hai lần, nhưng có khoảng dừng 10 giây ở giữa. Sau đó, tôi làm điều tương tự với NOW() .

Như mong đợi, 10 giây tạm dừng ảnh hưởng đến giá trị trả về của SYSDATE() thứ hai nhưng không phải NOW() thứ hai . Trên thực tế, các giá trị cho cả hai trường hợp của NOW() giống như đối với phiên bản đầu tiên của SYSDATE() , đó là khi câu lệnh bắt đầu chạy.

Đặt SYSDATE () làm Bí danh cho NOW ()

Nếu sự khác biệt giữa hai hàm này gây ra sự cố cho bạn, bạn thực sự có tùy chọn tạo SYSDATE() bí danh cho NOW() .

Để thực hiện việc này, hãy sử dụng --sysdate-is-now tùy chọn lệnh máy chủ. Để biết thêm thông tin, hãy xem –sysdate-is-now trên trang web tài liệu MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhập / khôi phục bảng MySql bằng PHP

  2. Sử dụng các công cụ lưu trữ MySQL khác nhau trong thiết kế cơ sở dữ liệu

  3. Làm thế nào để thực hiện chèn hàng loạt trong MySQL?

  4. Xuất dữ liệu từ Cơ sở dữ liệu MySQL

  5. Làm thế nào để thực hiện một mysqldump mà không có lời nhắc mật khẩu?