SQL (Structured Query Language), es un estandar que se compone de una serie de instrucciones las cuales son interpretadas por los motores de bases de datos y permiten la interacci贸n con las mismas.
SQL se divide en tres partes.
DDL: Lenguaje de definici贸n de datos (Data Definition Language). Se compone de una serie de instrucciones que controlan la estructura de las bases de datos, las tablas y los campos.
DML: Lenguaje de Manipulaci贸n de Datos (Data Manipulation Lenguage), Son una serie de instrucciones que sirven para el manejo de los datos que se almacenan en las tablas.
DCL: Lenguaje de control de datos (Data Control Language), Son instrucciones que controlan el acceso a los datos.
LENGUAJE DDL.
En la Clase 1 del curso de base de datos, puedes ver como instalar el lenguaje de programaci贸n Mysql en su versi贸n de consola. En esta clase vamos a manejar las bases de datos a trav茅s del paquete XAMPP en forma de consola de comandos y por la APP del navegador.
Esta parte de SQL te permitir谩 definir los datos de gesti贸n en una base de datos. Entre las funciones b谩sicas esta:
● Crear tablas, 铆ndices y objetos de la base de datos.
● definir las estructuras f铆sicas donde se almacenar谩n los objetos de la base de datos.
DDL tiene 3 instrucciones b谩sicas:
CREATE tipo_objeto NOMBRE DEFINICI脫N.
DROP tipo_objeto NOMBRE.
ALTER tipo_objeto NOMBRE MODIFICACI脫N.
Con ALTER crearemos un objeto de un tipo determinado y generalmente ser谩 una DATABASE, una TABLE o un INDEX. Dichos objetos tendr谩n un nombre o identificador. Tambi茅n una definici贸n del objeto. Con DROP eliminamos el tipo de objeto en cuesti贸n mediante su nombre. Con ALTER modificamos un objeto en cuesti贸n por su nombre, adem谩s de establecer una modificaci贸n de su estructura, como por ejemplo cambiar un DNI introducido incorrectamente.
Crear base de datos.
Para crear una base de datos en MySQL usa el comando CREATE DATABASE usando la siguiente notaci贸n:
CREATE {DATABASE | SCHEMA} [II NOT EXISTS] nombre_db CHARACTER SET juego_caracteres | [DEFAULT] COLLATE nombre_colaci贸n
Al crear la base de datos puedes elegir por DATABASE o SCHEMA (en cualquier caso el efecto es el mismo). Adem谩s tienes que saber que MySQL usa algoritmos y sin贸nimos para hacer compatible tu base de datos con otros SGBD. El par谩metro principal del juego de caracteres que usar谩 la base de datos se ha establecido en latin1 y su colaci贸n tambi茅n. Eso significa que el alfabeto usado en la base de datos y los objetos que se creen tendr谩n una codificaci贸n espec铆fica seg煤n un alfabeto y lenguaje como el uso de "ñ" o caracteres especiales como tildes.
Desde el editor de MySQL en consola de comandos, podemos ver las bases de datos que tenemos guardadas en el esquema MySQL y se muestran con la opci贸n show databases;
Y para poder manipular una base de datos en cuesti贸n, has de usar dicha base de datos. Para ello utiliza use nombre_db;
Crear tabla.Ahora vamos a crear una tabla para dicha base de datos prueba_mysql. La sintaxis para la creaci贸n de la base de datos es la siguiente:
CREATE [TEMPORARY] TABLE [esquema.]nombre_tabla [(definici贸n_create,...)][opciones]
En la definici贸n de la tabla tienes que tener que estar谩 compuesta por filas y columnas y que cada columna es un dato de la tabla, mientras que las filas ser谩n los valores que cogen dichos datos. Asi que obligatoriamente tienes que definir (definici贸n_create), las columnas asignadolas en la creaci贸n el tipo de dato que van a contener. Tambi茅n es obligatorio que cada tabla tenga una calve primaria (y opcionalmente una clave for谩nea que relacionar谩 otra tabla).
definici贸n_create:
definici贸n_columna | [CONSTRAINT [S铆mbolo]] PRIMARY KEY (nombre_columna)
[CONSTRAINT [S铆mbolo]] FOREIGN KEY (nombre_columna)
[definici贸n_referencia]
definici贸n_columna:
nombre_columna tipo_datos [NOT NULL | NULL] [DEFAULT valor]
[UNIQUE [KEY] | [PRIMARY] KEY]
[definici贸n_referencia]
definici贸n_referencia:
REFERENCES nombre_tabla [(nombre_columna,...)]
[ON DELETE {CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION}]
Aunque parezca complejo la sintasis de creaci贸n de tablas es un proceso muy simple. Adem谩s el proceso expuesto sirve para la creaci贸n de tablas en casi cualquier SGBD. Lo b谩sico es CREATE TABLE, para indicar al SGBD que quieres crear una tabla en dicha base. Y dicha tabla tiene que tener unos campos con un tipo de dato y adem谩s, uno de sus campos tiene que ser PRIMARY KEY.
En la sentencia de definici贸n de creaci贸n (definici贸n_create), se especifican los campos que va a tener la tabla. En la sintaxis, los puntos suspensivos sugieren que la definici贸n_create se puede repetir tantas veces como se quiera. As铆 que por ejemplo podemos crear tantas columnas como queramos en la tabla. La opci贸n de TEMPORARY crea una tabla temporal que se eliminar谩 en cuanto se desconecte de la base de datos. esta tabla es invisible al resto de usuarios.
Podemos utilizar en cada declaraci贸n del campo los atributos NOT NULL | NULL que indican que dicho campo no pueden estar vacios (NOT NULL), o se cree la tabla sin la necesidad de incluir valor en dichos campos (NULL). La propiedad DEFAULT por defecto introduce un valor predefinido en la creaci贸n de la tabla.
El UNIQUE KEY sirve para especificar un 铆ndice. El index es una estructura de datos que permite un acceso r谩pido a la informaci贸n de una tabla y adem谩s, que no existan valores repetidos en el campo de la tabla (si se intenta introducir un registro con el mismo valor que otro anterior se producir谩 error). Se suelen utilizar para evitar que un registro se duplique, y suele ser utilizado en la clave primaria de la tabla.
PRIMARY KEY indica que la columna de la tabla est谩 definida como clave primaria. Una tabla solo puede tener una clave primaria.
Relacionar tablas entre s铆.
Las tablas se pueden relacionar entre s铆. Para ello en nuestra tabla habr铆a que hacer una referencia a otra tabla de nuestra base de datos (aunque tambi茅n se pueden referenciar tablas de otras bases de datos siempre que esten en el mismo contexto del servidor).
Para ello necesitamos m铆nimo dos tablas.
Pero para relacionarlas tenemos que hacer que un campo de una tabla llame a otro campo de la otra tabla. Por eso creo el campo cliente y lo referencio al campo DNI de la tabla usuarios. Ahora la tabla compras es hija de la tabla usuarios.
Aparte se suelen tambi茅n indicar modificadores para establecer el burbujeo de las acciones de una tabla sobre otra. Las opciones de ON DELETE y ON UPDATE establecen el gestor en caso de que las filas de la tabla referenciada se borren o actualicen. Los comportamientos pueden ser:
● CASCADE.
● SET NULL.
● NO ACTION.
Si usamos NO ACTION y se intenta un borrado o actualizaci贸n sobre la tabla, la operaci贸n se cancelar谩. Si se especifica CASCADE la operaci贸n se propaga en cascada hasta la hija (si se actualiza la tabla padre, se actualizan los registros de la tabla hija). Si se borra un registro de la tabla padre, se borran aquellos registros de la tabla hija que est茅n referenciando al registro borrado. Si se usa SET NULL, se establece a NULL la clave for谩nea afectada por un borrado o modificaci贸n de la tabla padre.
Si no se especifica ON DELETE u ON UPDATE, por defecto se act煤a como NO ACTION.
Declaraci贸n de forma.Ya sabes que son la primary key y la foreign key y como se declaran, pero tienes que saber que existen varias formas de declararlas siendo las m谩s usadas a nivel de columna como he hecho en esta clase; aunque tambi茅n la puedes crear a nivel de tabla. Todas las formas son validas, y deber谩s de usar la que m谩s te guste como programador.
Eliminar y modificar objetos.
El formato de instrucciones MySQL para el borrado de tablas, index, o bases es muy sencillo.
DROP [TEMPORARY] TABLE nombre_tabla [,otros_nombres];
En la modificaci贸n de las tablas u objetos de la base de datos, podemos hacer varias opciones:
Renombrado de tablas.solamente con usar el comando
RENAME nombre_tabla
,se cambiar谩 el nombre de la tabla, pero hay que indicar el nuevo nombre que tendr谩 la tabla y por eso se utiliza la cla煤sula TO
, entonces si cambio la tabla usuarios a clientes, quedar铆a tal cual:
Modificaci贸n de tablas.El comando para modificar una tabla es
ALTER TABLE
, y su sintaxis puede ser bastante compleja ya que tiene muchas alternativas.
ALTER TABLE nombre_tabla alternativa [,alternativa]...
alternativa:
ADD (definici贸n_columna [FIRST | AFTER nombre_columna]
| ADD (definici贸n_columna,...)
| ADD [CONSTRAINT [simbolo]]
PRIMARY KEY (nombre_columna,...)
| ADD [CONSTRAINT [simbolo]]
UNIQUE (nombre, columna,...)
| ADD [CONSTRAINT [simbolo]]
FOREIGN KEY (nombre, columna,...)
| CHANGE [COLUMN] anterior_nombre_columna definici贸n_columna [FIRST|AFTER] nombre_columna
| RENAME COLUMN anterior_nombre_columna TO nuevo_nombre_columna
| MODIFY definici贸n_columna [FIRST | AFTER nombre_columna]
| DROP COLUMN nombre_columna
| DROP PRIMARY KEY
| DROP FOREIGN KEY fk_s铆mbolo
opciones_tabla
A veces ser谩 mejor borrar la tabla y empezar de nuevo (cuando no tengas muchos registros), que complicarte la vida usando tantas instrucciones. Pero otras veces no podr谩s eliminar la tabla porque tiene muchos registros. En la zona de pr谩cticas de esta clase trabajaremos modificando las tablas y sus columnas. Pero como puedes ver en la sintaxis de ALTER, se pueden usar 4 instrucciones b谩sicas:
● ADD. te permite a帽adir columnas a la tabla y el lugar (FIRST | AFTER).
● MODIFY. Te permite cambiar el tipo de dato y a帽adir restricciones.
● DROP. Te permite eliminar restricciones de la clave for谩nea y primaria.
● CHANGE. Te permite cambiar el nombre de una columna.
Tipos de datos.
Los tipos de datos que pueden usarse en MySQL y la mayor铆a de SGBD est谩n definidos en la siguiente tabla. Puede que algunos otros SGBD tengan datos parecidos a estos, pero se definan de diferente manera.
Existen otros tipos de datos b谩sicos como el dato ENUM que sirve para crear enumeraciones, que son campos que admiten solo valores fijos, por ejemplo:
rgb enum('rojo', 'verde', 'azul');
O el tipo BLOB, que sirve para guardar objetos multimedia como .jpg o .sgv. Adem谩s MySQL es compatible con los tipos TEXT, NUMBER, NUMERIC y VARCHAR2 de otros SGBD.
Ahora en la pr谩ctica vamos a ver estos conceptos en detalle creando una aplicaci贸n y editando campos de nuevas tablas.