CREATE TABLE `example` (`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,`created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,`lastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)) ENGINE=InnoDB; |
這段SQL是我從項(xiàng)目中摘取出來(lái)的,在測(cè)試機(jī)器上一切正常,但是部署到生產(chǎn)機(jī)器上MySQL報(bào)錯(cuò):
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.
意思是只能有一個(gè)帶CURRENT_TIMESTAMP的timestamp列存在,但是為什么本地測(cè)試卻沒(méi)有任何問(wèn)題呢,本地測(cè)試的機(jī)器安裝的MySQL版本5.6.13,而生產(chǎn)機(jī)器上安裝的卻是5.5版本,搜索網(wǎng)絡(luò)后得知這兩種版本之間對(duì)于timestamp處理的區(qū)別在于:
在MySQL 5.5文檔有這么一段話(huà):
One TIMESTAMP column in a table can have the current timestamp as the default value for initializing the column, as the auto-update value, or both. It is not possible to have the current timestamp be the default value for one column and the auto-update value for another column.
而在MySQL 5.6.5做出了以下改變:
Previously, at most one TIMESTAMP column per table could be automatically initialized or updated to the current date and time. This restriction has been lifted. Any TIMESTAMP column definition can have any combination of DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP clauses. In addition, these clauses now can be used with DATETIME column definitions. For more information, see Automatic Initialization and Updating for TIMESTAMP and DATETIME.
根據(jù)網(wǎng)上的解決方案,可以使用觸發(fā)器來(lái)替代一下:
CREATE TABLE `example` (`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,`created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,`lastUpdated` DATETIME NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB;DROP TRIGGER IF EXISTS `update_example_trigger`;DELIMITER //CREATE TRIGGER `update_example_trigger` BEFORE UPDATE ON `example` FOR EACH ROW SET NEW.`lastUpdated` = NOW()//DELIMITER ; |
若無(wú)特別說(shuō)明,本網(wǎng)站文章均為原創(chuàng),原則上這些文章不允許轉(zhuǎn)載,但是如果閣下是出于研究學(xué)習(xí)目的可以轉(zhuǎn)載到閣下的個(gè)人博客或者主頁(yè),轉(zhuǎn)載遵循創(chuàng)作共同性“署名-非商業(yè)性使用-相同方式共享”原則,請(qǐng)轉(zhuǎn)載時(shí)注明作者和出處,謝絕商業(yè)性、非署名、采集站、垃圾站或者純粹為了流量的轉(zhuǎn)載。謝謝合作!
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com