Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tecnolgico de
Estudios Superiores
de Chimalhuacn
Ingeniera en sistemas computacionales
TESCHI
NDICE
Contenido
NDICE.................................................................................................................................................. 1
Qu es una Base de datos? - Definicin de Base de datos................................................................ 3
Tipos de base de datos ........................................................................................................................ 3
UNIDAD 1 ............................................................................................................................................ 5
Sistema Gestor de Base de Datos ....................................................................................................... 5
Ejemplos de SGBD ............................................................................................................................... 5
MySQL ............................................................................................................................................. 5
Microsoft SQL Server....................................................................................................................... 6
PostgreSQL ...................................................................................................................................... 6
Ventajas de MySQL ............................................................................................................................. 7
REQUERIMIENTOS (en Windows) ....................................................................................................... 7
Instalando MySQL ............................................................................................................................... 8
Instalando MySQL en Linux (Ubuntu) ............................................................................................... 15
Unidad 2 ............................................................................................................................................ 18
Realice los diagramas que su profesor le indique. ............................................................................ 18
ENUNCIADO DEL EJERCICIO 1........................................................................................................ 18
ENUNCIADO DEL EJERCICIO 2........................................................................................................ 18
ENUNCIADO DEL EJERCICIO 3........................................................................................................ 19
ENUNCIADO DEL EJERCICIO 4........................................................................................................ 19
ENUNCIADO DEL EJERCICIO 5........................................................................................................ 20
ENUNCIADO DEL EJERCICIO 6........................................................................................................ 20
De las siguientes facturas, elabore los diagramas que le indique su profesor. ................................ 21
UNIDAD 3 .......................................................................................................................................... 24
Lenguaje de manipulacin de datos ................................................................................................. 24
Lenguaje SQL ..................................................................................................................................... 24
Crear bases de datos ......................................................................................................................... 25
Ejemplos de SGBD
MySQL
PostgreSQL
Ventajas de MySQL
MySQL software es Open Source
Velocidad al realizar las operaciones, lo que le hace uno de los gestores
con mejor rendimiento.
Bajo costo en requerimientos para la elaboracin de bases de datos, ya que
debido a su bajo consumo puede ser ejecutado en una mquina con
escasos recursos sin ningn problema.
Soporta gran variedad de Sistemas Operativos
Baja probabilidad de corromper datos, incluso si los errores no se producen
en el propio gestor, sino en el sistema en el que est.
Su conectividad, velocidad, y seguridad hacen de MySQL Server altamente
apropiado para acceder bases de datos en Internet
El software MySQL usa la licencia GPL
Debido a los anteriores puntos este manual se centrara en la utilizacin del SGBD
MySQL.
Instalacin en proceso
Hay que esperar unos momentos para que se instale (hay que estar conectado a
internet), despus de unos instantes podr acceder a mysql desde la misma
terminal tecleando el siguiente comando: Mysql u root p (enter) y el password
que agrego en el paso anterior, debera de mostrar una interfaz parecida a la
siguiente:
Nota: Se utiliz Ubuntu por ser uno de los sistemas Linux ms populares.
Una vez instalado (en Windows) se crea el siguiente rbol de directorios:
Docs Documentacin
lib Bibliotecas
Directorio / Contenido
/usr/bin Programas cliente y scripts
/usr/share/doc/packages Documentacin
/usr/lib/mysql Bibliotecas
Una empresa vende productos a varios clientes. Se necesita conocer los datos
personales de los clientes (nombre, apellidos, dni, direccin y fecha de
nacimiento). Cada producto tiene un nombre y un cdigo, as como un precio
unitario. Un cliente puede comprar varios productos a la empresa, y un mismo
producto puede ser comprado por varios clientes.
Los productos son suministrados por diferentes proveedores. Se debe tener en
cuenta que un producto slo puede ser suministrado por un proveedor, y que un
proveedor puede suministrar diferentes productos. De cada proveedor se desea
conocer el NIF, nombre y direccin
Lenguaje SQL
Entre en la carpeta de MySQL que se creo en su ordenador al instalarlo y busque
la carpeta bin, copie la direccin y abra una consola de comandos, teclee la cd
y pegue la direccin de la carpeta bin que copio anteriormente. Una vez
realizado lo anterior teclee el siguiente comando para acceder a la consola de
MySQL:mysql -h localhost -u root -p le pedir el password que usted haya
definido al momento de instalarlo. Si todo es correcto estar en la consola de
MySQL y vera una pantalla parecida a la siguiente:
Una vez que las tablas ya fueron creadas y fueron definidos los tipos de datos y
las relaciones procedemos a llenar las tablas con los datos que se muestran en las
imgenes anteriores:
NOTA: Para mayor referencia con respecto a los tipos de datos y atributos usados
en MySQL consultar los apndices A y B respectivamente.
En un principio verificaremos los tipos de datos de cada tabla con el comando
DESCRIBE, introducimos los siguientes comandos:
mysql> show tables;
mysql> DESCRIBE clientes; DESCRIBE productos; DESCRIBE venta;
El resultado de esta consulta es el siguiente:
COMANDO DESCRIPCIN
CREATE Utilizado para crear nuevas tablas, procedimientos e ndices.
DROP Empleado para eliminar tablas, procedimientos e ndices
ALTER Utilizado para modificar las tablas agregando campos o cambiando
la definicin de los campos.
SELECT Utilizado para consultar registros de la base de datos que satisfagan
un criterio determinado.
INSERT Utilizado para cargar lotes de datos en la base de datos en una
nica operacin.
DELETE Utilizado para eliminar registros de una tabla de una base de datos.
UPDATE Utilizado para modificar los valores de los campos y registros
especificados.
Para entender este tipo de consultas se requiere que conozca los diferentes tipos
de operadores que maneja MySQL per este motivo se ha anexado una tabla que
contiene estos operadores en el apndice C el cual puede consultar.
Ahora imagine que desea conocer que productos compr el cliente Paco, del cual
sabe que su identificador es 2. La sentencia SQL sera as.
mysql> SELECT venta.id_producto
-> FROM clientes, venta
-> WHERE clientes.id_cliente=venta.id_cliente
-> AND
-> (venta.id_cliente=2 AND clientes.nombre='Paco');
Tal pareciera que a medida que se hacen complejas las consultas, los resultados
reducen su tamao y esto es en parte real ya que los datos son filtrados y tratados
para mostrar informacin ms especfica.
Analicemos la consulta anterior tal como lo hemos estado haciendo, paso por
paso.
Ya que Cantidad y Total no existen como tal en las tablas hay que
renombrar los resultados con estos nombres, para ello hacemos uso de
AS.
Ahora suponga que quiere saber qu cliente no compro caf (identificador 10004
del caf), esto puede parecer sencillo pero para saber que cliente es, primero
requerimos saber que clientes si compraron caf, por tanto requerimos de dos
consultas una que indique quien si compro caf y otra que indique de los clientes
existentes quien es el que no lo compro.
Nota: Usamos DISTINCT ya que es posible que un mismo cliente pueda haber
comprado ms de un caf, en tal caso su nombre aparecera ms de una vez
porque esta base de datos no est diseada para agregar una cantidad
determinada del mismo producto y ya que es el mismo nombre no lo necesitamos
duplicado, el DISTINCT quitar los datos duplicados y solo lo mostrara una sola
vez.
Ahora ya solo hay que combinar ambas consultas para conocer que cliente no
compra caf. La consulta quedara de la siguiente manera.
Es muy importante (para este caso en particular) la parte se la instruccin que dice
clientes.nombre NOT IN ya que esta evala cuales elementos de la primera
consulta no se encuentra en la segunda, resolviendo as el problema de que
cliente no compra caf.
Ahora si lo que queremos es borrar toda una tabla, usamos DROP cuya sintaxis
es:
Tal como lo dijimos ya fue borrada la tabla venta, ahora ya que nada relaciona a la
tabla productos con la tabla clientes, podemos decir que la base de datos ya no es
til as que la tenemos que eliminar; para eliminar la base de datos completa de
nueva cuente recurrimos al comando DROP con la siguiente sintaxis.
Es posible crear en MySQL usuarios y restringir las libertades que cada uno tenga
con respecto a las bases de datos existente; por ejemplo se pueden crear usuarios
que solo puedan usar los comandos SELECT para obtener informacin de la base
de datos o crear otros que se encarguen de borrar o actualizar los registros.
En una escuela se tienen alumnos y profesores, se tiene una tabla con el nombre
de los alumnos, su matrcula de alumno y su calificacin final, y se tiene otra con
la clave del profesor y su nombre. Puede parecer que una base de datos para una
escuela tendra que ser ms compleja y de hecho lo es, pero como ya se dijo lo
que interesa en este captulo es la seguridad y la creacin de usuarios no la
organizacin (la cual se vio en captulos anteriores).
Lo que se quiere en esta base de datos es crear tres usuarios los cuales sern
Padres, Director y Profesor, cada uno tendr una funcin especfica dentro de la
base de datos y es por este motivo que yo usaremos el usuario root para la
administracin de la base de datos. Cada usuario tendr funciones especficas y
1.- Los padres de los alumnos puedan ver las calificaciones de sus hijos, mas sin
en cambio los padres no tienen permiso de modificar nada y tampoco pueden ver
la informacin de los profesores.
2.- El director puede visualizar tanto la informacin de los alumnos como la de los
profesores y puede en caso de ser necesario modificar la informacin de los
profesores.
Como se puede dar cuenta cada usuario tiene un papel especfico y ciertas
limitantes de acuerdo a su rol. Por otra parte la base de datos que se especifica en
este ejercicio es la siguiente:
ALUMNO PROFESOR
Como primer paso creamos una base de datos llamada escuela_usuarios siendo
el usuario root, una vez creada, construimos dos tablas Alumno y Profesor, como
se muestran en las imgenes de arriba.
Ya que el usuario root tiene todos los privilegios sobre todas las bases de datos
es este usuario el que utilizaremos para crear a los nuevos usuarios y otorgar los
privilegios pertinentes a cada uno de ellos.
Primero crearemos al usuario Padre que podr solo consultar la informacin de
los alumnos y no podr modificar absolutamente nada y de la misma forma que en
los ejercicios anteriores todo lo haremos por pasos y mostrando los resultados de
las consultas.
1.- Primero accedemos a la consola de MySQL como root con el comando que
ya conocemos: mysql -h localhost -u root -p cuando veamos el Shell de mysql>
creamos la base de datos como se muestra en las imgenes anteriores.
El motivo por el que existen varios usuarios root es porque estn definidos para
diferentes mbitos, El localhost, remoto y el definido en el sistema, lo que es
de nuestro inters en este caso, es que solo est definido el usuario root y
ningn otro ms.
4.- Definamos el usuario Padre, que visualizara datos de los alumnos y nada ms.
Utilizando la sentencia CREATE crearemos a este nuevo usuario y le otorgaremos
los permisos correspondientes, para ello desde la consola de MSQL siendo el
usuario root tecleamos lo siguiente.
mysql> CREATE USER 'Padre'@'localhost'
-> IDENTIFIED BY 'qazwsx';
6.- Creemos los otros dos usuarios, Profesor con privilegios de visualizar ambas
tablas y poder modificar la de los alumnos y Director con privilegios de visualizar
ambas tablas y poder modificar la de los profesores.
Como puede observar ya estamos dentro de MySQL como el usuario Padre, que
si recordamos el solo tiene privilegios de visualizacin para la tabla alumno
solamente.
Hasta aqu, todo normal sin ningn problema, pero que pasa si el usuario padre
quiere ir ms all de sus privilegios, como por ejemplo ver la lista de profesores o
querer cambiar la calificacin de algn alumno.
Como puede ver ya tiene todos los privilegios, pero que pasa si por el contrario
queremos quitrselos, pues bien no existe problema alguno. Para quitar los
privilegios utilizamos la siguiente instruccin.
mysql> REVOKE ALL ON escuela_usuarios.* FROM 'Profesor'@'localhost';
Tenemos que especificar el usuario.
Tenemos que especificar el mbito.
Se especifica el privilegio que se revocara (en este caso todos (ALL)).
Base de datos y tablas (BD.*).
Los clientes registrados compran uno o varios libros, lo que se desea es guardar
en gasto el total que haya gastado el cliente independientemente de los libros
comprados y de la cantidad de los mismos, solo se quiere l total de todo lo que el
clienta haya gastado.
Se agrega a continuacin el cdigo para la creacin de la base de datos anterior,
ya teniendo en cuenta lo expuesto en el principio del captulo.
CREATE DATABASE libreria;
USE libreria;
1.- Primero tenemos que conocer las cantidades de libros que determinado cliente
adquiri, para ello escribimos la siguiente consulta (para este ejemplo
trabajaremos por el momento solo con el cliente 4).
Esto indica que compro tres libros de cierto ejemplar y ms de otro ejemplar.
2.- Ahora busquemos los precios de cada libro que compro el cliente 4.
3.- Los valores anteriores los podemos guardar usando variables en MySQL, lo
que cambiara la primer instruccin a la siguiente forma.
4.- Modificamos la segunda consulta para que sume los valores y muestre un total.
3 * 350 = 1050
3 * 150 = 450
mysql> COMMIT;
mysql> DELIMITER //
mysql> CREATE PROCEDURE buscar(var_1 CHAR(3))
-> BEGIN
-> SELECT * FROM libro WHERE autor LIKE var_1;
-> END
-> //
mysql> DELIMITER ;
Con este procedimiento ya podemos buscar los libros utilizando parte del nombre
del autor, por ejemplo si queremos que aparezcan los que libros cuyo autor
comienza con R lo hacemos de la siguiente manera.
mysql> DELIMITER //
mysql> CREATE PROCEDURE cuenta(var_1 CHAR(3), OUT conteo INT)
-> BEGIN
-> SELECT count(ISBN)
-> INTO conteo
-> FROM libro
-> WHERE autor LIKE var_1;
-> END
-> //
mysql> DELIMITER ;
mysql> DELIMITER //
mysql> CREATE PROCEDURE cuenta2(var_1 CHAR(3))
-> BEGIN
-> DECLARE conteo INT;
-> SELECT count(ISBN)
-> FROM libro
-> WHERE autor LIKE var_1
-> INTO conteo;
-> SELECT conteo;
-> END
-> //mysql> DELIMITER ;
Mostramos el resultado.
Tal como se aprecia es muy efectivo agrupar sentencia SQL para realizar tareas
especficas. Es muy importante mencionar que MySQL no soporta sobrecarga de
procedimientos, por tal motivo no pueden existir procedimientos almacenados con
el mismo nombre.
Un disparador es un objeto con nombre en una base de datos que se asocia con
una tabla, y se activa cuando ocurre un evento en particular para esa tabla.
El disparador queda asociado a la tabla nombre_tabla. Esta debe ser una tabla
permanente, no puede ser una tabla TEMPORARYni una vista.
momento_dispes el momento en que el disparador entra en accin. Puede ser
BEFORE (antes) o AFTER (despues), para indicar que el disparador se ejecute
antes o despus que la sentencia que lo activa.
evento_disp indica la clase de sentencia que activa al disparador. Puede ser
INSERT, UPDATE, o DELETE. Por ejemplo, un disparador BEFORE para
sentencias INSERT podra utilizarse para validar los valores a insertar.
No puede haber dos disparadores en una misma tabla que correspondan al mismo
momento y sentencia. Por ejemplo, no se pueden tener dos disparadores
BEFORE UPDATE. Pero s es posible tener los disparadores BEFORE UPDATE y
BEFORE INSERT o BEFORE UPDATE y AFTER UPDATE. sentencia_disp es la
sentencia que se ejecuta cuando se activa el disparador. Si se desean ejecutar
mltiples sentencias, deben colocarse entre BEGIN... END, el constructor de
sentencias compuestas. Esto adems posibilita emplear las mismas sentencias
permitidas en rutinas almacenadas.
mysql> DELIMITER //
mysql> DELIMITER ;
EL trigger que creamos afecta a todas las tablas, pero solo se dispara cuando se
inserta en la tala prueba1, sigamos con el ejemplo.
Como se puede dar cuenta las otras tablas cambian respecto a la primera (a1), el
cambio depende de las sentencias agregadas en el trigger.
Tambin hay limitaciones sobre lo que puede aparecer dentro de la sentencia que
el disparador ejecutar al activarse:
El disparador no puede referirse a tablas directamente por su nombre, incluyendo
la misma tabla a la que est asociado. Sin embargo, se pueden emplear las
palabras clave OLD y NEW. OLD se refiere a un registro existente que va a
borrarse o que va a actualizarse antes de que esto ocurra.
NEW se refiere a un registro nuevo que se insertar o a un registro modificado
luego de que ocurre la modificacin.
El disparador no puede invocar procedimientos almacenados utilizando la
sentencia CALL. (Esto significa, por ejemplo, que no se puede utilizar un
procedimiento almacenado para eludir la prohibicin de referirse a tablas por su
nombre).
El disparador no puede utilizar sentencias que inicien o finalicen una transaccin,
tal como START TRANSACTION, COMMIT, o ROLLBACK.
Creemos otro Trigger que evale alguna condicin dada (utilizaremos la misma
base de datos y la misma tabla que fue creada al inicio de esta seccin).
Agregamos el cdigo del trigger.
mysql> DELIMITER //
Qu es el ODBC?
Open Data Base Conectivity
O lo que es lo mismo, conectividad abierta de bases de datos. Si escribimos
una aplicacin para acceder a las tablas de una DB de Access, qu ocurrir si
despus queremos que la misma aplicacin, y sin reescribir nada, utilice tablas de
SQL Server u otra DB cualquiera? La respuesta es sencilla: no funcionar.
Nuestra aplicacin, diseada para un motor concreto, no sabr dialogar con el
otro. Evidentemente, si todas las DB funcionaran igual, no tendramos este
problema.... aunque eso no es probable que ocurra nunca.
Pero si hubiera un elemento que por un lado sea siempre igual, y por el otro sea
capaz de dialogar con una DB concreta, solo tendramos que ir cambiando este
elemento, y nuestra aplicacin siempre funcionara sin importar lo que hay al otro
lado... algo as como ir cambiando las boquillas de una manguera. A esas piezas
intercambiables las llamaremos orgenes de datos de ODBC
Casi todas las DB actuales tienen un ODBC. Debido a que este elemento impone
ciertas limitaciones, ya que no todo lo que la DB sabe hacer es compatible con la
aplicacin, como velocidad de proceso, tiempos de espera, mxima longitud de
registro, nmero mximo de registros, versin de SQL, etc., est cayendo en
desuso a cambio de otras tcnicas de programacin, pero an le quedan muchos
aos de buen servicio.
Esta es la idea: por un lado el ODBC provee de unas caractersticas siempre
homogneas, y por el otro permite distintos controladores que aseguran la
conectividad de la aplicacin con diferentes bases de datos.
JDBC
Controlador (driver)
Base de datos
ADO.NET
import java.sql.*;
import javax.swing.JOptionPane;
//Aqui
agregue la direccion fisica de su Base de datos
private String url_acces="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,
*.accdb)};DBQ=H:\\alumnos\\Datos.accdb"; //colocar la direccin fsica de la BD
private String usuario="";
private String pasword="";
private Connection miConexion=null;
private Statement miEstatuto_acc=null;
private ResultSet tabla;
import java.sql.*;
import javax.swing.JOptionPane;
//Aqui
agregue la direccion fisica de su Base de datos
private String url_oracle ="jdbc:oracle:thin:@localhost:1521:XE";
private String usuario="";
private String pasword="";
private Connection miConexion=null;
private Statement miEstatuto_oracle=null;
private ResultSet tabla;
}catch(Exception exe){
System.out.println("error con la conexion");
}
try{
miEstatuto_oracle=miConexion.createStatement();
System.out.println("ok en el acuerdo");
oracle++;
}catch(SQLException exep){
System.out.println("error al crear el estatuto");
}
if(oracle==3){
JOptionPane.showMessageDialog(this,"ESTADO DE LA
CONEXION","ORACLE SE
CONECTO",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(this,"ESTADO DE LA
CONEXION","ORACLE NO SE CONECTO",JOptionPane.ERROR_MESSAGE);
}
}
return miEstatuto_oracle;
}
import java.sql.*;
import javax.swing.JOptionPane;
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("CORRECTO CON EL DRIVER");
sql++;
}catch(Exception e){
System.out.println("ERROR CON EL DRIVER");
}
try{
miConexion=DriverManager.getConnection(url_sql,usuario,pasword);
System.out.println(url_sql+usuario+pasword);
if(miConexion!=null){
System.out.println("CONEXION OK..");
sql++;
}
}catch(Exception er){
System.out.println("ERROR CON LA CONEXION");
}
try{
miEstatuto_sql=miConexion.createStatement();
System.out.println("ESTATUTO OK..");
sql++;
}catch(Exception err){
System.out.println("ERROR CON EL ESTATUTO");
}
return miEstatuto_sql;
}
}
TIPO DE DATO
1 BIT
2 TINYINT
3 BOOLEAN
4 SMALLINT
5 MEDIUMINT
6 INT
7 INTEGER
8 BIGINT
9 FLOAT
10 DOUBLE
11 DECIMAL
Caractersticas:
Caractersticas:
CLAUSULA DESCRIPCIN
REFERENCES Indica en que tabla es clave principal la que aqu es
fornea, siempre trabajando en la misma base de
datos.
ON DELETE <opcin> Indica que acciones se deben realizar en la tabla
actual si se borra una fila en la tabla referenciada.
ON UPDATE <opcin> Es anlogo pero para modificaciones de claves.
Existen tres opciones diferentes. Veamos lo que hace cada una de ellas:
OPCIN DESCRIPCIN
RESTRICT Esta opcin impide eliminar o modificar filas en la tabla referenciada
si existen filas con el mismo valor de clave fornea.
CASCADE Borrar o modificar una clave en una fila en la tabla referenciada con
un valor determinado de clave, implica borrar las filas con el mismo
valor de clave fornea o modificar los valores de esas claves
forneas.
SET NULL Borrar o modificar una clave en una fila en la tabla referenciada con
un valor determinado de clave, implica asignar el valor NULL a las
claves forneas con el mismo valor.
Como en cualquier otro lenguaje, los parntesis se pueden usar para forzar el
orden de la evaluacin de determinadas operaciones dentro de una expresin.
Cualquier expresin entre parntesis adquiere mayor precedencia que el resto de
las operaciones en el mismo nivel de parntesis.
mysql> SELECT 10+5*2, (10+5)*2;
+--------+----------+
| 10+5*2 | (10+5)*2 |
+--------+----------+
| 20 | 30 |
+--------+----------+
1 row in set (0.00 sec)
Nota: Son solo algunas funciones, ya que en realidad son demasiadas no se han
agregado al manual, con respecto a los operadores +,-,*,/, han sido agregados en
esta seccin por ser usadas en operaciones que pueden dar tratamiento a los
datos.