Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SYSDATE() vs NOW() w MySQL:jaka jest różnica?

Podczas zwracania bieżącej daty/godziny w MySQL masz do wyboru szereg funkcji. Większość z nich to po prostu synonimy innej funkcji.

Istnieją jednak dwie funkcje, które wydają się robić to samo, ale w rzeczywistości są nieco inne. Funkcje, o których mówię, to SYSDATE() i NOW() .

Różnica między SYSDATE() a NOW()

Obie funkcje zwracają bieżącą datę i godzinę. Jednak oto, gdzie się różnią:

  • SYSDATE() zwraca czas wykonania.
  • NOW() zwraca stały czas, który wskazuje czas, w którym instrukcja zaczął wykonywać.
  • SET TIMESTAMP instrukcja wpływa na wartość zwracaną przez NOW() ale nie przez SYSDATE() .

W wielu przypadkach prawdopodobnie uzyskasz ten sam wynik, niezależnie od używanej funkcji. Jednakże, jeśli Twoja instrukcja jest bardziej złożona i jej wykonanie zajmuje trochę czasu, możesz otrzymać dość dużą różnicę w wartości zwracanej w zależności od używanej funkcji.

Przykład

Oto przykład pokazujący, jak wartość zwracana może się różnić w zależności od używanej funkcji.

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

Wynik:

+---------------------+---+---------------------+---------------------+---+---------------------+
| 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 |
+---------------------+---+---------------------+---------------------+---+---------------------+

W tym przykładzie uruchamiam SYSDATE() dwa razy, ale z 10-sekundową przerwą pomiędzy nimi. Następnie robię to samo z NOW() .

Zgodnie z oczekiwaniami, 10-sekundowa pauza wpływa na wartość zwracaną przez drugą SYSDATE() ale nie drugi NOW() . W rzeczywistości wartości obu wystąpień funkcji NOW() są takie same jak w przypadku pierwszego wystąpienia SYSDATE() , czyli wtedy, gdy instrukcja zaczęła działać.

Uczynienie SYSDATE() aliasem dla NOW()

Jeśli różnica między tymi dwiema funkcjami powoduje problemy, faktycznie masz możliwość wykonania SYSDATE() alias dla NOW() .

Aby to zrobić, użyj --sysdate-is-now opcja polecenia serwera. Aby uzyskać więcej informacji, zobacz –sysdate-is-now na stronie dokumentacji 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. PDO mysql:Jak sprawdzić, czy wstawienie się powiodło?

  2. Napraw „BŁĄD 1136 (21S01):Liczba kolumn nie odpowiada liczbie wartości w wierszu 2” podczas korzystania z instrukcji VALUES w MySQL

  3. Tworzenie aplikacji internetowej od podstaw przy użyciu Python Flask i MySQL:część 4

  4. GROUP_CONCAT z limitem

  5. MySQL nie używa indeksów z klauzulą ​​WHERE IN?