Herramientas de usuario

Herramientas del sitio


informatica:bases_de_datos:mysql

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:bases_de_datos:mysql [2021/09/28 13:19] – [Restaurar] tempwininformatica:bases_de_datos:mysql [2022/10/19 16:06] (actual) – [WHERE] tempwin
Línea 122: Línea 122:
 | ''>=''   | Mayor o igual que  | | ''>=''   | Mayor o igual que  |
 | ''%%<=%%''   | Menor o igual que  | | ''%%<=%%''   | Menor o igual que  |
 +| ''LIKE''  | Compara un patrón  |
 +
 +Si vamos a usar LIKE con múltiples valores, es mejor usar el operador ''REGEXP'' y una [[http://www.tutorialspoint.com/mysql/mysql-regexps.htm|expresión regular]]. Por ejemplo:
 +
 +<code mysql>
 +WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
 +</code>
 +
 +Sería:
 +
 +<code mysql>
 +WHERE interests REGEXP 'sports|pub'
 +</code>
 +
 +
  
 ==== GROUP BY ==== ==== GROUP BY ====
Línea 647: Línea 662:
   * ''-h'': nombre de host (o dirección IP) del servidor de base de datos   * ''-h'': nombre de host (o dirección IP) del servidor de base de datos
  
-Hay que tener en cuenta que de la anterior manera, ''mysqldump'' no graba los disparadores ni los procedimientos almacenados. Si queremos que vuelque disparadores, procedimientos almacenados y envetos:+Hay que tener en cuenta que de la anterior manera, ''mysqldump'' no graba los disparadores ni los procedimientos almacenados. Si queremos que vuelque disparadores, procedimientos almacenados y eventos:
  
 <code> <code>
Línea 682: Línea 697:
  
 <code mysql> <code mysql>
-LOAD DATA LOCAL INFILE 'C:\\ficheros\\database.csv' +LOAD DATA LOCAL INFILE '/home/pepito/ficheros/database.csv' 
 INTO TABLE mi_tabla  INTO TABLE mi_tabla 
 FIELDS TERMINATED BY ';'  FIELDS TERMINATED BY ';' 
 +ENCLOSED BY '"'
 LINES TERMINATED BY '\n'  LINES TERMINATED BY '\n' 
 IGNORE 1 rows  IGNORE 1 rows 
 (campo1, campo2, campo3, campo4); (campo1, campo2, campo3, campo4);
 +</code>
 +
 +  * En la primera línea indicamos que vamos a cargar un fichero que está en el sistema de ficheros local. Si fuese un sistema Windows, sería, por ejemplo, ''C:\\ficheros\\database.csv''
 +  * La segunda línea indica la tabla en la que se van a importar los datos.
 +  * La tercera línea especifica el separador de campos. 
 +  * La cuarta línea indica el  caracter usado para encerrar los campos.
 +  * La quintalínea indica el separador de líneas. En ficheros creados en Windows sería ''\r\n''
 +  * La sexta línea ignora la primera línea del fichero CSV por si contiene el nombre de las columnas
 +  * La última línea indica el orden y el nombre de los campos de la tabla donde se van a insertar los campos del fichero CSV.
 +
 +==== Ignorar duplicados ====
 +
 +En caso de que quisiéramos ignorar duplicados (si hay coincidencias en campos que deban ser únicos), añadimos ''IGNORE'':
 +
 +<code mysql>
 +LOAD DATA LOCAL INFILE '/home/pepito/ficheros/database.csv' 
 +IGNORE INTO TABLE mi_tabla 
 +FIELDS TERMINATED BY ';' 
 +LINES TERMINATED BY '\n' 
 +IGNORE 1 rows 
 +(campo1, campo2, campo3, campo4);
 +</code>
 +
 +==== Seleccionar campos ====
 +
 +Si queremos insertar solo determinados campos:
 +
 +<code mysql>
 +LOAD DATA LOCAL INFILE '/home/pepito/ficheros/database.csv' 
 +INTO TABLE mi_tabla 
 +FIELDS TERMINATED BY ';' 
 +LINES TERMINATED BY '\n' 
 +IGNORE 1 rows 
 +(@col1, @col2, @col3, @col4) SET campo3=@col3, campo4=@col4;
 +</code>
 +
 +Solo insertaría los campos que ocupan las columnas 3 y 4.
 +
 +==== Insertar null ====
 +
 +Si algún campo del CSV es vacío, podemos indicar que se inserte NULL mediante la función ''NULLIF'':
 +
 +<code mysql>
 +LOAD DATA LOCAL INFILE '/home/pepito/ficheros/database.csv' 
 +INTO TABLE mi_tabla 
 +FIELDS TERMINATED BY ';' 
 +LINES TERMINATED BY '\n' 
 +IGNORE 1 rows 
 +(@col1, @col2, @col3)
 +SET campo1=NULLIF(@col1, ''), campo2=@col2, campo3=NULLIF(@col3);
 +</code>
 +
 +==== Formatear fecha ====
 +
 +Si el dato de fecha viene en un formato distinto al esperado en MySQL (''%Y-%m-%d %H:%i:%s''), lo podemos fomatear con la función ''STR_TO_DATE'':
 +
 +<code mysql>
 +LOAD DATA LOCAL INFILE '/home/pepito/ficheros/database.csv' 
 +INTO TABLE mi_tabla 
 +FIELDS TERMINATED BY ';' 
 +LINES TERMINATED BY '\n' 
 +IGNORE 1 rows 
 +(@col1, @col2, @col3)
 +SET campo1=STR_TO_DATE(@col1, '%d/%m/%Y %H:%i:%s'), campo2=@col2, campo3=@col3;
 </code> </code>
 ===== Bases de datos de ejemplo ===== ===== Bases de datos de ejemplo =====
  
   * [[https://dev.mysql.com/doc/sakila/en/|Sakila]]: base de datos de alquiler de películas.   * [[https://dev.mysql.com/doc/sakila/en/|Sakila]]: base de datos de alquiler de películas.
 +
 +===== Reparar tablas =====
 +
 +Si tenemos el error "Table is marked as crashed and should be repaired", podemos solucionarlo con el programa ''mysqlcheck'':
 +
 +<code>
 +mysqlcheck -uUSUARIO -p --databases NOMBRE_BASE_DATOS --auto-repair
 +</code>
 +
 +  * ''USUARIO'': usuario con permisos sobre la base de datos
 +  * ''NOMBRE_BASE_DATOS'': base de datos que contiene las tablas corruptas.
 +
 +Se hará una revisión de las tablas de dicha base de datos y se intentará reparar automáticamente.
informatica/bases_de_datos/mysql.1632827974.txt.gz · Última modificación: por tempwin