12
Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 1 INDICE Contenido CREAR CONTRASEÑA PARA EL USUARIO root ..................................................................................... 2 ADMINISTRAR BD en MyMa CON UN USUARIO QUE NO SEA root ..................................................... 3 MOSTRAR LOS REGISTROS EN OTRO ORDEN DISTINTO AL DISEÑO DE CAMPOS DE LA TABLA.......... 6 ME EQUIVOQUÉ AL CREAR UN REGISTRO Y NECESITO MODIFICARLO ............................................... 7 ¿PUEDO AÑADIR UN INDICE A UNA TABLA YA CREADA? .................................................................... 8 MOSTRAR REGISTROS ESPECÍFICOS .................................................................................................... 8 ¿Y SI QUIERO ORDENAR LA SALIDA UTILIZANDO UN CAMPO QUE NO ES INDICE? ............................ 9 ¿SE PUEDEN COMETER ERRORES MIENTRAS SE APRENDE? ............................................................... 9 A CUÁNTOS PACIEROS SU NOMBRE LES EMPIEZA CON ‘R’? ............................................................... 9 ¿CUÁNTOS PACIEROS SON APELLIDO ‘Lopez’? ................................................................................... 9 ¿SE PUEDE MODIFICAR EL TIPO DE TABLA DESPUÉS DE SU USO NORMAL? ...................................... 9 ¿QUÉ SON LOS OPERADORES? (lógica booleana) ............................................................................. 10 QUIERO TRABAJAR EN MODO DE LECTURA O ESCRITURA SOLAMENTE........................................... 11 RECUPERAR EL CÓDIGO SQL UTILIZADO PARA CREAR UNA TABLA .................................................. 11 JOINS (inner join: identificar combinaciones de dos campos en tablas distintas) ............................ 11

FAQ sobre MariaDB con ejemplos prácticos

Embed Size (px)

DESCRIPTION

Ejemplos de uso básico con MySQL o MariaDB.

Citation preview

Page 1: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 1

INDICE

Contenido

CREAR CONTRASEÑA PARA EL USUARIO root ..................................................................................... 2

ADMINISTRAR BD en MyMa CON UN USUARIO QUE NO SEA root ..................................................... 3

MOSTRAR LOS REGISTROS EN OTRO ORDEN DISTINTO AL DISEÑO DE CAMPOS DE LA TABLA .......... 6

ME EQUIVOQUÉ AL CREAR UN REGISTRO Y NECESITO MODIFICARLO ............................................... 7

¿PUEDO AÑADIR UN INDICE A UNA TABLA YA CREADA? .................................................................... 8

MOSTRAR REGISTROS ESPECÍFICOS .................................................................................................... 8

¿Y SI QUIERO ORDENAR LA SALIDA UTILIZANDO UN CAMPO QUE NO ES INDICE? ............................ 9

¿SE PUEDEN COMETER ERRORES MIENTRAS SE APRENDE? ............................................................... 9

A CUÁNTOS PACIEROS SU NOMBRE LES EMPIEZA CON ‘R’? ............................................................... 9

¿CUÁNTOS PACIEROS SON APELLIDO ‘Lopez’? ................................................................................... 9

¿SE PUEDE MODIFICAR EL TIPO DE TABLA DESPUÉS DE SU USO NORMAL? ...................................... 9

¿QUÉ SON LOS OPERADORES? (lógica booleana) ............................................................................. 10

QUIERO TRABAJAR EN MODO DE LECTURA O ESCRITURA SOLAMENTE........................................... 11

RECUPERAR EL CÓDIGO SQL UTILIZADO PARA CREAR UNA TABLA .................................................. 11

JOINS (inner join: identificar combinaciones de dos campos en tablas distintas) ............................ 11

Page 2: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 2

Notas importantes (es buena idea imprimir esto) // Preguntas más frecuentes… con respuestas.

CREAR CONTRASEÑA PARA EL USUARIO root

Pancracio Alberto acaba de bajar de Internet la distribución de MariaDB para Windows 7 Starter, y

no sabe qué más hacer, y le pregunta a Chimpan Dolfo cómo se instala eso. Chimpan le dice que

no usa MariaDB con Windows, pero que va a investigar cómo se hace. Un par de días después le

envía un email con la explicación y le dice: Hola Pancry… hay dos paquetes que puedes bajar de

Internet, uno para instalar y el otro para descomprimir. Te recomiendo el paquete que se instala, y

que lo instales en C:\MariaDB

Como el único usuario que trae por default MariaDB es root y sin contraseña, debes tener cuidado

con tu vecino Kraquerto Pérez que está siempre listo para romper toda instalación posible, y

postear en el foro de Latyn Jaquers su nueva hazaña sobre ti. “Bueno, te tienes que anticipar a

Kraquerto”, le dice Chimpan. Haz lo siguiente en la línea de comandos cuando vas a ejecutar

MyMa por primera vez.

1 – Instala el servicio de base de datos MySQL (igual para MariaDB)

“C:\MariaDB\bin\mysqld.exe” -- install

2 – Ejecuta el cliente mysql por vez primera

mysql –u root mysql

lo que hace la línea anterior es lo siguiente: -u root es el usuario root con el que vas a entrar, y

mysql es el nombre de la base de datos que quieres abrir directamente. MyMa ya trae información

específica sin protección sobre el servidor en la BD mysql, y Kraquerto lo sabe muy bien. Una vez

dentro del entorno creado por mysql.exe ejecutamos las siguientes instrucciones.

SET PASSWORD=PASSWORD(‘anaconda’);

Page 3: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 3

Si tratas de entrar ahora con root sin usar la contraseña, no te va a dejar entrar y te va a devolver

el siguiente mensaje de error:

C:\MariaDB\bin>mysql -u root mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Esta es la forma correcta a continuación donde te va a solicitar la contraseña:

Kraquerto va a pasar un muy mal rato tratando de reventar tu base de datos… a menos que

ingrese a tu sistema por algún hueco del Shell y pueda ver el historial de tus comandos, pero no

verá allí lo que escribiste dentro del entorno de mysql.exe, así que… va duro, a menos que le digas

que la clave es un animal que se arrastra y que te aprieta hasta matar… y le tomará 15 minutos.

ADMINISTRAR BD en MyMa CON UN USUARIO QUE NO SEA root

Esto es muy importante, no se debe manejar ningún Sistema (incluido el OS conocido como

Windows), en modo super usuario. Kraquerto puede estar cerca y ver lo que haces o cómo lo

haces, y él tiene toda la paciencia del mundo para esperar el momento de postear en Internet su

hazaña sobre ti y tu BD. Pero si le haces la vida difícil, se empeñará más en ti, enamorará a tu

hermana, a tu tía, a tu mamá, usará perfume, se volverá lindo, cuidará a tu perro o al perico, y

hará lo que sea para romper tu seguridad.

Imagina que Pancracio Alberto acaba de crear una base de datos llamada “macarrones” y que

aprendió que no quiere utilizar al usuario root para administrar la BD. Entonces debe crear otro

usuario para ese fin. Ese usuario de MyMa no tiene nada que ver con los usuarios del SO Linux o el

SO Windows. Vamos a crear un usuario llamado ‘fabulosito’ con la clave ‘password99’ y acceso a

total a la base de datos ‘macarrones’ con el siguiente ejemplo de uso de GRANT:

Page 4: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 4

Ahora, ya se puede salir del entorno de mysql.exe y volver a ingresar pero con el usuario

‘fabulosito’

Ahora, el usuario ‘fabulosito’ se conecta a la BD ‘macarrones’ y puede administrar sin necesidad de

usar a root. Qué bueno. Ahora Pancracio Alberto puede con ‘fabulosito’ crear una tabla de tipo

InnoDB llamada ‘fiesta’ con la siguiente estructura:

Tabla: fiestas

Columnas: Nombre_campo Tipo Tamaño Atributos

Paciero Cadena 30 no nulo

Celular Cadena 15 no nulo

Email Cadena 35 no nulo

Clase_paciero Cadena 14 no nulo, enum

id Entero + no nulo, incremento, llave

Page 5: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 5

Pancracio Alberto va a probar si es cierto que el súper user le dio todos los poderes interestelares

sobre la BD ‘macarrones’ porque aún no lo cree.

Pancracio Alberto ha comenzado a creer, y en unos dos años será todo un Jedi si le dedica 30 mins

diarios a MyMa, pero si le dedica más tiempo por día llegará a ser un Jedi mucho antes de ese

tiempo y no le preguntará ya nada a Kraquerto ni a Chimpan Dolfo. Está ansioso por añadir datos

para que Kraquerto lo sepa, pues tiene pensado hasta colocar la BD en un formulario en Internet

para que Kraquerto y otros amigos lo ayuden a anotar a los amigos y amigas que irán a su fiesta.

MariaDB [macarrones]> insert into fiestas

-> set paciero='Rodolfo Alejandro Caicedo',

-> celular='6652-9352',

-> email='[email protected]',

-> clase_paciero=3;

Query OK, 1 row affected (0.06 sec)

En el INSERT anterior, Pancry no incluyó el campo ‘id’ porque la base de datos lo crea en el registro

e incrementa ‘automágicamente’ cada vez. En el campo ‘clase_paciero’ al colocar el valor 3, no se

almacena el número 3, sino el valor que se ocupa del ENUM en la posición 3, contando desde 1.

Ahora Pancry añade un segundo registro y luego muestra todo lo ingresado en la pantalla:

MariaDB [macarrones]> insert into fiestas

-> set paciero='Kraquerto Lopez',

-> celular='6969-0666',

-> email='[email protected]',

-> clase_paciero=1;

Query OK, 1 row affected (0.26 sec)

MariaDB [macarrones]>select * from fiestas;

El asterisco (*) es un comodín que indica se seleccionan todos los campos.

Page 6: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 6

Ahora Pancracio Alberto es feliz y se lo dice a su novia, le escribe un poema y lo postea en feisbuc.

Pero la novia que no es boba le pregunta, ¿Y si quiero mostrar los datos en un orden de campos

diferente? Pancracio Alberto se rasca la cabeza…

MOSTRAR LOS REGISTROS EN OTRO ORDEN DISTINTO AL DISEÑO DE CAMPOS DE LA TABLA

De veras que a veces queremos hacer esto, y hasta pensamos en alterar la estructura de la tabla,

pero no es necesario, vean el ejemplo:

Se pueden colocar todos los campos o seleccionar sólo algunos campos en el orden en que lo

deseamos.

Page 7: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 7

ME EQUIVOQUÉ AL CREAR UN REGISTRO Y NECESITO MODIFICARLO

A veces al crear registros podemos cometer errores, o la información puede haber cambiado lo

que hace necesario una actualización a un campo específico en determinado registro. Como la

tabla ‘fiestas’ tiene el campo ‘id’ que es llave y no se puede repetir, entonces es fácil realizar la

actualización. Pancracio Alberto quiere modificar el registro de su paciero Rodolfo cuyo ‘id’ es 1,

porque no es un ‘Hartón’ sino un ‘Cooperador’ y no quiere una F para el semestre (pues además es

su profesor de MyMa). Para ello utiliza la instrucción UPDATE.

Page 8: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 8

¿PUEDO AÑADIR UN INDICE A UNA TABLA YA CREADA?

Sí. Alterando la tabla. En este caso, no se afectan los datos pre existentes. Vamos a crear un índice

y le llamaremos ‘index_id’ para indizar con el campo ‘id’

ALTER TABLE macarrones.fiestas

ADD INDEX index_id (id);

MOSTRAR REGISTROS ESPECÍFICOS

Se puede filtrar la salida para que muestre un grupo específico de registros, basado en un criterio

que la modifique. Pancracio Alberto necesita saber cuáles son sus pacieros gorreros.

Page 9: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 9

¿Y SI QUIERO ORDENAR LA SALIDA UTILIZANDO UN CAMPO QUE NO ES INDICE?

Entonces uso la cláusula modificadora ORDER BY. En una tabla con muchos datos (miles de

registros) esto puede resultar algo lento dependiendo de la complejidad del query. Si vas a hacer

eso todos los días, mejor crea un índice para esa situación.

¿SE PUEDEN COMETER ERRORES MIENTRAS SE APRENDE?

Sí. Todos cometen errores mientras se aprende. Hasta Monty…

A CUÁNTOS PACIEROS SU NOMBRE LES EMPIEZA CON ‘R’?

Select * from fiestas Where paciero like ‘R%’ ;

¿CUÁNTOS PACIEROS SON APELLIDO ‘Lopez’?

Select * from fiestas Where paciero like ‘%Lopez’ ;

¿SE PUEDE MODIFICAR EL TIPO DE TABLA DESPUÉS DE SU USO NORMAL?

Sí. Las tablas creadas sin el modificador ENGINE son creadas en tipo MyISAM por default. Las

tablas MyISAM se bloquean por completo cuando se ejecutan operaciones de inserción sobre

ellas. InnoDB utiliza funciones de bloqueo diseñadas para afectar solamente al registro específico,

y se pueda seguir trabajando a la vez sobre otros registros. Para convertir una tabla a otro tipo de

tabla después de creada, se ejecuta lo siguiente:

ALTER TABLE Mi_Tabla_de_tipo_x TYPE = InnoDB;

Page 10: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 10

¿QUÉ SON LOS OPERADORES? (lógica booleana)

Creo que se les debería llamar “comparadores”, pero ya se llaman “operadores”, así que

dejémoslo así. Los operadores más comunes con AND, OR y NOT. También están sus primos <, >, y

= que los ayudan y complementan. Hasta ahora hemos utilizado ‘=’ y a LIKE.

Toda sentencia que lleve AND debe ser cierta en cada miembro para que sea verdadera toda, es

decir, cada miembro comparado debe ser cierto. Si un solo miembro de la comparación resulta

falso, toda la operación se considera falso, aunque todos los demás miembros restantes fueran

verdaderos.

Pancracio Alberto tiene 21 años. Con este solo hecho y algunas cosas que conocemos de él ya

podemos crear algunas conclusiones (he aquí la importancia de la lectura comprensiva):

Nombre: Pancracio Alberto

Apellido: desconocido

Edad: 21 años

Año de nacimiento: 1989

Sexo: masculino

¿Novia?: Sí

¿Estudioso?: Algo

Le gustan las fiestas

Si Pancry > 18 AND Birth_year = 1989 AND Sex = ‘M’

entonces

hacer tal cosa porque todos los miembros comparado son ciertos

Si Pancry < 20 AND Birth_year = 1989 AND Sex = ‘M’

entonces

hacer tal cosa si todo es cierto

de otro modo

hacer esta otra cosa si algún miembro no fuera cierto

En el primer IF “la cosa” que se va a hacer siempre se realiza porque todo es cierto… a menos que

cambie de sexo.

En el segundo IF “la cosa” que se quiere hacer no resulta a la primera porque algo la hace falso; el

primer miembro, por eso, se ejecutará siempre la segunda acción, pues algo falso hizo que todo lo

demás aunque cierto, ya no fuera verdadero.

En los casos de OR con que algún miembro cualquiera sea cierto, es suficiente para que toda la

sentencia de comparación sea verdadera. Eso quiere decir que Pancracio Alberto puede construir

“Tablas de la verdad” con todo lo que sabe de algo. Estas tablas son una táctica útil para tomar

decisiones reales.

Page 11: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 11

QUIERO TRABAJAR EN MODO DE LECTURA O ESCRITURA SOLAMENTE

LOCK TABLE fiestas READ;

Para el desbloqueo:

UNLOCK TABLES;

Bloquear varias tablas en modo lectura:

LOCK TABLE fiestas READ, aportes READ;

MyMa bloquea por default (en InnoDB), sólo en el registro que se tiene abierto. MyISAM bloquea

toda la tabla en uso. Para bloquear la tabla de modo exclusivo y evitar que Kraquerto inserte o

duplique también, usa la siguiente instrucción:

LOCK TABLE fiestas WRITE;

Cualquier otro usuario deberá esperar hasta que se libere el bloqueo para poder escribir o leer de

las tablas bloqueadas, porque los bloqueos de escritura tienen prioridad sobre los de lectura.

RECUPERAR EL CÓDIGO SQL UTILIZADO PARA CREAR UNA TABLA

Luego de usar una tabla por algún tiempo, y haberla alterado una o más veces, puede ser que

desees ver por curiosidad el código SQL utilizado para crear esa tabla nuevamente.

SHOW CREATE TABLE fiestas; � Podrás ver el código, pero con alguna basurita

SHOW CREATE TABLE fiestas\G � Ahora se ve más limpio y mejor

JOINS (inner join: identificar combinaciones de dos campos en tablas distintas)

Hasta ahora, Pancracio Alberto ha trabajado con BD de una sola tabla a la vez. Pero esto alguna

vez tiene que cambiar, y más pronto de lo que él cree. Como no todas las preguntas pueden ser

contestadas utilizando una sola tabla, se hace necesaria una estructuración que permita este

Page 12: FAQ sobre MariaDB con ejemplos prácticos

Prof. Rodolfo Caicedo IV – Proyecto MariaDB – MySQL (MyMa) / UTP Página 12

comportamiento, es decir, una operación sofisticada que produce resultados a través de la

combinación (joining) de información de una tabla con la información de otra tabla. En MyMa se

pueden combinar hasta 61 tablas. Esto se debe hacer con especial amor y cuidado para que no

suframos posteriormente. Lo importante inicialmente es crear las tablas con formato InnoDB.

Muchas veces Pancracio Alberto usará un nombre de campo o columna que estará repetido en

más de una tabla. Por tal razón será necesario utilizar calificadores y alias para resolver esta

ambigüedad. Desde un principio les mencioné que es más “smart” utilizar una semántica de

nombres de campos que describan su utilización, especialmente en tablas diferentes. Por ejemplo

la tabla ‘nombres’ y la tabla ‘pagos’ pueden tener repetido el campo ‘id’. ¿Qué harías si tienes 25

tablas que repiten un mismo nombre de campo? ¿Qué le preguntarías a Kraquerto? Ahora

veremos qué hacer.

Pancracio Alberto puede crear una nueva tabla que le informe qué personas han realizado pagos

para cooperar con su fiesta. Todos sabemos que los Gorreros y los Limpios nunca aportan para las

fiestas, sino, dejarían de ser Gorreros y Limpios y habría que hacer un UPDATE al registro

correspondiente. Pancry puede saber cuánto ha aportado cada uno y cuál es el total global de los

aportes.