lunes, abril 28, 2014

Mysql - Ignorar - Actualizar - Remplazar Valores Duplicados


Casi siempre al intentar ingresar registros duplicados, tenemos problemas con los diferentes errores que nos arroja el sistema por razones obvias y nos detiene todo el proceso de inserción de datos.
Para prevenir esto podemos utilizar lo siguiente, de acuerdo a cada situación:

IGNORE: Ignora el registro a insertar si ya existe.

INSERT IGNORE
  INTO tabla
    (id, valor, ...)
  VALUES
    (25, 'valor, ...) 

REPLACE: "funciona exactamente como INSERT, excepto que si un valor de la tabla tiene el mismo valor que un nuevo registro para un índice PRIMARY KEY o UNIQUE , el antiguo registro se borra antes de insertar el nuevo.
Tenga en cuenta que a menos que la tabla tenga un índice PRIMARY KEY, o UNIQUE usar un comando REPLACE no tiene sentido. Es equivalente a INSERT, ya que no hay índice para determinar si un nuevo registro duplica otro".  

Ejemplo:
REPLACE INTO table_name(column_name1,column_name2,…)
VALUES(value1,value2,…)

En este caso en la base de datos en la tabla offices este ejemplo insertará el registro como nuevo:

REPLACE INTO offices(officecode,city)
VALUES(8,'San Jose')

Si volvemos a utilizar replace, en la tabla offices como el ejemplo siguiente, San José será reemplazado por San Mateo

REPLACE INTO offices(officecode,city)
VALUES(8,'San Mateo')
 
DUPLICATE KEY UPDATE: Actualiza la fila existente por la nueva a insertar, aunque tenga llaves.

Supongamos que insertamos el siguiente dato:

INSERT INTO
`library_lending`
(`user_name`, `date`, `book_name`)
VALUES ('buddy', '2013-12-05', 'The-Hound-of-the-Baskervilles');

Ahora dos dias despues intentamos:

INSERT INTO
`library_lending`
(`user_name`,`date`,`book_name`)
VALUES
('buddy','2013-12-05','A-Study-in-Scarlet');

Y nos aparece el error:
Error Code: 1062. Duplicate entry 'buddy-2013-12-05' for key 'user_date'

Aqui en esta ocación colocamos en acción el query: 

INSERT INTO
`library_lending`
(`user_name`,`date`,`book_name`)
VALUES
('buddy','2013-12-05','A-Study-in-Scarlet')
ON DUPLICATE KEY UPDATE `book_name` = 'A-Study-in-Scarlet';

Ya solo quedas que crees tu script en el lenguaje de tu preferencia para automatizar los procesos.

Webs Consultadas: 
http://www.mysqltutorial.org/mysql-replace.aspx
http://techdo.me/today-i-learned-insert-and-update-rows-with-mysql-on-duplicate-key-update/
https://dev.mysql.com/doc/refman/5.0/es/replace.html




sábado, abril 19, 2014

Laravel: Error Class 'Monolog\Logger' not found



Para solucionar este error hacemos lo siguiente:
  1. Cambiar en composer.json (directorio del proyecto) la linea"minimum-stability": "dev" por "minimum-stability": "stable".
  2. Ejecutar composer self-update.
  3. Ejecutar nuevamente composer update.
Eso es todo.