Funkce MySQL NOW() vysvětlená: syntaxe, příklady a rozdíly oproti SYSDATE()

1. Přehled funkce MySQL NOW()

Funkce MySQL NOW() se používá k snadnému získání aktuálního data a času v databázi. Využitím funkce NOW() můžete získat časová razítka při vkládání dat nebo získat časové informace užitečné pro logování. Přestože je jednoduchá, jedná se o velmi výkonný nástroj, který je široce používán.

Základní syntaxe funkce NOW()

Syntaxe funkce NOW() je velmi jednoduchá. Aktuální datum a čas můžete získat následujícím dotazem.

SELECT NOW();

Výsledek provedení je vrácen ve formátu YYYY-MM-DD HH:MM:SS. Například pokud je datum a čas 24. října 2024 v 16:30, výsledek bude následující.

2024-10-24 16:30:00

Funkce NOW() vrací aktuální datum a čas podle časové zóny databáze. To umožňuje konzistentní správu času v celém systému.

Běžné případy použití funkce NOW()

Funkce NOW() je zvláště užitečná v následujících situacích.

  • Logování : Automaticky zaznamenává čas, kdy jsou data upravena nebo vložena.
  • Časové razítka : Používá se k zaznamenání časování uživatelských akcí.
  • Časově závislé filtrování : Extrahování dat, která nastala během konkrétního období.

2. Základní příklady použití funkce NOW()

Podívejme se na základní příklady získání aktuálního data a času pomocí funkce NOW().

SELECT NOW();

Tento dotaz vrací aktuální datum a čas. Kromě získání jako řetězce můžete také získat hodnotu v číselném formátu. Pomocí následujícího dotazu je aktuální datum a čas vrácen v číselném formátu (YYYYMMDDHHMMSS).

SELECT NOW() + 0;

Například výsledek může být vrácen jako „20241024163000“, což je praktické při číselné manipulaci s hodnotou.

Specifikace přesnosti zlomkových sekund

Funkce NOW() umožňuje zadat přesnost zlomkových sekund. Přesnost můžete nastavit pomocí argumentu, jak je ukázáno níže.

SELECT NOW(3);

Tento dotaz vrací výsledek s milisekundovou přesností (tři číslice za desetinnou čárkou). Například může vrátit hodnotu jako „2024-10-24 16:30:00.123“. Tato funkce je mimořádně užitečná v systémech, které vyžadují přesnost na úrovni sekund.

3. Rozdíl mezi SYSDATE() a NOW()

Existuje funkce podobná NOW() nazvaná SYSDATE(), ale chovají se mírně odlišně.

  • NOW() : Získává čas na začátku provádění dotazu a udržuje stejnou hodnotu po celou dobu provádění příkazu. I když transakce běží dlouho, vrací stejný výsledek.
  • SYSDATE() : Získává aktuální čas při každém kroku dotazu. Jinými slovy, i během dlouhých transakcí vrací skutečný aktuální čas.

Například v dlouho běžících dávkových procesech může SYSDATE() poskytnout přesnější reálný čas. Avšak když je důležitá konzistence transakce, obecně se doporučuje použít NOW().

Příklad ukazující rozdíl v rámci dotazu

Následující dotaz demonstruje rozdíl v chování mezi SYSDATE() a NOW().

SELECT NOW(), SYSDATE();

Výsledek může vypadat takto.

NOW():     2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01

Rozdíl v čase v okamžiku provedení dotazu je zachycen v SYSDATE(), zatímco NOW() si uchovává čas, kdy byl dotaz zahájen. I když je rozdíl subtilní, je důležité zvolit vhodnou funkci podle konkrétního použití.

4. Praktické aplikace funkce NOW()

Funkce NOW() je velmi užitečná v konkrétních scénářích. Například pokud chcete automaticky zaznamenat datum a čas při vkládání dat, můžete použít funkci NOW() takto.

INSERT INTO users (username, created_at) 
VALUES ('example_user', NOW());

Toto automaticky zaznamenává aktuální čas do sloupce created_at, když je záznam vložen. Tato funkce je zvláště cenná pro protokolování a sledování událostí.

Navíc, pokud chcete získat data vytvořená během posledních sedmi dnů, můžete použít funkci NOW() následujícím způsobem.

SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;

Tento dotaz načte všechny záznamy vytvořené během posledních sedmi dnů od aktuálního data a času. Funkce NOW() je mimořádně účinná pro extrakci časově závislých dat.

5. Důležité úvahy při používání funkce NOW()

Existuje několik důležitých bodů, které je třeba zvážit při používání funkce NOW(). Zejména může ovlivnit konzistenci transakcí, takže je důležité ji používat vhodně podle kontextu.

  • Chování v rámci transakcí : Funkce NOW() vrací konzistentní výsledek v rámci transakce, což znamená, že vrací stejný časový údaj i během dlouho běžících procesů. To je důležité pro udržení konzistence dat. Pokud jsou však vyžadovány časové značky v reálném čase, je vhodnější použít SYSDATE().

Navíc, protože funkce NOW() závisí na nastavení časového pásma, může vracet různé výsledky v závislosti na konfiguraci systému. V globálních aplikacích je nezbytné navrhovat s ohledem na časová pásma.