mysql - multiple - update sql c#




mysql تحديث أعمدة متعددة مع نفسه الآن() (4)

أحتاج إلى تحديث أعمدة 2 يوم / فترة ، وأحتاج أن يكونا متطابقين تمامًا ، باستخدام الإصدار mysql 4.1.20. أنا أستخدم هذا الاستعلام:

mysql> update table set last_update=now(), last_monitor=now() where id=1;

إنه آمن أو هناك احتمال لتحديث الأعمدة بوقت مختلف ، نظرًا لوجود مكالمتين مرئيتين now() ؟
لا أعتقد أنه يمكن تحديثه بقيم مختلفة (أعتقد أن المكالمات mysql داخليًا now() مرة واحدة فقط لكل صف أو شيء مشابه) ، لكنني لست خبيراً ، ما رأيك؟

السؤال الثاني لماذا لا يقوم هذا الاستعلام بتحديث الأعمدة:

mysql> update table set last_update=last_monitor=now() where id=1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

إذا كنت تحتاج بالفعل إلى التأكد من أن now() لها نفس القيمة ، يمكنك تشغيل استعلامين (سيجيب على سؤالك الثاني أيضًا ، وفي هذه الحالة ، update last_monitor = to last_update ولكن لم يتم تحديث last_update بعد )

يمكنك فعل شيء مثل:

mysql> update table set last_update=now() where id=1;
mysql> update table set last_monitor = last_update where id=1;

على أي حال أعتقد أن mysql ذكي بما يكفي لطلب now() مرة واحدة فقط لكل استعلام.


ليس ذكيا جدا عندما ترغب في استخدام نفس الطابع الزمني في استعلامات متعددة التحديث أو إدراج ، تحتاج إلى إعلان متغير.

عند استخدام الدالة now() ، سيقوم النظام باستدعاء الطابع الزمني الحالي في كل مرة تقوم فيها بالاتصال به في استعلام آخر.


يمكنك تخزين قيمة () الآن في متغير قبل تشغيل استعلام التحديث ثم استخدام هذا المتغير لتحديث كل من الحقول last_update و last_monitor .

سيضمن ذلك تنفيذ () الآن فقط مرة واحدة ويتم تحديث القيمة نفسها على كلا العمودين اللذين تحتاجهما.


يمكنك وضع التعليمة البرمجية التالية على القيمة الافتراضية لعمود الطابع الزمني: CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ، لذلك عند تحديث الأعمدة يأخذ نفس القيمة.







sql-update