Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

TALLER DE BASE DE DATOS

No description
by

Renato Llanos

on 29 April 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of TALLER DE BASE DE DATOS

End
¿De qué se trata la asignatura?
Prueba de Diagnóstico
Objetivo:
TALLER DE BASE DE DATOS
CIN-015
Profesor: Renato Llanos Soto
Ingeniero Civil Informático
En el Taller de Base de Datos profundizaremos los conocimientos aprendidos en el curso de Base de Datos.
¿Que tópicos vamos a ver en la asignatura?
Temática del Taller
Modalidad Calificaciones
Solemnes ( 40%)
INSERT | INSERTAR
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.
Conceptos SQL
Data Definition Language, se encarga de la modificación de la estructura de los objetos de la base de datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y TRUNCATE.
SELECT | SELECCIONAR
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.
En relación al diagrama de la base sakila, cree los siguientes procedimientos almacenados y funciones
LA SENTENCIA CALL
El comando CALL invoca un procedimiento definido préviamente con CREATE PROCEDURE.
CREATE PROCEDURE
Para crear un procedimiento almacenado debemos utilizar el comando CREATE PROCEDURE de manera que su estructura general sea:
Ejemplos AND y OR
P.A. y Funciones
Los p.a. y funciones se crean con los comandos CREATE PROCEDURE y CREATE FUNCTION.
Procedimientos Almacenados
Conjunto de comandos SQL que pueden almacenarse en el servidor.
OPERADORES ÚTILES
Algunos de los operadores que nos permiten construir expresiones booleanas son:
UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.
Crear Base Datos
LA SENTENCIA DECLARE
Funciones Predefinidas
SUM, COUNT, AVG
GROUP BY
select SEXO , count(*) as EMPLEADOS
from EMPLEADOS
group by SEXO;
Operadores AND y OR
Los operadores AND y OR se utilizan para filtrar resultados con 2 condiciones.

El operador AND mostrará los resultados cuando se cumplan las 2 condiciones.

Condición1 AND condición2

El operador OR mostrará los resultados cuando se cumpla alguna de las 2 condiciones.

Condicion1 OR condicion2
Datos útiles
Un sistema de base de datos suele contener varias bases de datos.
Cada base de datos suele contener varias tablas.
Las tablas almacenan los datos organizados por filas.
Cada fila contiene varios campos.
Cada campo tiene una serie de propiedades, como por ejemplo, el nombre del campo, su longitud, tipo de dato que se va a almacenar, etc.
Las sentencias SQL no son sensibles a mayúsculas y minúsculas, es decir, 'SELECT' y 'select' son dos palabras iguales para SQL.
Algunos sistemas de bases de datos necesitan un punto y coma después de cada sentencia SQL para ejecutarse correctamente.
SENTENCIA LOOP
LOOP implementa un constructor de bucle simple que permite ejecución repetida de comandos particulares. El comando dentro del bucle se repite hasta que acaba el bucle, usualmente con un comando LEAVE .
SENTENCIA CASE
El comando CASE para procedimientos almacenados implementa un constructor condicional complejo. Si una search_condition se evalúa a cierto, el comando SQL correspondiente se ejecuta. Si no coincide ninguna condición de búsqueda, el comando en la cláusula ELSE se ejecuta.
SENTENCIA IF
IF implementa un constructor condicional básico. Si search_condition se evalúa a cierto, el comando SQL correspondiente listado se ejecuta. Si no coincide ninguna search_condition se ejecuta el comando listado en la cláusula ELSE.
LA SENTENCIA SELECT ... INTO
Esta sintaxis SELECT almacena columnas seleccionadas directamente en variables. Por lo tanto, sólo un registro puede retornar.
Cosas útiles
En los procedimientos como en las funciones podemos fijar un delimitador, el delimitador por defecto en SQL es ; pero en este caso podemos definirlo nosotros.
SENTENCIA REPEAT
El comando/s dentro de un comando REPEAT se repite hasta que la condición search_condition es cierta.
SENTENCIA WHILE
El comando/s dentro de un comando WHILE se repite mientras la condición search_condition es cierta.
Ejemplos en Pizarra
DEFINICIÓN TRIGGER
Conexión a la BD
Para conectarse a la base de datos por medio de mysqli:
Identificadores NEW y OLD en Triggers
Si queremos relacionar el trigger con columnas especificas de una tabla debemos usar los identificadores OLD y NEW.

OLD indica el valor antiguo de la columna y NEW el valor nuevo que pudiese tomar. Por ejemplo: OLD.idproducto ó NEW.idproducto.

Si usamos la sentencia UPDATE podremos referirnos a un valor OLD y NEW, ya que modificaremos registros existentes por nuevos valores. En cambio si usamos INSERT solo usaremos NEW, ya que su naturaleza es únicamente de insertar nuevos valores a las columnas. Y si usamos DELETE usaremos OLD debido a que borraremos valores que existen con anterioridad.
MYSQLi
La extensión mysqli (mysql improved) permite acceder a la funcionalidad proporcionada por MySQL 4.1 y posterior (incluida versión 5 o superior)
SENTENCIA ITERATE
ITERATE sólo puede aparecer en comandos LOOP, REPEAT, y WHILE . ITERATE significa “vuelve a hacer el bucle.”
Crear en el servidor
Ingresar un registro y mostrar id
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mi_base";

// Crear conexión
$conn = new mysqli($servername, $username, $password, $mi_base);

// Verificar la conexión
if ($conn->connect_error) {
die("Falló conexión: " . $conn->connect_error);
}

// Crear la tabla o sentencia SQL a ejecutar
$sql = "CREATE TABLE alumno (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(30) NOT NULL,
apellido VARCHAR(30) NOT NULL,
email VARCHAR(50),
fecha_registro_curso TIMESTAMP
)";

if ($conn->query($sql) === TRUE)
echo "Tabla creada correctamente";
else
echo "Error al crear la tabla: " . $conn->error;

$conn->close();
?>
Mostrar en una tabla
if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Nombre</th></tr>";

while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["nombre"]." ".$row["apellido"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
}
Insertar varios registros
$sql = "INSERT INTO alumno (nombre,apellido,email)
VALUES ('John', 'Doe', 'john@ust.cl');";
$sql .= "INSERT INTO alumno (nombre,apellido,email)
VALUES ('Mary', 'Moe', 'mary@ust.cl');";
$sql .= "INSERT INTO alumno (nombre,apellido,email)
VALUES ('Julie', 'Dooley', 'julie@ust.cl')";

if ($conn->multi_query($sql) === TRUE)
echo "Creado correctamente";
else
echo "Error: " . $sql . "<br>" . $conn->error;

Seleccionar Datos de la Base
Para una consulta como: SELECT * FROM table_name;
$stmt->bind_param("sss", $nombre, $apellido, $email);
$stmt = $conn->prepare("INSERT INTO alumno (nombre,apellido, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $nombre, $apellido, $email);

// setear parámetros y ejecutar
$firstname = "Juan";
$lastname = "Perez";
$email = "juan@ust.cl";
$stmt->execute();

$firstname = "Maria";
$lastname = "Aguilera";
$email = "maria@ust.cl";
$stmt->execute();

$firstname = "Andrés";
$lastname = "Dooley";
$email = "andres@ust.cl";

$stmt->execute();
Declaraciones Preparadas
Una declaración preparada es una característica utilizada para ejecutar las mismas (o similares) sentencias SQL repetidamente con alta eficiencia.
Operaciones Lógicas
$a == $b Igual TRUE si $a es igual a $b
$a === $b Idéntico TRUE si $a es igual a $b, y son del mismo tipo.
$a != $b Diferente TRUE si $a no es igual a $b
$a <> $b Diferente TRUE si $a no es igual a $b
$a !== $b No idéntico TRUE si $a no es igual a $b, o si no son del mismo tipo.
$a < $b Menor que TRUE si $a es estrictamente menor que $b.
$a > $b Mayor que TRUE si $a es estrictamente mayor que $b.
$a <= $b Menor o igual que TRUE si $a es menor o igual que $b.
$a >= $b Mayor o igual que TRUE si $a es mayor o igual que $b.
$a <=> $b Operador "Nave espacial" 0 si $a y $b son iguales, 1 si $a es mayor que $b,
Solemne Unidades 1,2,3,4
Trabajos Taller (60%)
Mi primera App
Aplicación MVC
Profundizaremos en el lenguaje SQL y nos apoyaremos en una herramienta que permite modelar diagramas de entidad-relación.
Desarrollaremos aplicaciones en lenguaje PHP con conexión a MySQL, también nos introduciremos a la reportabilidad.
Conoceremos las funciones de un DBA y la optimización de una Base de Datos.
Instrucciones:
Conocer el nivel de conocimientos generales del curso en relación a los tópicos que se abordaran en el taller.
Conteste a conciencia la prueba, no tiene calificación, pero es muy importante como indicador.
Lenguaje de definición de datos (DDL)
Structured Query Language
Lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas.
Data Manipulation Language, permite a los usuarios llevar a cabo las tareas de consulta o manipulación de los datos.
Lenguaje de manipulación de datos DML(Data Manipulation Language)
SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas
FROM Coches
ORDER BY marca,modelo;
SQL nos permite calcular ciertas operaciones matemáticas tanto en la clausula SELECT, para obtener resultados, como en la cláusula WHERE, para establecer condiciones:
select 3 + 4
select NOMBRE , APELLIDOS
from EMPLEADOS
where SALARIO > 1300 + 50

o
Alias
select C.CAMISA , P.PANTALON , C.PESO_GR + P.PESO_GR as PESO_MUDA
from CAMISAS as C, PANTALONES as P;
INSERT INTO agenda_telefonica (nombre, numero)
VALUES ('Roberto Jeldrez', 4886850);
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550');
SELECT [name], [phoneNumber]
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe');

UPDATE My_table SET field1 = 'updated value asd' WHERE field2 = 'N';
DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.
DELETE FROM My_table WHERE field2 = 'N';
• > : "A > B" devuelve cierto si A es estrictamente mayor que B, de lo contrario devuelve falso.
• < : "A < B" devuelve cierto si A es estrictamente menor que B, de lo contrario devuelve falso.
• = : "A = B" devuelve cierto si A es igual a B, de lo contrario devuelve falso.
• >= : "A >= B" devuelve cierto si A es mayor o igual a B, de lo contrario devuelve falso.
• <= : "A <= B" devuelve cierto si A es menor o igual a B, de lo contrario devuelve falso.
• != : "A != B" devuelve cierto si A es distinto a B, de lo contrario devuelve falso.
Operadores Lógicos
AND : "A and B" devuelve cierto si A y B valen cierto, y falso en cualquier otro caso.
OR : "A or B" devuelve cierto si A o B valen cierto, y falso únicamente cuando tanto A como B valen falso.
NOT : "not A" devuelve falso si A vale cierto, y cierto si A vale falso.
select sum(SALARIO)
from EMPLEADOS;
select count(*)
from EMPLEADOS;
o combinar:
select sum(SALARIO) / count(*) as MEDIA_SALARIOS
from EMPLEADOS;
equivale a:
select avg(SALARIO) as MEDIA_SALARIOS
from EMPLEADOS;
También podemos llamar a una subconsulta y aplicar funciones predefinidas:
select NOMBRE , APELLIDOS , SALARIO / ( select sum(SALARIO) from EMPLEADOS) * 100 as PORCENTAJE from EMPLEADOS;
select ESPECIE , SEXO , count(*) as EJEMPLARES_VIGENTES
from MASCOTAS
where ESTADO = 'A'
group by ESPECIE , SEXO;
La palabra clave DISTINCT

select distinct SEXO
from EMPLEADOS
select NOMBRE,APELLIDOS,SALARIO
from EMPLEADOS
order by SALARIO;
select *
from MASCOTAS
where ESPECIE = 'P'
order by ESTADO desc, NOMBRE asc;
ORDER BY
Particularmente útiles cuando:
Múltiples aplicaciones clientes se escriben en diferentes lenguajes o funcionan en distintas plataformas, pero necesitan realizar la misma operación en la BD.
Cuando la seguridad es muy importante. Los usuarios no obtienen acceso directo a tablas de la base de datos, solo pueden ejecutar algunos p.a.
Se desee mejorar el rendimiento ya que se necesita enviar menos entre el servidor y el cliente.
Un PROCEDURE se invoca con el comando CALL y solo puede pasar valores usando variables de salida.
Una función se llama con un comando SELECT y puede retornar un valor.
Cuando se invoca a una rutina se realiza implícitamente USE nombre_BD
Cuando se borra una BD, todos los p.a. asociados a ella también se borran
CREATE FUNCTION
VENTAJAS DE LOS PROCEDIMIENTOS ALMACENADOS
DROP PROCEDURE - FUNCTION
LA SENTENCIA COMPUESTA BEGIN ... END
LA SENTENCIA SET
CREATE PROCEDURE nombre(parámetro)
[características] _rutinas
Parámetros: Puede haber más de un parámetro (separados por comas) o puede no haber ninguno.
Tienen la estructura: modo nombre tipo
Donde Modo puede ser del tipo IN, OUT, INOUT

IN: son los parámetros que el procedimiento recibirá.
OUT: son los parámetros que el procedimiento podrá modificar.
INOUT: mezcla de los anteriores.
nombre: cualquier nombre, como buena práctica anteponer pa_
tipo: cualquier tipo de dato SQL
La diferencia entre un procedimiento y una función es que la función devuelve valores.
Utilizar la clausula RETURNS es obligatorio al momento de definir una función y sirve para especificar el tipo de dato que será devuelto.
CREATE FUNCTION nombre(parámetro)
RETURNS tipo
[características] definición
Los parámetros, características y definición son equivalentes a las de un p.a.
Para llamar a una función lo hacemos invocando su nombre. Desde una función podemos invocar a su vez a otras funciones o procedimientos.
delimiter //
Cuando un p.a. o una función tienen solo una rutina, no es necesario agregar delimiter, BEGIN ni END
Para ingresar la fecha actual dentro de una procedimiento/función utilizamos curdate();
Seguridad:
Ocultan el nombre de las tablas a usuarios que no tengan los privilegios para manipular datos. Simplemente llaman los procedimientos sin conocer la estructura de la base de datos.

Estándares de código:
Usar el mismo procedimiento permite crear sinergia en las fases de construcción. Si cada programador crea su propio procedimiento para realizar la misma tarea, entonces podrían existir problemas de integridad y perdida de tiempo

Velocidad:
Es mucho mas fácil ejecutar un programa ya definido mediante ciertos parámetros, que reescribir de nuevo las instrucciones.
Permite borrar un procedimiento almacenado
DROP PROCEDURE IF EXISTS nombre_pa;
SHOW CREATE PROCEDURE nombre_pa \G;
OBTENER CÓDIGO DE UN P.A.
SHOW PROCEDURE STATUSLIKE ‘nombre_pa’\ G;
DETALLE DE UN P.A.
SHOW PROCEDURE STATUS\G;
CALL nombre_pa();
Se utiliza para escribir sentencias que pueden aparecer en el interior de procedimientos almacenados y triggers. Puede contener múltiples sentencias, encerradas por las palabras BEGIN y END.
DECLARE puede usarse sólo dentro de comandos compuestos BEGIN ... END y debe ser antes de cualquier otro comando.
DECLARE var_name[,...] type [DEFAULT value]
SET var_name = expr [, var_name = expr] ...
SELECT col_name[,...] INTO var_name[,...] table_expr
Los constructores IF, CASE, LOOP, WHILE, ITERATE, y LEAVE pueden contener un comando simple, o un bloque de comandos usando el comando compuesto BEGIN ... END. Los constructores pueden estar anidados.
Los bucles FOR no están soportados.
CONSTRUCTORES DE CONTROL DE FLUJO
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
[begin_label:] LOOP
statement_list
END LOOP [end_label]
Este comando se usa para abandonar cualquier control de flujo etiquetado. Puede usarse con BEGIN ... END o bucles.
SENTENCIA LEAVE
LEAVE label
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
SET x = p1;
END
CREATE PROCEDURE dorepeat(p1 INT)
-> BEGIN
-> SET x = 0;
-> REPEAT SET x = x + 1; UNTIL x > p1 END REPEAT;
-> END
CREATE PROCEDURE dowhile()
BEGIN
DECLARE v1 INT DEFAULT 5;

WHILE v1 > 0 DO
...
SET v1 = v1 - 1;
END WHILE;
END
Una variable de salida OUT se ingresa anteponiendo una @
Taller en clases
obtener los lenguajes
obtener los lenguajes que empiecen con la letra e
contar la cantidad de ciudades
listar la cuidad y el continente al cual pertenecen las direcciones existentes en la base
ingresar un nuevo lenguaje
listar los films y a que categoría pertenecen
(tabla language)
(tabla language)
(tabla language)
(tabla city)
(tabla city)
(tabla film)
Ejemplos en Pizarra
TRIGGERS
Un Trigger es código SQL que se ejecuta justo antes o justo después de una instrucción INSERT, UPDATE o DELETE, osea creado para ejecutarse automáticamente cuando ocurra un evento en nuestra base de datos. Dichos eventos son generados por los comandos INSERT, UPDATE y DELETE,
Esto significa que invocaremos nuestros Triggers para ejecutar un bloque de instrucciones que proteja, restrinja o preparen la información de nuestras tablas
– Un trigger tiene muchas aplicaciones entre las que cabe destacar:
• Forzar reglas de integridad que son difíciles de definir.
• Realizar cambios en la base de datos de forma transparente al usuario.
• Sincronización entre tablas generando automáticamente valores de columnas derivadas en base a un valor proporcionado por una sentencia INSERT o UPDATE.
CREATE [DEFINER={usuario|CURRENT_USER}]
TRIGGER nombre_del_trigger {BEFORE|AFTER} {UPDATE|INSERT|DELETE}
ON nombre_de_la_tabla
FOR EACH ROW
<bloque_de_instrucciones>
BEFORE|AFTER: Especifica si el Trigger se ejecuta antes o después del evento DML.

UPDATE|INSERT|DELETE: Sentencia usarás para que se ejecute el Trigger.

ON nombre_de_la_tabla: Nombre de la tabla asociada.

FOR EACH ROW: Establece que el Trigger se ejecute por cada fila en la tabla asociada.

<bloque_de_instrucciones>: Define el bloque de sentencias que el Trigger ejecutará al ser invocado.
APLICACIONES TRIGGERS
Contiene numerosos beneficios, siendo estas las mejoras principales respecto a la extensión mysql:

Interfaz orientada a objetos
Mejoradas las opciones de depuración
Mas Soporte en general

La extensión mysqli está desarrollada mediante el framework de extensiones de PHP. Su código fuente se ubica en el directorio ext/mysqli.
<?php
$servidor = "localhost";
$usuario = "username";
$password = "password";
$base_datos = "database"

// Create connection
$conn = new mysqli($servidor, $usuario, $password,$base_datos);

// Check connection
if ($conn->connect_error) {
die("Falló conexión: " . $conn->connect_error);
}
?>
$conn->close();
Para cerrar la conexión utilizamos
$sql = "CREATE DATABASE mi_base";

if ($conn->query($sql) === TRUE)
echo "Base de datos creada correctamente";
else
echo "Error al crear la base de datos: " . $conn->error;
Una base de datos
de la misma forma podemos crear una tabla
$sql = "CREATE TABLE alumnos(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(30) NOT NULL,
apellido VARCHAR(30) NOT NULL,
email VARCHAR(50),
fecha_registro_curso TIMESTAMP)";

if ($conn->query($sql) === TRUE)
echo "Tabla creada correctamente";
else
echo "Error al crear la tabla: " . $conn->error;
$sql = "INSERT INTO alumno (nombre,apellido,email)
VALUES ('Juan, 'Perez', 'juan@ust.cl')";

if (mysqli_query($conn, $sql))
{
$last_id = mysqli_insert_id($conn);
echo "Nuevo registro creado correctamente. El registro tiene el siguiente id: " . $last_id;
}
else
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
Se crea una plantilla de instrucción SQL y se envía a la base de datos. Algunos valores se dejan sin especificar, llamado parámetros (con la etiqueta "?").

Ejemplo: INSERT INTO alumno VALUES (?,?,?)
Como principal ventaja reduce el tiempo de análisis como la preparación de la consulta se realiza sólo una vez (aunque la sentencia se ejecuta varias veces).
Los argumentos deben ser uno de estos cuatro tipos:

i - integer
d - double
s - string
b - BLOB
Los BLOB (Binary Large Objects, objetos binarios grandes) son elementos utilizados en las bases de datos para almacenar datos de gran tamaño que cambian de forma dinámica.
Generalmente son imágenes, archivos de sonido y otros objetos multimedia; a veces se almacenan como BLOB código de binarios.
$sql = "SELECT * FROM alumno";
$result = $conn->query($sql);

if ($result->num_rows > 0)
{
// salida de datos para cada registro
while($row = $result->fetch_assoc())
echo "id: " . $row["id"]. " - Nombre: " . $row["nombre"]. " " . $row["apellido"]. "<br>";
else
echo "0 results";
}
PHP+MySQL
SQL
Atributos de un Procedimiento
SQL SECURITY {DEFINER|INVOKER}: Establece el nivel de seguridad de invocación de un procedimiento. Si usas DEFINER el procedimiento sera ejecutado con los permisos del usuario que lo creó, y si usas INVOKER será ejecutado con los permisos del usuario que lo esta invocando.
COMMENT cadena: añade una descripción al procedimiento con respecto a las instrucciones que ejecuta. Por ejemplo,“Este procedimiento da de baja a todos los clientes que hace 3 meses no compran a la compañía”.
[NOT] DETERMINISTIC: Especifica si el procedimiento devolverá siempre el mismo resultado al ingresar los mismo parámetros. O si devolverá distintos resultados al ingresar los mismo resultados.
DELIMITER //

CREATE PROCEDURE numeros_1_hasta_n (IN n INT)
BEGIN
DECLARE contador INT DEFAULT 1;
WHILE contador<=n DO
SELECT contador;
SET contador = contador + 1 ;
END WHILE;
END//

DELIMITER ;
Ejemplo de While
ALTER PROCEDURE nombre
[SQL SECURITY {DEFINER|INVOKER}]
[COMMENT descripción]
Para modificar un procedimiento en MySQL usaremos la sentencia ALTER PROCEDURE. Esta modificación permite cambiar el nivel de seguridad y la descripción del procedimiento
DELIMITER //
CREATE PROCEDURE insertar(id_cliente INT, nombre_cliente VARCHAR(100), apellido_cliente VARCHAR(100))
COMMENT 'Procedimiento que inserta un cliente a la base de datos'
BEGIN
IF NOT EXISTS ( SELECT C.ID
FROM CLIENTE AS C
WHERE C.ID = id_cliente) THEN
INSERT INTO CLIENTE(ID, NOMBRE, APELLIDO)
VALUES ( id_cliente,nombre_cliente,apellido_cliente);
ELSE
SELECT 'Este cliente ya existe en la base de datos!';
END IF;
END//
DELIMITER ;
ALTER PROCEDURE insertar_cliente
COMMENT 'Insertar Cliente'
Ahora le cambiaremos la descripción mediante ALTER PROCEDURE
CASE
WHEN totalVentas BETWEEN 2000 AND 3000 THEN
UPDATE VENDEDOR
SET SALARIO = SALARIO + totalVentas * 0.02;
WHEN totalVentas BETWEEN 2001 AND 3000 THEN
UPDATE VENDEDOR
SET SALARIO = SALARIO + totalVentas * 0.03;
WHEN totalVentas >=3001 THEN
UPDATE VENDEDOR
SET SALARIO = SALARIO + totalVentas * 0.07;
END CASE;
IF ACUMULADO > 3200 THEN
UPDATE CLIENTE SET PRIORIDAD = ‘A’;
ELSEIF ACUMULADO BETWEEN 1600
AND 3200 THEN
UPDATE CLIENTE SET PRIORIDAD = ‘M’;
ELSE
UPDATE CLIENTE SET PRIORIDAD = ‘B’;
END IF;
Imprimir el valor de una variable
SELECT <variable>;
DELIMITER $$
CREATE PROCEDURE simple_loop ( )
BEGIN
DECLARE counter BIGINT DEFAULT 0;
my_loop: LOOP
SET counter=counter+1;
IF counter=10 THEN
LEAVE my_loop;
END IF;
SELECT counter;
END LOOP my_loop;
END$$
DELIMITER ;
Full transcript