Está en la página 1de 34

UNIVERSIDAD TÉCNICA DE MANABÍ

DEPARTAMENTO DE INFORMÁTICA

Práctica de
Administración de Base
de Datos

Tercer Semestre
ADMINISTRACIÓN DE BASES DE DATOS
2
CONTENIDO A TRATAR HOY:
Vistas
Creación de usuarios
Asignación de permisos a usuarios
Procedimientos almacenados

Objetivo de la Clase:
✓Escribir enunciados CREATE VIEW y entender su
funcionamiento.
✓Crear usuarios y otorgarles accesos diferentes a las
bases de datos.
✓Escribir sentencias de Procedimientos
almacenados, con o sin envío de parámetros
Cognitive Cities Management Research Group (CMMA)
CREACIÓN DE VISTAS
Antes de empezar la práctica deben crear la base de
datos UNIDAD, las tablas y datos proporcionados en los
archivos:
ABD_Datos1_2021S1 → Creación de la base de datos
UNIDAD y las tablas.
ABD_Datos2_2021S1 → Inserción de datos en todas las
tablas.
Ambos archivos se encuentran en el directorio Prácticas
Unidad 2.
BASE DE DATOS
UNIDAD
PRÁCTICA DE VISTAS

Crear una vista con los nombres de las personas


SHOW TABLES;
CREATE OR REPLACE VIEW V_Datos AS
SELECT ApellidoPaterno, ApellidoMaterno, Nombres
FROM personas
ORDER BY ApellidoPaterno;

SHOW TABLES;
DESCRIBE V_Datos;
SHOW CREATE VIEW V_Datos;

Cognitive Cities Management Research Group (CMMA)


PRÁCTICA DE VISTAS

Seleccionar datos de una vista


SELECT *
FROM v_datos
WHERE paterno = "Delgado";

SELECT *
FROM v_datos
LIMIT 5,8;

Crear la vista V_Datos sin el ORDER BY, luego verificar la salida de


datos.
Cognitive Cities Management Research Group (CMMA)
PRÁCTICA DE VISTAS

Crear una vista con los nombres de las personas que


tengan apellidos paterno igual a Zambrano

CREATE OR REPLACE VIEW V_Datos01 AS


SELECT ApellidoPaterno as Paterno, ApellidoMaterno as Materno, Nombres
FROM personas
WHERE ApellidoPaterno = 'Zambrano'
ORDER BY ApellidoMaterno;
SELECT * FROM v_datos01;
SELECT ApellidoPaterno, ApellidoMaterno , Nombres
FROM personas
WHERE ApellidoPaterno = 'Zambrano';
Cognitive Cities Management Research Group (CMMA)
PRÁCTICA DE VISTAS
UPDATE V_Datos01
SET Paterno = 'García' Al cambiar los datos de la vista, si no
cumplen la condición dejan de ser
seleccionados.
WHERE Nombres = 'Eduardo’;

SELECT * FROM v_datos01;

SELECT ApellidoPaterno, ApellidoMaterno,Nombres


FROM personas
WHERE ApellidoPaterno = 'Zambrano';

SHOW TABLES;
DESCRIBE V_Datos01;
SHOW CREATE VIEW V_Datos01;
PRÁCTICA DE VISTAS
Crear una vista con los nombres de los profesores
CREATE OR REPLACE VIEW V_Lista_Profesores
(PrimerApellido, SegundoApellido, Nombres, Profesion, Cargo) AS
SELECT ApellidoPaterno, ApellidoMaterno, Nombres,
Titulacion, cargo
FROM profesores INNER JOIN personas
ON profesores.IdPersona = personas.IdPersona
WHERE profesores.cargo Like “prof%”;
SELECT * FROM V_Lista_Profesores ;
SHOW TABLES;
DESCRIBE V_lista_Profesores;
SHOW CREATE VIEW V_lista_Profesores;
Cognitive Cities Management Research Group (CMMA)
PRÁCTICA DE VISTAS
Crear una vista con la opción WITH CHECK OPTION
CREATE OR REPLACE VIEW V_Datos02 AS
SELECT ApellidoPaterno, ApellidoMaterno,Nombres
FROM personas
WHERE ApellidoPaterno = 'Zambrano'
WITH CHECK OPTION ;

UPDATE V_Datos02 Al crear la vista con la opción WITH CHECK

SET ApellidoPaterno = 'García' OPTION no permite realizar cambios para las


cuales la cláusula WHERE no es verdadera.

WHERE Nombres = 'Enrique’;

UPDATE V_Datos02
Al crear la vista con la opción WITH CHECK
SET ApellidoMaterno = 'García' OPTION permite realizar cambios para las cuales
la cláusula WHERE sigue siendo verdadera.
WHERE Nombres = 'Enrique';
Cognitive Cities Management Research Group (CMMA)
PRÁCTICA DE VISTAS

Variables de Consola o usuario


SET @numero=0;

SELECT @numero:=@numero+1 AS Numero, V_lista_Profesores.*

FROM V_lista_Profesores;

SET @caracter = “Hola mundo”;

SET @fechahoy = CURDATE();

SELECT @caracter, @fechahoy;

Crear una vista con los nombres del papá, la mamá, representante y el
Cognitive Cities Management Research Group (CMMA)

estudiante.
GESTIÓN DE USUARIOS
PRÁCTICA CREACIÓN DE USUARIOS
14
Crear un usuario de nombre anonimo

Ingresar a MySQL con el usuario root, usar la base de datos MySql y


crear usuario anónimo:
mysql> Use MySQL;
mysql> CREATE USER 'anonimo'@'localhost' IDENTIFIED BY 'distinto';

Utilizar el cmd (símbolo del Sistema) y cambiarse al directorio donde


se encuentra instalado el MySQL.
% cd c:\wamp64\bin\mysql\mysql5.7.14\bin
(revisar bien la dirección donde se instaló el wampserver)

Cognitive Cities Management Research Group (CMMA) 11/19/2021


PRÁCTICA CREACIÓN DE USUARIOS
15
Ingresar a MySQL con el usuario anonimo (en el directorio de
MYSQL):

%mysql -h localhost -u anonimo –p


mysql> SHOW DATABASES;
(visualiza la base de datos del esquema)
mysql> use information_schema;
mysql> SHOW tables;
CREATE TABLE borrar
(ID integer(4) PRIMARY KEY, No permite crear la tabla porque no tiene
permiso el usuario ANONIMO.
NOMBRE varchar(10));
Cognitive Cities Management Research Group (CMMA) 11/21/2021
PRÁCTICA CREACIÓN DE USUARIOS
Le da permiso a la tabla Personas de poder
16 seleccionar todas las columnas.

En el Usuario Root realizar lo siguiente;


mysql> GRANT select ON UNIDAD.personas TO anonimo@localhost;

En el Usuario Anonimo:
mysql> SHOW DATABASES;
mysql> USE Unidad;
mysql> SHOW TABLES; (se dio acceso a la tabla personas)
mysql> SELECT * FROM personas;

Crear un usuario con el nombre “Secretaria” que le permita


seleccionar e ingresar datos en las tablas Estudiante y Profesores.
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA PERMISOS DE USUARIOS
Le da permiso a la tabla PeriodosLectivos
17 de poder seleccionar la columna nombre

En el Usuario Root realizar lo siguiente;


mysql> GRANT SELECT(nombre) ON Unidad.PeriodosLectivos TO anonimo@localhost;
Le da permiso a la tabla Estudiante de poder seleccionar, insertar,
modificar y eliminar información en todas sus columnas

mysql> GRANT select, insert, update, delete ON Unidad.estudiante TO anónimo@localhost;


mysql> FLUSH PRIVILEGES;

En el Usuario Anonimo:
mysql> USE Unidad;
mysql> SHOW TABLES; (se dio acceso a las tablas estudiante y periodoslectivos)

mysql> SELECT * FROM PeriodosLectivos; (no permite visualizar la información)


mysql> SELECT nombre FROM PeriodosLectivos; (solo tiene acceso a nombre)
mysql> SELECT * FROM estudiante;
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA CREACIÓN DE USUARIOS
18
En el Usuario Root realizar lo siguiente;

SHOW GRANTS FOR 'anonimo'@'localhost';

REVOKE update ON Unidad.estudiante FROM anonimo@localhost;

SHOW GRANTS FOR 'anonimo'@'localhost’;

En el Usuario Anonimo realizar lo siguiente;

UPDATE estudiante No puede realizar el cambio porque se le


SET procedencia = "Tiburcio Macías" revocó el permiso.

WHERE idpersona= 34;


Cognitive Cities Management Research Group (CMMA) 11/21/2021
PRÁCTICA CREACIÓN DE USUARIOS
19
En el Usuario Root realizar lo siguiente;

SHOW GRANTS FOR 'anonimo'@'localhost';

REVOKE delete ON Unidad.estudiante FROM anonimo@localhost;

SHOW GRANTS FOR 'anonimo'@'localhost';

REVOKE ALL PRIVILEGES ON Unidad.estudiante from


anonimo@localhost;

SHOW GRANTS FOR 'anonimo'@'localhost';

Cognitive Cities Management Research Group (CMMA) 11/21/2021


PRÁCTICA CREACIÓN DE USUARIOS
20
En el Usuario anonimo realizar lo siguiente;

SHOW TABLES;

SELECT * FROM personas;

SELECT * FROM periodoslectivos;

SELECT nombre FROM periodoslectivos;

Cognitive Cities Management Research Group (CMMA) 11/19/2021


PRÁCTICA CREACIÓN DE USUARIOS
21
En el Usuario root realizar lo siguiente;

REVOKE ALL PRIVILEGES ON Unidad.personas


FROM anonimo@localhost;

REVOKE ALL PRIVILEGES ON Unidad.periodoslectivos


FROM anonimo@localhost;

DROP USER 'anonimo'@'localhost';

GRANT USAGE ON *.* TO nuevousuario@localhost


IDENTIFIED BY 'clave';

SHOW GRANTS FOR 'nuevousuario'@'localhost';


Cognitive Cities Management Research Group (CMMA) 11/19/2021
PROCEDIMIENTOS
ALMACENADOS
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
23 DELIMITER // Ejemplo con IF
CREATE PROCEDURE autos(IN velocidad INT,
IN marca VARCHAR(50)) El siguiente ejercicio
BEGIN deben crear dos tablas:
IF velocidad < 120 THEN Familiares (Id, velocidad,
marca)
INSERT INTO familiares(velocidad, marca)
Deportivos (Id, velocidad,
VALUES (velocidad, marca); marca)
ELSE Las claves primarias son
INSERT INTO deportivos (velocidad, marca) las ID y son auto
VALUES (velocidad, marca); incrementables.
Realizar un procedimiento
END IF; almacenado en MySQL,
END // que guarde los datos de
DELIMITER ; vehículos en la tabla
CALL autos(110, “Mazda”); familiares si su velocidad
es menor que 120 Km/h o
CALL autos(140, “Ferrari”);
en la tabla deportivos en
Cognitive Cities Management Research Group (CMMA)
el caso contrario11/19/2021
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
Realizar un procedimiento almacenado que
24 Ejemplo con CASE de el tipo de medalla que gana un
deportista según el puesto en el que queda.
DROP PROCEDURE pa_tipo_medalla;
DELIMITER //
CREATE PROCEDURE pa_tipo_medalla(IN puesto int, OUT tipo varchar(20))
BEGIN
CASE puesto
WHEN 1 THEN Set tipo=‘Oro‘;
WHEN 2 THEN Set tipo=‘Plata‘;
WHEN 3 THEN Set tipo=‘Bronce‘;
END CASE;
END //
DELIMITER ;
CALL pa_tipo_medalla (1,@tipo);
SELECT @tipo;

Cognitive Cities Management Research Group (CMMA) 11/19/2021


PRÁCTICA PROCEDIMIENTOS ALMACENADOS
25 Ejemplo con CASE Realizar un procedimiento almacenado que
de el saludo dependiendo de la hora actual.
DELIMITER // La función TIME(), en este procedimiento es
CREATE PROCEDURE bienvenida () utilizado para convertir un texto en formato
BEGIN hora.
Declare hora time;
Set hora= CURTIME();
CASE
WHEN hora<time( '11:15:00') && hora > time('1:00:00') THEN
SELECT concat(“Buenos días ”,user(), “ son ”, hora);
WHEN hora< time('18:15:00') && hora > time('11:15:00') THEN
SELECT concat(“Buenas tardes”,user(), “ son ”, hora);
WHEN hora< time('24:00:00') && hora > time('18:15:00') THEN
SELECT concat(“Buenas noches”,user(), “ son ”, hora);
END CASE;
END //
DELIMITER ;
CALL bienvenida();
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
26 Ejemplo con SELECT … INTO Realizar un procedimiento
almacenado que se envíe
el código de la persona y
devuelva sus nombres
DROP PROCEDURE ejemplo_nombres;
completos.
Delimiter //
CREATE PROCEDURE ejemplo_nombres(IN valor INT(6),OUT v_nombres VARCHAR(60))
BEGIN
SELECT CONCAT(nombres,” “,apellidoPaterno,” “, apellidoMaterno)
INTO v_nombres
FROM personas
WHERE IdPersona = valor;
END //
Delimiter ;
CALL ejemplo_nombres(1, @completo);
SELECT @completo;
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
27 Ejemplo con Loop
Realizar un procedimiento
Delimiter //
almacenado utilizando el
CREATE PROCEDURE ejemplo(valor INT) LOOP para contar desde el
BEGIN número enviado hasta 10.
label1: LOOP
SET valor = valor + 1;
SELECT valor;
IF valor <= 10 THEN ITERATE label1;
END IF;
LEAVE label1;
END LOOP label1;
END //
Delimiter ;
CALL ejemplo(6);
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
28 Ejemplo con Repeat
Realizar un procedimiento
Delimiter // almacenado utilizando el
REPEAT para contar desde
CREATE PROCEDURE UsandoRepeat(valor INT)
el 1 hasta el valor ingresado
BEGIN como parámetro.
DECLARE x INT;
SET x = 0;
REPEAT
SET x = x + 1;
UNTIL x > valor
END REPEAT;
SELECT x;
END //
Delimiter ;
CALL UsandoRepeat(1000);
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
29 Ejemplo con While
Realizar un procedimiento
Delimiter // almacenado utilizando el
CREATE PROCEDURE ejemplo3() WHILE para mostrar un
BEGIN saludo 10 veces.
Declare x int default 1;
WHILE x<=10 DO
SELECT "¡Hola mundo!" As nombre,
x As Contador;
set x=x+1;
END WHILE;
END//
Delimiter ;
CALL ejemplo3();

Cognitive Cities Management Research Group (CMMA) 11/19/2021


PRÁCTICA PROCEDIMIENTOS ALMACENADOS
Realizar un procedimiento
30
almacenado que permita
CREATE PROCEDURE AgregaDatosPersonales ( ingresar datos sobre la
tabla “Personas”, se debe
IN ApPat varchar(50),IN ApMat varchar(50), pasar sus datos como
IN Nomb varchar(50),IN Direc varchar(150), argumentos.

IN fono varchar(15), IN sex varchar(1),


IN FechaN Date,IN EstCivil varchar(1))
INSERT INTO personas (ApellidoPaterno, ApellidoMaterno, Nombres,
Direccion, telefono, sexo, FechaNacimiento, EstadoCivil) VALUES
(ApPat,ApMat,Nomb,Direc,fono,sex,FechaN,EstCivil);
Cuando el Procedimiento está conformado por una
sola sentencia, no es necesario colocar BEGIN - END

CALL AgregaDatosPersonales ('Farías','Pincay','Marcos Javier','Playa


Prieta, Calle Principal', '0997123456', 'M', '1998-11-20','U');
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
El siguiente ejemplo crea un procedimiento
31 almacenado que permite ingresar datos
DELIMITER // sobre las tablas “Personas” y “Profesores”,
CREATE PROCEDURE AgregaProfesores ( llamando a otro procedimiento creado
ApPat varchar(50),ApMat varchar(50), previamente:
Nomb varchar(50),Direc varchar(150), fono varchar(15),sex varchar(1),
FechaN Date, EstCivil varchar(1),cargo Varchar(50),
Titulacion Varchar(50), Fechaingreso date)
BEGIN
DECLARE Id INTEGER;
CALL AgregaDatosPersonales(ApPat,ApMat,Nomb,Direc,fono,sex,
FechaN, EstCivil);
SELECT MAX(IdPersona) INTO Id FROM Personas;
INSERT INTO Profesores(IdPersona, cargo, Titulacion, Fechaingreso)
VALUES (Id, cargo, Titulacion,Fechaingreso);
END //
DELIMITER ;
CALL AgregaProfesores ('Mero','Casanova','Boris Mareano','Calderon, diagonal al colegio',
'097654321','M','1999-06-11','C','Profesor','Ingeniero Civil','2009-01-05');
Cognitive Cities Management Research Group (CMMA) 11/19/2021
PRÁCTICA PROCEDIMIENTOS ALMACENADOS
32

Sentencias para mostrar listado de procedimientos


almacenados
mysql>USE mysql;
mysql>SELECT specific_name
Desde la ubicación de FROM proc;
la base de datos o también
principal de MySQL: mysql>SELECT specific_name
FROM proc
WHERE type=’procedure’;

Desde la ubicación de la
base de datos en la que se mysql>SHOW PROCEDURE STATUS;
está trabajando:

Cognitive Cities Management Research Group (CMMA) 11/19/2021


PRÁCTICA PROCEDIMIENTOS ALMACENADOS
33

Sentencias para mostrar el contenido lógico de un


procedimiento
mysql> USE mysql;
Desde la ubicación de
mysql> SELECT specific_name, body
la base de datos
FROM proc
principal de MySQL:
WHERE specific_name='nombre_procedimiento';

Desde la ubicación de la
base de datos en la que se mysql> SHOW CREATE PROCEDURE nombre_procedimiento;
está trabajando:

11/19/2021

Cognitive Cities Management Research Group (CMMA)


PRÁCTICA PROCEDIMIENTOS ALMACENADOS
34 Ejemplos
Seleccionar los
DROP PROCEDURE cumpleañeros; cumpleañeros del mes
Delimiter //
CREATE PROCEDURE Cumpleañeros ()
BEGIN
SELECT distinct apellidopaterno, apellidomaterno, nombres
FROM Personas
WHERE date_format(fechanacimiento,"%M") =
date_format(current_date,"%M");
END//
Delimiter ;
Cognitive Cities Management Research Group (CMMA) 11/19/2021

CALL ejemplo3();

También podría gustarte