Saya perlu memperbarui 2 kolom datetime, dan saya membutuhkannya persis sama, menggunakan mysql versi 4.1.20. Saya menggunakan kueri ini:
mysql> update table set last_update=now(), last_monitor=now() where id=1;
Aman atau ada kemungkinan kolom diperbarui dengan waktu yang berbeda, karena 2 panggilan yang terlihat ke now()
?
Saya tidak berpikir bahwa itu dapat diperbarui dengan nilai yang berbeda (saya pikir secara internal panggilan mysql now()
hanya sekali per baris atau yang serupa), tetapi saya bukan seorang ahli, bagaimana menurut Anda?
Pembaruan: Pertanyaan kedua diekstraksi di sini .
mysql
sql-update
Radu Maris
sumber
sumber
Jawaban:
Menemukan solusi:
mysql> UPDATE table SET last_update=now(), last_monitor=last_update WHERE id=1;
Saya menemukan ini di MySQL Docs dan setelah beberapa tes berhasil:
sumber
Mysql tidak terlalu pintar. Saat Anda ingin menggunakan stempel waktu yang sama di beberapa pembaruan atau menyisipkan kueri, Anda perlu mendeklarasikan variabel.
Saat Anda menggunakan
now()
fungsi tersebut, sistem akan memanggil stempel waktu saat ini setiap kali Anda memanggilnya di kueri lain.sumber
MySQL mengevaluasi now () satu kali per pernyataan saat pernyataan tersebut memulai eksekusi. Jadi aman untuk memiliki beberapa panggilan now () yang terlihat per pernyataan.
select now(); select now(), sleep(10), now(); select now(); +---------------------+ | now() | +---------------------+ | 2018-11-05 16:54:00 | +---------------------+ 1 row in set (0.00 sec) +---------------------+-----------+---------------------+ | now() | sleep(10) | now() | +---------------------+-----------+---------------------+ | 2018-11-05 16:54:00 | 0 | 2018-11-05 16:54:00 | +---------------------+-----------+---------------------+ 1 row in set (10.00 sec) +---------------------+ | now() | +---------------------+ | 2018-11-05 16:54:10 | +---------------------+ 1 row in set (0.00 sec)
sumber
Anda bisa menyimpan nilai now () dalam variabel sebelum menjalankan kueri pembaruan dan kemudian menggunakan variabel tersebut untuk memperbarui bidang
last_update
danlast_monitor
.Ini akan memastikan now () dijalankan hanya sekali dan nilai yang sama diperbarui pada kedua kolom yang Anda butuhkan.
sumber
Anda dapat meletakkan kode berikut pada nilai default kolom timestamp:,
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
jadi pada update kedua kolom tersebut mengambil nilai yang sama.sumber
Jika Anda benar-benar perlu memastikan bahwa
now()
memiliki nilai yang sama, Anda dapat menjalankan dua kueri (yang akan menjawab pertanyaan kedua Anda juga, dalam hal ini Anda memintaupdate last_monitor = to last_update
tetapilast_update
belum diperbarui)Anda bisa melakukan sesuatu seperti:
mysql> update table set last_update=now() where id=1; mysql> update table set last_monitor = last_update where id=1;
Lagi pula saya pikir mysql cukup pintar untuk meminta
now()
hanya sekali per permintaan.sumber
Ada 2 cara untuk ini;
Pertama , saya akan menyarankan Anda mendeklarasikan now () sebagai variabel sebelum memasukkannya ke dalam pernyataan sql. Katakanlah;
var x = now(); mysql> UPDATE table SET last_update=$x, last_monitor=$x WHERE id=1;
Logikanya jika Anda menginginkan input yang berbeda untuk last_monitor maka Anda akan menambahkan variabel lain seperti;
var y = time(); mysql> UPDATE table SET last_update=$x, last_monitor=$y WHERE id=1;
Dengan cara ini Anda dapat menggunakan variabel sebanyak yang Anda bisa, tidak hanya dalam pernyataan mysql tetapi juga dalam bahasa skrip sisi server (seperti PHP) yang Anda gunakan dalam proyek Anda. Ingat variabel yang sama ini dapat disisipkan sebagai masukan dalam formulir di bagian depan aplikasi. Itu membuat proyek menjadi dinamis dan tidak statis.
Kedua jika now () menunjukkan waktu pembaruan kemudian menggunakan mysql Anda dapat mendeklarasikan properti baris sebagai stempel waktu. Setiap kali baris dimasukkan atau diperbarui, waktu juga diperbarui.
sumber