Rumah > Soal Jawab > teks badan
Saya mempunyai jadual dengan struktur berikut:
+----+-------------+----------------+------------+------------+ | id | some column | another column | inserted | edited | +----+-------------+----------------+------------+------------+ | 1 | ... | ... | 2014-08-15 | 2016-03-04 | | 2 | ... | ... | 2015-09-16 | 2016-10-07 | | 3 | ... | ... | 2016-10-17 | 2016-11-16 | +----+-------------+----------------+------------+------------+
Apabila memasukkan entri baharu, tarikh semasa hendaklah ditambahkan pada lajur inserted
. Ia tidak sepatutnya berubah.
Semasa mengedit entri, tarikh semasa hendaklah ditambahkan pada lajur edited
dan tarikh hendaklah dikemas kini setiap kali entri ini diedit.
Pendekatan saya adalah untuk menentukan jenis data dalam kedua-dua kes date
并将标准值更改为 CURDATE()
。但相反,只是将 CURDATE()
untuk disisipkan sebagai rentetan.
KEMASKINI Berikut ialah contoh pertanyaan:
CREATE TABLE `test`.`testtab` ( `id` INT NOT NULL auto_increment, `some column` VARCHAR(100) NULL, `another column` VARCHAR(100) NULL, `inserted` VARCHAR(100) NULL DEFAULT 'CURDATE()', `edited` VARCHAR(100) NULL DEFAULT 'CURDATE()', PRIMARY KEY (`id`) ) engine = innodb;
Saya tidak pasti tentang jenis data, walaupun.
P粉2773052122023-10-25 09:21:57
Cuba ubah suai skema anda seperti berikut
`inserted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `edited` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Semoga ini membantu.
P粉0098287882023-10-25 00:36:08
Bergantung pada keperluan anda, ini sesuai untuk anda:
CREATE TABLE `test`.`testtab` ( `id` INT NOT NULL auto_increment, `some column` VARCHAR(100) NULL, `another column` VARCHAR(100) NULL, `inserted` DATETIME DEFAULT CURRENT_TIMESTAMP, `edited` DATETIME ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) engine = innodb;
Kemudian ekstrak hanya bahagian kurma semasa memproses:
DATE_FORMAT(datetime, '%Y-%m-%d')
Anda boleh menggunakan pencetus sebagai penyelesaian untuk menetapkan medan datetime kepada NOW() untuk sisipan baharu:
CREATE TRIGGER `triggername` BEFORE INSERT ON `tablename` FOR EACH ROW SET NEW.datetimefield = NOW()
Ia sepatutnya berfungsi pada kemas kini juga