Creación de Base de Datos
Ejemplo de creación de base de datos para crear un foro sencillo:CREATE DATABASE
IF NOT EXISTS foro
DEFAULT CHARACTER SET latin1
COLLATE latin1_swedish_ci;
USE foro;
CREATE TABLE comentarios (
id_comentario int(10) UNSIGNED NOT NULL,
foros_id_foro int(10) UNSIGNED NOT NULL,
usuarios_id_usuario int(10) UNSIGNED NOT NULL,
comentario text,
fecha date DEFAULT NULL,
hora time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE foros (
id_foro int(10) UNSIGNED NOT NULL,
nombre varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE usuarios (
id_usuario int(10) UNSIGNED NOT NULL,
nombre varchar(50) NOT NULL,
contrasena varchar(20) NOT NULL,
correo varchar(30) NOT NULL,
avatar varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ==============================================
-- Creación de los índices para las tablas
-- ==============================================
-- Indices de la tabla: foros
ALTER TABLE foros
ADD PRIMARY KEY (id_foro),
ADD UNIQUE KEY id_foro(id_foro);
-- Indices de la tabla: usuarios
ALTER TABLE usuarios
ADD PRIMARY KEY (id_usuario),
ADD UNIQUE KEY id_usuario(id_usuario);
-- Indices de la tabla: comentarios
ALTER TABLE comentarios
ADD PRIMARY KEY (id_comentario),
ADD UNIQUE KEY id_comentario(id_comentario),
ADD KEY FKIndex1 (Usuarios_id_usuario),
ADD KEY FKIndex2 (Foros_id_foro);
-- ===================================================
-- Creación de los valores de incremento automático
-- en campos índices:
-- ===================================================
-- AUTO_INCREMENT de la tabla: comentarios
ALTER TABLE comentarios
MODIFY id_comentario int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
-- AUTO_INCREMENT de la tabla: foros
ALTER TABLE foros
MODIFY id_foro int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
-- AUTO_INCREMENT de la tabla: usuarios
ALTER TABLE usuarios
MODIFY id_usuario int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
-- ==============================================
-- Restricciones Constraint para tablas
-- ==============================================
-- Integridad referencial para la tabla: comentarios
ALTER TABLE comentarios
ADD CONSTRAINT comentarios_ibfk_1
FOREIGN KEY (Usuarios_id_usuario)
REFERENCES usuarios (id_usuario)
ON DELETE NO ACTION
ON UPDATE CASCADE,
ADD CONSTRAINT comentarios_ibfk_2
FOREIGN KEY (Foros_id_foro)
REFERENCES foros (id_foro)
ON DELETE NO ACTION
ON UPDATE CASCADE;
INSTRUCCIONES BÁSICAS
Insertar registro en una tabla:
INSERT INTO nombreTable(campo1,campo2... campoN) VALUES(dato1,dato2...datoN)
Actualizar datos en una tabla:
UPDATE nombreTabla SET campo1 = dato1, campo2 = dato,... ,campoN = datoN WHERE condición
Eliminar registros de una tabla:
DELETE nombreTabla WHERE condición
Recuperar datos de tablas.
SELECT campo1, campo2,...,campoN FROM nombreTabla [WHERE condicion] [GROUP BY campo1, campo2,...,campoN] [ORDER BY campo1, campo2, campoN]
Las instrucciones WHERE, GROUP BY y ORDER BY son opcionales.
Uso de alias para identificar una tabla.
Se utiliza para hacer referencia a una tabla sin tener que anotar el nombre completo de la tabla.
nombreTabla AS alias
Ejemplo:
SELECT u.nombre,f.consulta FROM usuarios AS usu INNER JOIN foropublico AS f ON usu.id = f.idAutor WHERE f.fecha = '2017/07/09/'
Observar que se usa la letra f para hacer referencia a la tabla foropublico, mientras que para referirse a la tabla usuarios se emplea usu. Estos son los alias definidos para cada tabla.
Uso de Joins
Una instrucción Join, permite realizar consultas que recuperan datos de distintas tablas. Aunque existen diversos tipos de joins, no todos son soportados por todos los gestores de base de datos relacionales. Así que mencionaré los tres mayormente utilizados y que están soportados por la mayoría de los gestores:1. INNER JOIN
2. RIGHT JOIN
3. LEFT JOIN
1. Inner Join:
Cuando se requiere recuperar todos los registros que cumplen con la condiciones de igualdad especificadas entre las tablas.
Ejemplo: Recuperar todos los nombres de los usuarios y las fechas en que realizaron comentarios en el foro:
SELECT usuario.nombre, comentarios.fecha FROM usuarios INNER JOIN comentarios ON usuarios.id_usuario = comentarios.usuarios_id_usuario
La consulta devolverá únicamente los nombres de usuarios que realizaron comentarios y la fechas en que fueron publicados.
2. Right join:
Si se requiere recuperar todos los registros que estén contenidos únicamente en la tabla de la derecha y tengan una relación con la tabla izquierda.
Ejemplo: Recuperar todos las fechas de cada comentario y el nombre del foro.
SELECT foros.nombre, comentarios.fecha FROM foros RIGHT JOIN comentarios ON foros.id_foro = comentarios.foros_id_foros
La consulta devolverá solo los nombre de foros que tengan algún comentario registrado. Si no existiera integridad referencial entre ambas tablas y la tabla comentarios contuviera registros sin relación en la tabla de foros, se presentarían las fechas de los comentarios y el nombre del foro aparecería null.
3. Left Join
Se utiliza para recuperar todos los registros de la tabla de la izquierda sin importar si existe algún registro relacionado en la tabla de la derecha.
Ejemplo: Recuperar todos los nombres de foros y cada nombre de sus comentarios publicados.
SELECT foros.nombre, comentarios.comentario FROM foros LEFT JOIN comentarios ON foros.id_foro = comentarios.foros_id_foros
Esta consulta devolverá todos los nombres de los foros y los comentarios publicados al respecto, sin embargo, la columna comentario presentará null al no encontrar un registro relacionado en la tabla comentarios.
No hay comentarios.:
Publicar un comentario