Mostrando las entradas con la etiqueta Mysql. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Mysql. Mostrar todas las entradas

domingo, diciembre 21, 2014

Crear Tablas temporales con MySQL

Es un recurso muy útil en algunas situaciones en las que requerimos procesar información de las tablas y poderlas modificar sin necesidad de alterar la original (claro siempre podemos adoptar otras técnicas), y con la principal característica de que solo están disponibles mientras dure abierta la conexión, ya que se eliminan inmediatamente cuando cerramos la conexión. Las tablas temporales pueden eliminarse de forma explicita ( utilizando el comando DELETE) pero la idea implicita es que no si nos “olvidamos” de hacerlo MySQL lo hace por nosotros.
Se puede crear una tabla temporal de varias maneras:

  • Definiendo de forma explicita sus columnas

CREATE TEMPORARY TABLE nombreTablaTemporal (...definicion de columnas...);

  • Partiendo de una existente (clonación)

CREATE TEMPORARY TABLE nombreTablaTemporal LIKE  tablaOriginal;

  • En “vuelo” a partir de un ResultSet
1
CREATE TEMPORARY TABLE nombreTablaTemporal SELECT ... ;

Las tablas temporales están enlazadas con una conexión especifica, por lo que varios clientes pueden crear tablas temporales con el mismo nombre sin que se interfieran unas con otras. Otra propiedad de estas tablas es que pueden tener el nombre de una tabla permanente, en este caso la tabla temporal “esconde” la permanente mientras la primera exista, facilitando el uso de copias de tablas permanentes sin afectar a la original, si llegásemos a eliminar la tabla temporal de forma explicita (sentencia DROP Table) y esta “esconde” a la permentente, aún conservariamos la permanente.

A tener en cuenta

  • Si quieres reutilizar una tabla temporal que previamente has creado, debes eliminarla explicitamente primero, ya que si intentas crear dicha tabla temporal se generará un error.
  • Debes tener cuidado cuando trabajas con tablas temporales que “esconden” a tablas permanentes, ya que una mala gestión de errores de desconexión acarreará la posibilidad de perder la tabla  temporal y seguir trabajando con la permanente.

Tomado de:  http://www.elclubdelprogramador.com

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




miércoles, febrero 05, 2014

Permitir acceso remoto root MySQL (Ubuntu )

Accedemos al archivo my.cnf:

sudo nano /etc/mysql/my.cnf

Comentar la linea donde dice:
#bind­address = 127.0.0.1

O podemos agregar:

bind­address = 0.0.0.0

Luego acceder a Mysql, escribir desde consola:

mysql ­u root ­p

Desde dentro de mySQL ejecutar:

GRANT ALL ON *.* TO root@numero_ip_remota IDENTIFIED BY 'password_del_usuario';

Salir de mysql.

Reiniciar el server mySQL:

sudo /etc/init.d/mysql restart

Recuperar contraseña root Mysql (Ubuntu server)

Para Recuperar la contraseña, debemos seguir los siguientes pasos:

1. Detener el servicio de mysql.
sudo service mysql stop

2. Iniciar mysql en modo seguro

sudo mysqld —skip-grant-tables (no cerrar la ventana)

Iniciar mysql

3. Abrir una ventana nueva y entrar a mysql

mysql

4. Cambiar a la base de datos mysql

use mysql;

5. Actualizar la contraseña del usuario.

UPDATE user SET Password=PASSWORD(‘contraseña’) WHERE user = ‘root’;

6. Reiniciar permisos en la base de datos

FLUSH PRIVILEGES;

7. Reiniciar el servicio y comprobar que funciona

(Fuente: forosdelweb.com)

jueves, enero 23, 2014

Ignorar Valores duplicados en MySql - (php)


Algunas veces necesitamos insertar valores a una base de datos y estos pueden estar duplicados. Al estar duplicados nuestro script puede detenerse y apara evitar esto podemos usar IGNORE para ignorar el insert que no se pudo insertar:

INSERT IGNORE 
  INTO tabla 
    (id, valor, ...) 
  VALUES 
    (25, 'valor, ...) 
Espero sea de utilidad.

miércoles, diciembre 25, 2013

Ubuntu - Conectando a MySQL (error 2003)

Para resolver el error 2003 que se presenta al intentar conectarnos a nuestra base de datos MySql sobre Ubuntu (en este Caso), simplemente tenemos que hacer lo siguiente:

Modificamos el archivo /etc/mysql/my.cnf y cambiamos el bind-address a la dirección ip del equipo donde deseamos conectarnos o para acceder desde cualquiera colocamos 0.0.0.0