¿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_TIMESTAMP
inDEFAULT
oON UPDATE
cláusula una vez que haya una columna conTIMESTAMP
tipo 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)
timestamp
columna es anulable, es decirnull
. Si la primeratimestamp
columna esnot null
entonces por defectoDEFAULT CURRENT_TIMESTAMP
yON UPDATE CURRENT_TIMESTAMP
se agregará. stackoverflow.com/a/13544181/2859238timestamp
columna 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_TIMESTAMP
yON UPDATE CURRENT_TIMESTAMP
no 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 date
manera: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_TIMESTAMP
y unON UPDATE CURRENT_TIMESTAMP
atributo, 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_TIMESTAMP
yON UPDATE CURRENT_TIMESTAMP
no se puede agregarDATETIME
sino solo enTIMESTAMP
.Reglas:
1) como máximo una
TIMESTAMP
columna 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
TIMESTAMP
puede tenerCURRENT_TIMESTAMP
enDEFAULT
oON UPDATE
cláusula2) La primera
NOT NULL
TIMESTAMP
columna sin una explícitaDEFAULT
valor comocreated_date timestamp default '0000-00-00 00:00:00'
será implícitamente dan unaDEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
y por lo tanto posterioresTIMESTAMP
columnas no se pueden darCURRENT_TIMESTAMP
enDEFAULT
oON UPDATE
cláusulaOtra opción (pero
updated_date
es la primera columna):fuente
Prueba esto:
fuente
created_at
columna 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