2009-11-20 10 views
50

Tengo una tabla con una columna del tipo timestamp que tiene un valor predeterminado de current_timestamp y actualizaciones a current_timestamp en cada actualización.¿Cómo modifico los valores predeterminados de una columna de la tabla mysql?

Quiero eliminar la función "en la actualización" en esta columna. ¿Cómo escribo la declaración alternativa?

He intentado lo siguiente:

ALTER TABLE mytable alter column time set DEFAULT now(); 

pero esto no funcionó.

+0

¿Está seguro de que no está utilizando un disparador para actualizarlo? –

+0

Esta pregunta debe migrar a StackExcange: Administradores de base de datos –

Respuesta

75

Pete era casi correcta sino que se utiliza la sintaxis incorrecta para el 'cambio':

ALTER TABLE mytable CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

Aviso que debes repetir el nombre de la columna Además, asegúrese de estar utilizando los puntos reveses en lugar de las comillas simples para evitar el tiempo del nombre de la columna, lo que impide que se interprete como el tipo de columna mysql.

Al especificar el DEFAULT de CURRENT_TIMESTAMP, MySQL ya no actualizará automáticamente la columna. Desde el MySQL Manual:

Con una cláusula DEFAULT CURRENT_TIMESTAMP y ninguna cláusula ON UPDATE, la columna tiene la marca de tiempo actual como valor por defecto, pero no se actualiza automáticamente.

9

No puede AFAIK utilizar funciones como NOW() de manera predeterminada.

Trate

ALTER TABLE `mytable` CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

(Editado para añadir escapando y segundo uso del nombre de campo)

+0

Tiene lo siguiente: mysql> ALTER TABLE mensajes CHANGE tiempo TIMESTAMP NOT NULL PREDETERMINADO CURRENT_TIMESTAMP; ERROR 1064 (42000): Tiene un error en la sintaxis SQL; verifique el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'NOT NULL DEFAULT CURRENT_TIMESTAMP' en la línea 1 mysql> ALTER TABLE mensajes CHANGE tiempo de la columna TIMESTAMP NOT NULL PREDETERMINADO CURRENT_TIMESTAMP; ERROR 1064 (42000): Tiene un error en la sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta que debe usar cerca de 'NO NULO PREDETERMINADO CURRENT_TIMESTAMP' en la línea 1 – Tihom

+0

Perdón, olvidé agregar escapado y el nombre del campo aparece dos veces. – Pete

Cuestiones relacionadas