Tengo dos columnas en los usuarios de la tabla, registerDate and lastVisitDate
que consisten en el tipo de datos datetime. Me gustaría hacer lo siguiente.
- Establezca el valor predeterminado de registerDate en MySQL NOW ()
- Establezca el valor predeterminado lastVisitDate en
0000-00-00 00:00:00
En lugar de nulo, que utiliza de forma predeterminada.
Debido a que la tabla ya existe y tiene registros existentes, me gustaría usar la tabla Modificar. Intenté usar los dos códigos a continuación, pero ninguno funciona.
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;
Me da error: ERROR 1067 (42000): Invalid default value for 'registerDate'
¿Es posible para mí establecer el valor predeterminado de fecha y hora en NOW () en MySQL?
mysql
sql
datetime
mysql-error-1067
Ibrahim Azhar Armar
fuente
fuente
ALTER TABLE users MODIFY dateTime timestamp default CURRENT_TIMESTAMP
. No definiste eldata type
campo en ambos esfuerzosDATE
debería funcionar con el valor predeterminadoNOW()
Respuestas:
A partir de MySQL 5.6.5, puede usar el
DATETIME
tipo con un valor predeterminado dinámico:O incluso combinar ambas reglas:
Referencia:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available .html
Antes de 5.6.5, debe usar el
TIMESTAMP
tipo de datos, que se actualiza automáticamente cada vez que se modifica el registro. Lamentablemente, sin embargo, soloTIMESTAMP
puede existir un campo de actualización automática por tabla.Ver: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
Si desea evitar que MySQL actualice el valor de la marca de tiempo
UPDATE
(para que solo se activeINSERT
), puede cambiar la definición a:fuente
DATETIME
menudo prefiere hacer el rango que puede contener: '1000-01-01 00:00:00' a '9999-12-31 23:59:59' en comparación conTIMESTAMPS
's' 1970-01-01 00: 00:01 'UTC a' 2038-01-19 03:14:07 'UTC. Para fines de almacenamiento de fechas de nacimiento, o algo más de 30 años en el futuro, por ejemplo.timestamp
este comportamiento a partir de MySQL 5.6Utilizo un desencadenador como solución alternativa para establecer un campo de fecha y hora en NOW () para nuevas inserciones:
debería funcionar para actualizaciones también
Las respuestas de Johan y Leonardo implican la conversión a un campo de marca de tiempo. Aunque esto probablemente esté bien para el caso de uso presentado en la pregunta (almacenar RegisterDate y LastVisitDate), no es una solución universal. Vea la pregunta de fecha y hora con marca de tiempo .
fuente
use a timestamp
es una solución tonta si realmente aprende la diferencia entre estos dos tipos de datos.Mi solución
fuente
TIMESTAMP
columna. Nadie estaba pidiendoTIMESTAMP
...EUREKA !!!
Para todos aquellos que perdieron el corazón tratando de establecer un valor DATETIME predeterminado en MySQL , sé exactamente cómo te sientes. Asi que aqui esta:
Observe cuidadosamente que no he agregado comillas simples / comillas dobles alrededor del 0 .
Actualización importante :
Esta respuesta fue publicada hace mucho tiempo. En aquel entonces, funcionó en mi (probablemente la última) instalación de MySQL y tuve ganas de compartirlo. Lea los comentarios a continuación antes de decidir utilizar esta solución ahora.
fuente
Los documentos de mysql 5.6 dicen que CURRENT_TIMESTAMP se puede usar por defecto para los tipos de datos TIMESTAMP y DATETIME:
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
fuente
En las versiones mysql 5.6.5 y posteriores, puede usar fechas y fechas precisas y establecer valores predeterminados también. Sin embargo, hay un bit sutil, que es pasar el valor de precisión a la llamada a la función datetime y NOW ().
Este ejemplo funciona:
Este ejemplo no funciona:
fuente
Se puede usar para actualizar la marca de tiempo en la actualización.
fuente
La mejor manera es usar "DEFAULT 0". Otra manera:
fuente
Esto funcionó para mí, usando MySQL:
fuente
Finalmente, ¡esto funcionó para mí!
fuente
fuente
No estoy seguro si esto todavía está activo, pero aquí va.
Con respecto a establecer los valores predeterminados en Now (), no veo que eso sea posible para el tipo de datos DATETIME. Si desea utilizar ese tipo de datos, configure la fecha cuando realice la inserción de esta manera:
Mi versión de mySQL es 5.5
fuente
INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', NOW())
Esto funcionó para mí, solo cambié INSERTAR a ACTUALIZAR para mi mesa.
fuente