Sei sulla pagina 1di 13

CREACIN DE USUARIOS

Para agregar un nuevo usuario , es tan simple como ejecutar la siguiente sentencia:
CREATE USER nombre_de_usuario IDENTIFIED BY 'clave sin encriptar';

Por ejemplo, para agregar al usuario juanperez con la clave 123456, se utilizara:
CREATE USER juanperez IDENTIFIED BY '123456';

Una muy buena prctica es limitar la conexin de los usuarios por host, para prevenir conexiones
desde hosts no deseados:
Por ejemplo, para crear al usuario Sandra y solo permitir su conexin local, la sentencia sera la
siguiente:
CREATE USER sandra@'localhost' IDENTIFIED BY '123456';

Si luego se deseara cambiar (o asignar en caso de inexistencia) una contrasea a un


determinado usuario, se utilizar SET PASSWORD como se muestra a continuacin:
SET PASSWORD FOR usuario = PASSWORD('nueva clave sin encriptar');
SET PASSWORD FOR 'usuario'@'host' = PASSWORD('nueva clave sin encriptar) ;

OTORGAR PERMISOS
Para otorgar permisos en MySQL, se deben considerar:
Permiso: El tipo de consultas que se permitir efectuar al usuario (SELECT, INSERT, DELETE,
UPDATE);
Database: Las bases de datos y/o tablas sobre las cules aplicarn dichos permisos;
Usuario: El o los usuarios a los cules sern otorgados los permisos aplicados.
La configuracin de permisos se realizar con la siguiente sentencia:
GRANT permiso ON database TO usuario;
Por ejemplo, para otorgar permisos de seleccin sobre la tabla categora de la base de datos
weblibros al usuario juanperez, se ejecutar:
GRANT SELECT ON weblibros.categoria TO juanperez;
Ejercicio:

MOTORES DE ALMACENAMIENTO

El motor de almacenamiento (storage-engine) se encarga de almacenar, manejar y


recuperar informacin de una tabla. Los motores ms conocidos son MyISAM e InnoDB.
Se debe especificar la opcin ENGINE = InnoDB o TYPE = InnoDB en la sentencia SQL de creacin de
tabla

DIFERENCIAS
Las comparativas entre motores se suelen hacer basndose en cuatro funcionalidades clave:
Tipos de datos: aunque la mayora son comunes hay algunos especficos que pueden ser
decisivos bajo determinadas circunstancias.
Bloqueo de datos: la forma en la que el motor protege un dato que est siendo modificado para
evitar problemas de acceso concurrente a los datos y mantener la integridad referencial.
Indexado: las diferentes tcnicas de indexado pueden influir drsticamente es el rendimiento de
una base de datos.
Transacciones: dota de fiabilidad a los datos mientras se realizan operaciones, te permite utilizar
los datos pero slo te permite guardarlos cuando se comprueba que las otras condiciones que
pudiesen requerirse se han cumplido.
Y tenemos que hablar tambin de... ACID2 Se denomina ACID a la propiedad de una base de
datos para realizar transacciones seguras. As pues ACID compliant define a un sistema de
gestin de bases de datos que puede realizar transacciones seguras. En concreto ACID es un
acrnimo de Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia,
Aislamiento y Durabilidad en espaol.
Atomicidad: es la propiedad que asegura que la operacin se ha realizado o no, y por lo tanto
ante un fallo del sistema no puede quedar a medias. Si una operacin consiste en una serie de
pasos, u ocurren todos o ninguno
Consistencia: es la propiedad que asegura que slo se empieza aquello que se puede acabar. Por
lo tanto se ejecutan aquellas operaciones que no van a romper la reglas y directrices de
integridad de la base de datos.
Aislamiento: es la propiedad que asegura que una operacin no puede afectar a otras. Esto
asegura que la realizacin de dos transacciones sobre la misma informacin nunca generar
ningn tipo de error.
Durabilidad: es la propiedad que asegura que una vez realizada la operacin, sta persistir y no
se podr deshacer aunque falle el sistema.

COMPARACIONES
Si necesitamos
escoger InnoDB.

transacciones,

claves

forneas

bloqueos,

tendremos

que

En aquellos casos en los que predominen las consultas SELECT a la base de datos
escogeremos MyISAM

OTRAS COMPARACIONES
nnoDB
Soporte de transacciones

Bloqueo de registros

Nos permite tener las caractersticas ACID (Atomicity, Consistency, Isolation and Durability:
Atomicidad, Consistencia, Aislamiento y Durabilidad en espaol), garantizando la integridad
de nuestras tablas.

Es probable que si nuestra aplicacin hace un uso elevado de INSERT y UPDATE notemos un
aumento de rendimiento con respecto a MyISAM.

MyISAM
Mayor velocidad en general a la hora de recuperar datos.

Recomendable para aplicaciones en las que dominan las sentencias SELECT ante los INSERT
/ UPDATE.

Ausencia de caractersticas de atomicidad ya que no tiene que hacer comprobaciones de la


integridad referencial, ni bloquear las tablas para realizar las operaciones, esto nos lleva
como los anteriores puntos a una mayor velocidad.

An tienes dudas de qu motor es el que necesitas?


Tu tabla va a recibir INSERTs, UPDATEs y DELETES mucho ms tiempo de lo que ser consultada? Te
recomendamos InnoDB
Necesitars hacer bsquedas full-text? Tu motor ha de ser MyISAM
Prefieres o requieres diseo relacional de bases de datos? Entonces necesitas InnoDB
Es un problema el espacio en disco o memoria RAM? Decntate por MyISAM

Cmo saber que motores estn disponibles? Es muy sencillo, basta con escribir en una consola
MySQL la siguiente consulta: show engines;
Y obtendremos algo como esto:

COPIAS DE SEGURIDAD Y RESTAURACION

mysqldump

es parte de los "MySQL Client Programs" programas de cliente de MySQL, que


puede ser utilizado para generar respaldos de bases de datos y ser usados incluso para ser
transferidos a otro servidor de base datos SQL (No estrictamente tiene que ser un servidor
MySQL).

Respaldo de una sola base de datos completa


mysqldump -u root -p clientes > clientes.sql

Respaldo de una sola base de datos con dos tablas


mysqldump -u root -p clientes saldos facturas

> clientes.sql

Respaldo completo de base de datos clientes y ventas


mysqldump --databases -u root -p clientes ventas > respaldo_cli_ven_sep_2011.sql

Respaldo completo de todas las bases de datos


mysqldump --all-databases > respaldo_full_sep_2011.sql

Todas las bases de datos del host 192.168.0.100 y agregamos los procedemientos
almacenados que sean respaldados tambin.
mysqldump -h 192.168.1.100 -u root -p --routines --all-databases
respaldo_ventas_2011.sql

>

Respaldamos en archivo comprimido al mismo tiempo que realizamos el respaldo


podemos comprimirlo para ahorrar espacio en nuestros respaldos.
mysqldump -u root -p --all-databases | gzip > respaldo_2011.sql.gz

Restaurando el respaldo
Hay varias maneras de lograr la restauracin del respaldo. Con el comando mysql:
mysql -u root -p < respaldo.sql

mysqldump -u root -p respaldo < respaldo.sql

TRANSACCIONES
Vamos a ejecutar algunas consultas para ver como trabajan las transacciones. Lo primero que tenemos que hacer
es crear una tabla del tipo InnoDB e insertar algunos datos.
Para crear una tabla InnoDB, procedemos con el cdigo SQL estndar CREATE TABLE, pero debemos especificar
que se trata de una tabla del tipo InnoDB (TYPE= InnoDB). Esto es aplicable a cualquier tipo de tabla, pero cuando
no se especifica nada, MySQL supone que se trata de una tabla MyISAM.

mysql> crate database prueba;


use prueba;
mysql> CREATE TABLE empleado (campo INT NOT NULL PRIMARY KEY) TYPE = InnoDB;
mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO empleado VALUES(1);
mysql> INSERT INTO empleado VALUES(2);
mysql> INSERT INTO empleado VALUES(3);
mysql> SELECT * FROM empleado;
+-------+
| campo |
+-------+
|

1|

2|

3|

mysql> ROLLBACK
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT * FROM empleado;

Empty set (0.00 sec)

mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO empleado VALUES(1);
mysql> INSERT INTO empleado VALUES(2);
mysql> INSERT INTO innotest VALUES(3);
mysql> SELECT * FROM empleado;
+-------+
| campo |
+-------+
|

1|

2|

3|

mysql> COMMIT;
Query OK, 0 rows affected (0.01 sec)
mysql> ROLLBACK
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT * FROM empleado;
+-------+
| campo |
+-------+
|

1|

2|

3|

VISTAS
Pero primero, debemos entender que son las vistas en mysql y para que podemos utilizarlas. Una vista en mysql
es una tabla virtual con una estructura que nosotros definimos pero sin datos.
En que nos pueden ayudar las vistas?. Las respuestas son varias, y seguro que hay muchas que desconozco,
pero las que entiendo de forma directa son las siguientes:

Se almacenan en el servidor con lo que el consumo de recursos y eficacia siempre sern ms ptimos.

En temas de seguridad siempre es mejor utilizar vistas en lugar de permitir a nadie acceder directamente a
los datos, nosotros mostramos al resto de desarrolladores los datos que queremos.

Podemos llamarlas de forma sencilla en una consulta y utilizar clausulas contra las mismas, ahora veremos
unos ejemplos.

Pueden haber desarrolladores con poca experiencia y con dificultades por hacer complejas consultas,
podemos darles la opcin de simplemente llamar a una vista para as obtener los datos.

Una vista es un camino simple para guardar complejas consultas de seleccin en nuestra base de
datos.

Una diferencia entre vistas y procedimientos almacenados es que las primeras no aceptan parmetros,
no siendo as con los procedimientos almacenados, que si los aceptan.

Un procedimiento almacenado suele utilizarse cuando no es suficiente una simple consulta sql. Los
procedimientos almacenados contienen variables, bucles y llamadas a otros procedimientos almacenados.

Lo primero que podemos hacer es crear una base de datos llamada vistas y las siguientes tablas con los siguientes
datos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

CREATE TABLE usuarios(


id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
nombre varchar(40) NOT NULL,
rango varchar (50) NOT NULL
) ENGINE=INNODB;
INSERT INTO usuarios VALUES (null, 'Andrs', 'novato');
INSERT INTO usuarios VALUES (null, 'Lus', 'medio');
INSERT INTO usuarios VALUES (null, 'Juan', 'experto');
CREATE TABLE comentarios(
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
usuario_id int(11) NOT NULL,
titulo varchar(40) NOT NULL,
comentario varchar (50) NOT NULL,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
) ENGINE=INNODB;
INSERT INTO comentarios VALUES (null, 1, 'titulo 1', 'comentario 1');
INSERT INTO comentarios VALUES (null, 2, 'titulo 2', 'comentario 2');

21 INSERT INTO comentarios VALUES (null, 3, 'titulo 3', 'comentario 3');

Si ahora hacemos la siguiente consulta obtendremos todos los registros relacionados.

1
2
3
4

SELECT nombre, rango, titulo, comentario


FROM usuarios
INNER JOIN comentarios
ON usuarios.id = comentarios.usuario_id

Esta consulta es simple y no debe dar problemas a ningn desarrollador/programador web, pero puede darse el
caso de que la consulta sea mucho ms compleja y entonces no todos deban saber como llevarla a cabo, para
evitar stos y otros casos vamos a utilizar vistas, as que creemos la siguiente.
1
2
3
4
5
6

CREATE VIEW
usuarios_comentarios AS
SELECT usuarios.id,nombre, rango, titulo, comentario
FROM usuarios
INNER JOIN comentarios
ON usuarios.id = comentarios.usuario_id;

Me imagino que estar claro, pero por si acaso, el concepto de vista es global a nuestra base de datos, no es
contra una tabla de forma directa como si lo son los triggers.

De esta forma tan simple, hemos creado en nuestra base de datos una tabla virtual llamada usuarios_comentarios
la cul est formada por una consulta que obtiene datos de las tablas usuarios y comentarios, as de simple.
Por si existe la duda, nuestra tabla virtual utilizar como ndices los que existan en las tablas que ha utilizado, es
decir, en nuestra tabla usuarios el campo id y en la tabla comentarios tanto el campo id como el campo usuario_id.
Ahora, para utilizar nuestra vista es sencillo, simplemente podemos hacer lo siguiente.

1 SELECT * FROM usuarios_comentarios;

Y obtendremos lo siguiente.

Pero lo mejor de utilizar vistas, a parte de poder llamarlas de forma tan sencilla, es que tambin podemos utilizar
ORDER BY, LIMIT y WHERE, por ejemplo como sigue.

1 SELECT * FROM usuarios_comentarios WHERE id = 2;

Y obtendremos el usuario con id 2 como sigue.

DISPARADORES O TRIGGERS

CREATE TRIGGER NOMBRE DEL TRIGGER


BEFORE INSERT ON TABLA PARA ALMACENAR DATOS
FOR EACH ROW
BEGIN
INSERT INTO TABLA PARA ALMACENAR DATOS(CAMPOS)
values (CURRENT_USER(), NOW());

mysql> use prueba;


Database changed

De esta manera creamos el trigger


mysql> create trigger
-> nombre
-> before insert on empleado
-> for each row
-> insert into copia(usuario,fecha)
-> values(current_user(),now());
Query OK, 0 rows affected (0.14 sec)

// aqu se insertan datos en la tabla real


mysql> insert into empleado values (1,'juan','2016-01-01',1000);
Query OK, 1 row affected (0.17 sec)

mysql> show tables;

| Tables_in_prueba |
+------------------+
| copia
| empleado
| empleadop

|
|
|

+------------------+
3 rows in set (0.00 sec)

mysql> select * from copia;


+------------+----------------+-------+
| fecha

| usuario

| valor |

+------------+----------------+-------+
| 2016-04-15 | root@localhost |
+------------+----------------+-------+
1 row in set (0.00 sec)

mysql>

0|

Crear 3 usuarios, a los que solo se les permita conectarse de forma local:
Otorgar permisos de seleccin y actualizacin, a todos los usuarios recin creados, para todas las tablas de la
base de datos prueba:
Crear una base de datos tipo InnoDB y otra de tipo MYSAM
Hacer una copia de la base de datos
Hacer una copia de solo una tabla
Restaurar una tabla de la base de datos
Cear una transaccin usando Commit y otra usando rollback en la tabla empleado
Crear una vista que muestre una consula de seleccin a una tabla cualquiera
Hacer un disparador que haga copia de los datos de una tabla cualquiera

Potrebbero piacerti anche