¿Por qué solo puede haber una columna TIMESTAMP con CURRENT_TIMESTAMP en la cláusula DEFAULT o ON UPDATE?
CREATE TABLE `foo` (
`ProductID` INT(10) UNSIGNED NOT NULL,
`AddedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdatedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=INNODB;
El error que resulta:
Código de error: 1293
Definición de tabla incorrecta; solo puede haber una columna TIMESTAMP con CURRENT_TIMESTAMP en la cláusula DEFAULT o ON UPDATE
mysql
timestamp
mysql-error-1293
ripper234
fuente
fuente

CURRENT_TIMESTAMPinDEFAULToON UPDATEcláusula una vez que haya una columna conTIMESTAMPtipo de datos, sin importar si tiene una cláusula adicional!CREATE TABLE foo (created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_on TIMESTAMP)pero no esto:CREATE TABLE foo (updated_on TIMESTAMP, created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP)timestampcolumna es anulable, es decirnull. Si la primeratimestampcolumna esnot nullentonces por defectoDEFAULT CURRENT_TIMESTAMPyON UPDATE CURRENT_TIMESTAMPse agregará. stackoverflow.com/a/13544181/2859238timestampcolumna tiene un valor predeterminado explícito establecido comodefault '0000-00-00 00:00:00'. Si la columna es anulable o explícitamente se establece el valor predeterminado,DEFAULT CURRENT_TIMESTAMPyON UPDATE CURRENT_TIMESTAMPno se añadiráRespuestas:
Esta limitación, que solo se debió a razones históricas de legado de código, se ha eliminado en versiones recientes de MySQL:
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html
fuente
También me lo pregunté hace mucho tiempo. Busqué un poco en mi historia y creo que esta publicación: http://lists.mysql.com/internals/34919 representa la posición semioficial de MySQL (antes de la intervención de Oracle;))
En breve:
Entonces su explicación es "porque se implementa así". No suena muy científico. Supongo que todo proviene de un código antiguo. Esto se sugiere en el hilo anterior: "transferencia de cuando solo el primer campo de marca de tiempo se configuró / actualizó automáticamente".
¡Salud!
fuente
Podemos dar un valor predeterminado para la marca de tiempo para evitar este problema.
Esta publicación ofrece una solución detallada: http://gusiev.com/2009/04/update-and-create-timestamps-with-mysql/
fuente
De hecho, un error de implementación.
El enfoque nativo en MySQL es actualizar una fecha de creación usted mismo (si lo necesita) y hacer que MySQL se preocupe por la marca de tiempo de esta
update date ? update date : creation datemanera:En la creación Insertar NULL:
Los valores NULL para la marca de tiempo se interpelan como CURRENT_TIMESTAMP de forma predeterminada.
En MySQL, la primera columna TIMESTAMP de una tabla obtiene ambos
DEFAULT CURRENT_TIMESTAMPy unON UPDATE CURRENT_TIMESTAMPatributo, si no se le dan atributos. esta es la razón por la cual la columna TIMESTAMP con atributos debe ser lo primero u obtener el error descrito en este hilo.fuente
Como:
fuente
Bueno, una solución para usted podría ser ponerlo en el campo UpdatedDate y tener un activador que actualice el campo AddedDate con el valor UpdatedDate solo si AddedDate es nulo.
fuente
Combinando varias respuestas:
En MySQL 5.5,
DEFAULT CURRENT_TIMESTAMPyON UPDATE CURRENT_TIMESTAMPno se puede agregarDATETIMEsino solo enTIMESTAMP.Reglas:
1) como máximo una
TIMESTAMPcolumna por tabla podría inicializarse o actualizarse automáticamente (o manualmente [ Mi adición ]) a la fecha y hora actuales. (Documentos de MySQL).Por lo que sólo uno
TIMESTAMPpuede tenerCURRENT_TIMESTAMPenDEFAULToON UPDATEcláusula2) La primera
NOT NULLTIMESTAMPcolumna sin una explícitaDEFAULTvalor comocreated_date timestamp default '0000-00-00 00:00:00'será implícitamente dan unaDEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPy por lo tanto posterioresTIMESTAMPcolumnas no se pueden darCURRENT_TIMESTAMPenDEFAULToON UPDATEcláusulaOtra opción (pero
updated_datees la primera columna):fuente
Prueba esto:
fuente
created_atcolumna usted mismo. Creo que esto es lo que op quiere decir intencionalmente.Esta es la limitación en la versión MYSQL 5.5. Necesita actualizar la versión a 5.6.
Recibía este error al agregar una tabla en MYSQL
La mesa se parece a esto.
Después de un tiempo de lectura sobre los cambios en diferentes versiones de MYSQL y algunas de las búsquedas en Google. Descubrí que se hicieron algunos cambios en MYSQL versión 5.6 sobre la versión 5.5.
Este artículo te ayudará a resolver el problema. http://www.oyewiki.com/MYSQL/Incorrect-table-definition-there-can-be-only-one-timestamp-column
fuente