Dalam projek baru-baru ini, medan masa (masa tarikh, cap masa) telah menggunakan atribut ON UPDATE CURRENT_TIMESTAMP untuk mengemas kini secara automatik. cap masa lajur. Berikut merekodkan beberapa perkara yang perlu diberi perhatian.
Jika anda menetapkan masa untuk mengemas kini dengan cap masa semasa (PADA KEMASKINI CURRENT_TIMESTAMP), maka apabila anda mengemas kini medan, hanya nilai medan berubah, masa anda medan akan Ia akan berubah kepada masa semasa operasi KEMASKINI.
Iaitu, apabila tiada kemas kini medan, walaupun kenyataan kemas kini berjaya dilaksanakan, medan masa tidak akan dikemas kini.
Sebagai contoh, kami mencipta jadual baharu:
CREATE TABLE `t_temp` ( `id` int(11) NOT NULL DEFAULT '0', `username` varchar(255) DEFAULT NULL, `upd_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '默认取当前时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Kemudian masukkan baris data, dan kemudian lakukan kemas kini.
UPDATE t_temp SET username = 'mm' WHERE id = 1;
akan mendapati lajur masa tidak akan dikemas kini.
Begitu juga, beberapa rangka kerja digunakan dalam atur cara, seperti tk-mybatis Apabila menggunakan kaedah kemas kini (seperti kaedah int updateByPrimaryKeySelective(T record); jika medan itu sebenarnya tidak dikemas kini, walaupun sintaksnya. dilaksanakan, medan masa Ia tidak akan dikemas kini, yang mudah diabaikan dalam sistem.
CURRENT_TIMESTAMP() boleh menetapkan jenis TIMESTAMP dalam MYSQL kepada masa semasa.
ON UPDATE secara peribadi menganggap ini adalah artifak Ia biasanya digunakan apabila medan tertentu ialah updateTIme dan masa terakhir diubah suai, hanya gunakan ini ON UPDATE. Dengan cara ini, pembangun tidak perlu mengendalikannya sendiri, MySQL boleh mengendalikannya secara automatik.
Akhir sekali, mari bercakap tentang indeks yang ini berasal dari Baidu Saya terlupa dari siapa: indeks ialah fail khas (indeks pada jadual data InnoDB ialah komponen ruang jadual). ia mengandungi penunjuk rujukan kepada semua rekod dalam jadual data.
Boleh dikatakan indeks pangkalan data adalah seperti jadual kandungan buku, yang boleh meningkatkan kelajuan pertanyaan pangkalan data. Indeks dibahagikan kepada indeks berkelompok dan indeks tidak berkelompok disusun mengikut lokasi fizikal penyimpanan data, tetapi indeks tidak berkelompok boleh meningkatkan kelajuan perolehan berbilang baris, manakala indeks tidak berkelompok adalah pantas untuk mendapatkan semula baris tunggal.
Jika anda mencipta terlalu banyak indeks, ia akan memberi kesan pada kelajuan kemas kini dan operasi sisipan, kerana setiap fail indeks perlu dikemas kini. Untuk jadual yang kerap perlu dikemas kini dan dimasukkan, tidak perlu mencipta indeks berasingan untuk klausa yang jarang digunakan Untuk jadual yang lebih kecil, overhed pengisihan tidak akan menjadi sangat besar, dan tidak perlu mencipta indeks tambahan .
Kod penciptaan jadual berikut:
CREATE TABLE timeDemo( id VARCHAR(64) NOT NULL, timeTest TIMESTAMP NOT NULL, PRIMARY KEY (id) );
Apabila menambah data baharu:
Dia akan membuat masa secara automatik, seperti jadual pesanan, dan jika dia ingin merekodkan masa pesanan dibuat, dia boleh menggunakan kaedah ini untuk memprosesnya.
Termasuk Masa kemas kini, masa kemas kini terakhir:
CREATE TABLE timeDemo2( id VARCHAR(64) NOT NULL, createTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(), updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(), PRIMARY KEY (id) );
//Tidak akan ada masalah dengan versi mysql di atas 5.7 ke atas, tetapi akan ada masalah dengan versi di bawah 5.7
// Untuk versi di bawah 5.7, disyorkan untuk menggunakan program untuk memasukkan.
Di sini kami menggunakan 5.5 untuk menunjukkan kesan ON UPDATE
CREATE TABLE timeDemo3( id VARCHAR(64) NOT NULL, updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(), PRIMARY KEY (id) );
Apabila beberapa data dalam jadual ini diubah suai, nilai updateTime akan dikemas kini secara automatik.
Setiap kali rekod ini dikemas kini, kemas kiniMasa akan dikemas kini secara automatik Dalam kes ini, pengaturcara tidak perlu mengendalikannya sendiri.
Malangnya banyak syarikat Internet suka menggunakan MySQL 5.7 ke atas, manakala industri tradisional masih menggunakan MySQL 5.5.
Mari kita bercakap tentang kunci indeks dan indeks
CREATE TABLE timeDemo4( id VARCHAR(64) NOT NULL, id2 VARCHAR(64) NOT NULL, updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(), PRIMARY KEY (id), KEY(id2) )ENGINE=INNODB DEFAULT CHARSET=utf8
Satu-satunya tujuan indeks biasa adalah untuk meningkatkan kelajuan akses data Indeks jenis ini ditakrifkan oleh kata kunci KEY atau INDEX. Oleh itu, indeks hanya perlu dibuat untuk lajur data yang paling kerap muncul dalam keadaan pertanyaan (WHERE lajur = ...) atau keadaan isihan (ORDER BY lajur).
Untuk mencipta indeks, anda harus memilih lajur data yang paling biasa dan padat, seperti lajur data jenis integer, apabila boleh.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah Mysql menggunakan pada kemas kini current_timestamp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!