Alejandro Ivan Mendieta
donde estás JuanDC ? D:
Podríamos evitar el trigger modificando el campo updated_at de la siguiente forma:
ALTER TABLE `lines` CHANGE COLUMN `updated_at` `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `created_at`;
Alejandro Ivan Mendieta
donde estás JuanDC ? D:
JORGE ALEXANDER MÚNERA CANABAL
Mi solucion al segundo Reto 😀
ALTER TABLE `lines` MODIFY `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
Kebyn Enrique Ajin Elías
Muchas gracias, muy simple y útil.
Sergio Sanc
Explicacion:
ALTER TABLE lineas``: Esta parte de la declaración especifica la tabla a modificar, en este caso es la tabla de líneas.
MODIFICAR actualizado_en TIMESTAMP NOT NULL: Esta parte indica que la columna denominada actualizado_at en la tabla de líneas se está modificando. El tipo de datos se especifica como TIMESTAMP, lo que significa que almacenará valores de fecha y hora.
NOT NULL: esto especifica que la columna update_at no puede tener un valor NULL, lo que garantiza que cada fila de la tabla debe tener un valor no nulo para esta columna.
DEFAULT CURRENT_TIMESTAMP: esto establece el valor predeterminado para la columna actualizado_at en la marca de tiempo actual. Si se inserta una nueva fila en la tabla sin especificar un valor para update_at, se establecerá automáticamente en la fecha y hora actuales.
ON UPDATE CURRENT_TIMESTAMP: esta parte garantiza que si se realiza una operación de ACTUALIZACIÓN en una fila de la tabla, la columna actualizado_at se actualizará automáticamente a la marca de tiempo actual.
Juan José Bello
ProfesorJuan José Bello
ProfesorAcá la documentación:
Juan José Bello
ProfesorOtra forma alternativa es eliminar el trigger anterior y crear uno nuevo con el mismo nombre (como sobreescribirlo):
Usando DROP TRIGGER IF EXISTS update_updated_at_field
Quedaría así:
DROP TRIGGER IF EXISTS update_updated_at_field CREATE TRIGGER update_updated_at_field BEFORE UPDATE ON `lines` FOR EACH ROW SET NEW.updated_at = NOW();
Luis Miguel Rodríguez
para no utilizar los triggers realicé:
ALTER TABLE `stations` MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ALTER TABLE `lines` MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ALTER TABLE `trains` MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
Daniel G. Parrilla
Solución para el segundo reto:
Donovan Villanueva
Low key, ahora ya sé cuánto se tardan en hacer un curso de platzi, tomando en cuenta que esté bien organizado. Jajaja, y yo que pensé que el uso del timestamp no iba a ser útil al principio del curso. XD
Arturo Solares
Vladimir Angarita
UPDATE lines SET name = "Linea 20",update_at=NOW() WHERE id = 1;
CREATE TRIGGER update_updated_at_field_locations
BEFORE UPDATEON locationsFOR EACH ROWSET NEW.updated_at=NOW();
Irmin Corona 🐯
Julio Cardenas
Despues de creadas las tablas hice esta modificacion y me ha funcionado:
ALTER TABLE `stations` MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ALTER TABLE `lines` MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ALTER TABLE `trains` MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ALTER TABLE `lines_stations` MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
Mario Alexander Vargas Celis
USE metro_cdmx; CREATE TRIGGER Supdate_updated_at_field BEFORE UPDATE ON `lines` FOR EACH ROW SET NEW.updated_at=NOW() CREATE TRIGGER update_updated_at_field BEFORE UPDATE ON `lines_stations` FOR EACH ROW SET NEW.updated_at=NOW(); CREATE TRIGGER update_updated_at_field BEFORE UPDATE ON `lacations` FOR EACH ROW SET NEW.updated_at=NOW(); CREATE TRIGGER update_updated_at_field BEFORE UPDATE ON `stations` FOR EACH ROW SET NEW.updated_at=NOW(); CREATE TRIGGER update_updated_at_field BEFORE UPDATE ON `trains` FOR EACH ROW SET NEW.updated_at=NOW();
Se puede usar el statement IF NOT EXISTS luego de la palabra TRIGGER para prevenir errores al ejecutar una y otra vez el mismo archivo cuando un Trigger ya existe previamente.
Acá la solución para el resto de tablas:
USE metro_cdmx; CREATE TRIGGER IF NOT EXISTS update_updated_at_field_lines BEFORE UPDATE ON `lines` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER IF NOT EXISTS update_updated_at_field_lines_stations BEFORE UPDATE ON `lines_stations` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER IF NOT EXISTS update_updated_at_field_locations BEFORE UPDATE ON `locations` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER IF NOT EXISTS update_updated_at_field_stations BEFORE UPDATE ON `stations` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER IF NOT EXISTS update_updated_at_field_trains BEFORE UPDATE ON `trains` FOR EACH ROW SET NEW.updated_at = NOW();
mi solución :)
USE metro_cdmx; --Vamos a empezar a utilizar los triggers a ver que pasa con el desencadenamiento de la acción de actualizar el campo de updateted_at. vamos a ver que pasa. --Creando nuestro primer trigger :) CREATE TRIGGER update_updated_at_fiel_lines BEFORE UPDATE ON `lines` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER update_updated_at_fiel_stations BEFORE UPDATE ON `stations` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER update_updated_at_fiel_trains BEFORE UPDATE ON `trains` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER update_updated_at_fiel_locations BEFORE UPDATE ON `locations` FOR EACH ROW SET NEW.updated_at = NOW(); CREATE TRIGGER update_updated_at_fiel_lines_stations BEFORE UPDATE ON `lines_stations` FOR EACH ROW SET NEW.updated_at = NOW(); ```USE metro\_cdmx; \--Vamos a empezar a utilizar los triggers a ver que pasa con el desencadenamiento de la acción de actualizar el campo de updateted\_at. vamos a ver que pasa. \--Creando nuestro primer trigger :) CREATE TRIGGER update\_updated\_at\_fiel\_linesBEFORE UPDATE ON `lines` FOR EACH ROWSET NEW.updated\_at = NOW(); CREATE TRIGGER update\_updated\_at\_fiel\_stationsBEFORE UPDATE ON `stations`FOR EACH ROWSET NEW.updated\_at = NOW(); CREATE TRIGGER update\_updated\_at\_fiel\_trainsBEFORE UPDATE ON `trains` FOR EACH ROW SET NEW.updated\_at = NOW(); CREATE TRIGGER update\_updated\_at\_fiel\_locationsBEFORE UPDATE ON `locations`FOR EACH ROW SET NEW.updated\_at = NOW(); CREATE TRIGGER update\_updated\_at\_fiel\_lines\_stationsBEFORE UPDATE ON `lines\_stations`FOR EACH ROW SET NEW.updated\_at = NOW();
USE metro_cdmx; CREATE TRIGGER update_updated_at_field BEFORE UPDATE ON `lines` FOR EACH ROW SET NEW.updated_at = NOW(); --trigger for `stations` USE metro_cdmx; CREATE TRIGGER update_updated_at_field_stations BEFORE UPDATE ON `stations` FOR EACH ROW SET NEW.updated_at = NOW(); -- trigger for `trains` USE metro_cdmx; CREATE TRIGGER update_updated_at_field_trains BEFORE UPDATE ON `trains` FOR EACH ROW SET NEW.updated_at = NOW(); --trigger for `lines_stations` USE metro_cdmx; CREATE TRIGGER update_updated_at_field_lines_stations BEFORE UPDATE ON `lines_stations` FOR EACH ROW SET NEW.updated_at = NOW(); -- Note I haven't update the last triggers into the DB `stations`, `lines_stations` & `trains`