إتقان دالة NOW() في MySQL: الصياغة، حالات الاستخدام، والاختلافات الرئيسية عن SYSDATE()

1. نظرة عامة على دالة MySQL NOW()

تُستخدم دالة MySQL NOW() لاسترجاع التاريخ والوقت الحاليين بسهولة داخل قاعدة البيانات. من خلال الاستفادة من NOW()، يمكنك الحصول على معلومات الطابع الزمني المفيدة لإدخال البيانات أو التسجيل. على الرغم من بساطتها، فهي أداة قوية تُستَخدم على نطاق واسع في الممارسة العملية.

الصياغة الأساسية لـ NOW()

صياغة دالة NOW() بسيطة جداً. الاستعلام التالي يسترجع التاريخ والوقت الحاليين:

SELECT NOW();

يُعاد النتيجة بالتنسيق YYYY-MM-DD HH:MM:SS. على سبيل المثال، إذا كان التاريخ والوقت هو 24 أكتوبر 2024، الساعة 16:30، ستكون النتيجة:

2024-10-24 16:30:00

بالإضافة إلى ذلك، تُعيد دالة NOW() التاريخ والوقت الحاليين بناءً على المنطقة الزمنية لقاعدة البيانات. يضمن ذلك إدارة زمنية متسقة عبر النظام بأكمله.

حالات الاستخدام لـ NOW()

تكون دالة NOW() مفيدة بشكل خاص في السيناريوهات التالية:

  • التسجيل : تسجيل وقت تعديل أو إدخال البيانات تلقائيًا.
  • الطوابع الزمنية : تتبع توقيت إجراءات المستخدم.
  • الفلترة الزمنية : استخراج البيانات التي حدثت ضمن فترة محددة.

2. أمثلة أساسية على استخدام NOW()

دعنا نلقي نظرة على مثال أساسي لاسترجاع التاريخ والوقت الحاليين باستخدام دالة NOW():

SELECT NOW();

هذا الاستعلام يُعيد التاريخ والوقت الحاليين. بالإضافة إلى تنسيق السلسلة، يمكنك أيضًا الحصول على النتيجة بتنسيق رقمي. باستخدام الاستعلام التالي، يُعاد التاريخ والوقت بتنسيق رقمي (YYYYMMDDHHMMSS):

SELECT NOW() + 0;

على سبيل المثال، قد تُعاد النتيجة كـ 20241024163000، وهو مفيد عند التعامل مع البيانات بتنسيق رقمي.

تحديد دقة الأجزاء العشرية للثواني

تسمح لك دالة NOW() بتحديد دقة الأجزاء العشرية للثواني. يمكنك ضبط الدقة كمعامل:

SELECT NOW(3);

هذا الاستعلام يُعيد نتيجة بثلاث خانات من دقة الأجزاء العشرية للثواني، مثل 2024-10-24 16:30:00.123. هذه الميزة مفيدة بشكل خاص في الأنظمة التي تتطلب دقة تحت الثانية.

3. الفرق بين SYSDATE() و NOW()

دالة أخرى مشابهة لـ NOW() هي SYSDATE()، لكنهما تتصرفان بشكل مختلف قليلاً:

  • NOW() : تسترجع الوقت عند تنفيذ الاستعلام وتحتفظ بنفس الوقت طوال مدة العبارة. حتى إذا استمرت المعاملة لفترة طويلة، فإنها تُعيد النتيجة نفسها.
  • SYSDATE() : تسترجع الوقت الحالي في كل خطوة من الاستعلام. هذا يعني أنه خلال المعاملات الطويلة، توفر طوابع زمنية في الوقت الفعلي.

على سبيل المثال، في عمليات الدُفعات الطويلة، توفر SYSDATE() نتائج أكثر دقة، بينما يُفضَّل NOW() عندما تكون اتساق المعاملة مطلوبًا.

مثال على الفروق داخل استعلام

إليك مثالًا على استعلام يوضح الفرق بين SYSDATE() و NOW():

SELECT NOW(), SYSDATE();

قد تبدو النتائج كالتالي:

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

تعكس SYSDATE() الفرق الزمني الفعلي عند التنفيذ، بينما يحافظ NOW() على الطابع الزمني من بداية الاستعلام. اختيار الدالة المناسبة يعتمد على حالة الاستخدام الخاصة بك.

4. حالات الاستخدام العملية لـ NOW()

تُعد دالة NOW() مفيدة جدًا في سيناريوهات محددة. على سبيل المثال، لتسجيل وقت إدخال البيانات تلقائيًا:

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

هذا يُحفظ الوقت الحالي تلقائيًا في العمود created_at عند إدخال السجل. هذا مفيد بشكل خاص للتسجيل أو تتبع الأحداث.

لاستخراج البيانات التي تم إنشاؤها خلال الأيام السبعة الماضية، يمكنك استخدام NOW() كما يلي:

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

هذا الاستعلام يسترجع جميع السجلات التي تم إنشاؤها خلال الـ 7 أيام الأخيرة بالنسبة للوقت الحالي. تُعد NOW() فعّالة للغاية لاستخراج البيانات المعتمدة على الزمن.

5. اعتبارات عند استخدام NOW()

هناك بعض الاعتبارات المهمة عند استخدام NOW(). على وجه الخصوص، قد يؤثر ذلك على اتساق المعاملات، لذا يجب أن تكون واعيًا بالسياق الذي يُستخدم فيه.

  • السلوك داخل المعاملات : تُعيد دالة NOW() نتائج متسقة داخل المعاملة، مما يضمن نفس الوقت حتى في العمليات طويلة الأمد. هذا أمر حاسم للحفاظ على سلامة البيانات. ومع ذلك، إذا كنت بحاجة إلى طوابع زمنية في الوقت الحقيقي، فإن SYSDATE() أكثر ملاءمة.

لاحظ أيضًا أن دالة NOW() تعتمد على المنطقة الزمنية للنظام، مما يعني أن النتائج قد تختلف حسب الإعدادات. بالنسبة للتطبيقات العالمية، يجب أخذ هذا العامل في الاعتبار بعناية أثناء التصميم.