# Conexión a MySQL
# Formato del comando
mysql -u <nombre_de_usuario> -p[contraseña]
# Primer formato
mysql -u root -p123456
# Segundo formato
mysql -u root -p
# Salir de la conexión
exit;
# Mostrar todas las bases de datos en MySQL
show databases;
# Seleccionar una base de datos
# Formato
use <nombre_de_base_de_datos>;
# Ejemplo
use mysql;
# Mostrar todas las tablas en la base de datos actual
# Este comando debe usarse después de seleccionar una base de datos
show tables;
# Consultar la estructura de una tabla en la base de datos actual
# Este comando debe usarse después de seleccionar una base de datos
describe <nombre_de_tabla>;
# Ejemplo
describe estudiantes;
# Crear una base de datos
# Formato
create database [if not exists] <nombre_de_base_de_datos>;
# Ejemplo
create database hola;
# Si la base de datos 'hola' no existe, créala, de lo contrario, no hagas nada
create database if not exists hola;
# Comentarios en SQL
-- Esto es un comentario de una línea
/*
Esto es un comentario de múltiples líneas
*/
Operaciones con Bases de Datos y Tablas
Operaciones con Bases de Datos
-
Crear una base de datos ```
Formato
create database [if not exists] <nombre_de_base_de_datos>;
Ejemplo
create database hola;
Si la base de datos 'hola' no existe, créala, de lo contrario, no hagas nada
create database if not exists hola;
-
Eliminar una base de datos ```
Formato
drop database [if exists] <nombre_de_base_de_datos>;
Ejemplo
drop database hola;
Si la base de datos 'hola' existe, elimínala
drop database if exists hola;
-
Usar una base de datos ```
use <nombre_de_base_de_datos>
Ejemplo
use hola
Si el nombre tiene caracteres especiales, se deben encerrar entre comillas invertidas
use
hola -
Ver las bases de datos ```
Ver las bases de datos existentes
show databases;
Ver la sentencia de creación de una base de datos
show create database escuela
Creación de Tablas
Objetivo: Crear una base de datos llamada 'escuela' y una tabla de estudiantes con los siguientes campos: número de estudiante (int), contraseña (varchar(20)), género (varchar(2)), fecha de nacimiento (datetime), dirección de casa, email.
# Formato
create table [if not exists] `nombre_de_tabla`(
`nombre_de_campo` tipo_de_dato [atributos] [índice] [comentario],
`nombre_de_campo` tipo_de_dato [atributos] [índice] [comentario],
...
primary key(`nombre_de_campo`)
)[motor_de_tabla][conjunto_de_caracteres][comentario]
# Ejemplo
create table if not exists `estudiantes` (
`id` int(4) not null auto_increment comment 'Clave primaria autoincremental',
`numero_estudiante` int(4) comment 'Número de estudiante',
`contrasena` varchar(20) not null default '123456' comment 'Contraseña de inicio de sesión',
`genero` varchar(2) not null default 'F' comment 'Género del estudiante',
`fecha_nacimiento` datetime default null comment 'Fecha de nacimiento del estudiante',
`direccion_casa` varchar(100) default null comment 'Dirección de casa del estudiante',
`email` varchar(50) default null comment 'Correo electrónico del estudiante',
`id_grado` int(10) not null comment 'ID del grado del estudiante',
primary key(`id`)
)engine=innodb default charset=utf8
Consultar Tablas
# Ver la sentencia de creación de una tabla
show create table estudiantes
# Ver la estructura de una tabla
desc estudiantes
Modificar Tablas
# Cambiar el nombre de una tabla
alter table <nombre_viejo> rename as <nombre_nuevo>
# Ejemplo
alter table profesores rename as profesores1
# Añadir un campo a una tabla
alter table <nombre_de_tabla> add <nombre_de_campo> [restricciones]
# Ejemplo
alter table profesores1 add edad int(4)
# Cambiar el nombre de un campo
alter table <nombre_de_tabla> change <nombre_viejo> <nombre_nuevo> [restricciones]
# Ejemplo
alter table profesores1 change edad edad1 int(10)
# Modificar las restricciones de un campo
alter table <nombre_de_tabla> modify <nombre_de_campo> <restricciones>
# Ejemplo
alter table profesores modify edad1 varchar(11)
# Nota: 'modify' solo cambia las restricciones, mientras que 'change' solo cambia el nombre
# Eliminar un campo de una tabla
alter table <nombre_de_tabla> drop <nombre_de_campo>
# Ejemplo
alter table profesores drop edad1
Eliminar Tablas
drop table [if exists] <nombre_de_tabla>
# Ejemplo
drop table if exists profesores1
Gestión de Datos en MySQL
Llaves Foráneas
create table `grado`(
`id_grado` int(10) not null auto_increment comment 'ID del grado',
`nombre_grado` varchar(50) not null comment 'Nombre del grado',
primary key(`id_grado`)
)engine=innodb default charset=utf8
create table if not exists `estudiantes` (
`id` int(4) not null auto_increment comment 'Clave primaria autoincremental',
`numero_estudiante` int(4) comment 'Número de estudiante',
`contrasena` varchar(20) not null default '123456' comment 'Contraseña de inicio de sesión',
`genero` varchar(2) not null default 'F' comment 'Género del estudiante',
`fecha_nacimiento` datetime default null comment 'Fecha de nacimiento del estudiante',
`direccion_casa` varchar(100) default null comment 'Dirección de casa del estudiante',
`email` varchar(50) default null comment 'Correo electrónico del estudiante',
`id_grado` int(10) not null comment 'ID del grado del estudiante',
primary key(`id`),
key `FK_id_grado`(`id_grado`),
constraint `FK_id_grado` foreign key (`id_grado`) references `grado`(`id_grado`)
)engine=innodb default charset=utf8
# Notas:
1. FK_* es una convención fija.
2. key `FK_id_grado`(`id_grado`) define un campo como clave foránea.
3. constraint `FK_id_grado` foreign key (`id_grado`) references `grado`(`id_grado`) agrega una restricción (referencia).
4. Formato: constraint <nombre_restriccion> foreign key(<campo_clave_foranea>) references <tabla_referenciada>(<campo_referenciado>)
# Conclusión
Las operaciones anteriores son claves foráneas físicas, lo cual puede complicar la administración de la base de datos. Se recomienda implementar las claves foráneas en la capa lógica.
Lenguaje SQL
DML: Lenguaje de Manipulación de Datos
-
Agregar: insert ```
Formato
insert into <nombre_de_tabla>([nombre_de_campo1],[nombre_de_campo2]...[nombre_de_campoN]) values('valor1','valor2'...'valorN'),('valor1','valor2'...'valorN')...('valor1','valor2'...'valorN')
Ejemplo
Inserción básica
insert into
estudiantes(numero_estudiante,nombre...) values(01,'Xiao Hong')Inserción de múltiples filas
insert into
estudiantes(numero_estudiante,nombre...) values (01,'Xiao Hong'...),(01,'Xiao Ming'...)...(01,'Xiao Gang'...) -
Modificar: update ```
Sintaxis
update <nombre_de_tabla> set <nombre_de_campo>=[,<nombre_de_campo>=,<nombre_de_campo>=...<nombre_de_campo>=] where [condición]
Ejemplo
update
estudiantessetnombre='moon',email='xxxx@xx.com' where id=1;Nota: Es recomendable usar 'where' para evitar actualizar todas las filas.
-
Eliminar: delete ```
Sintaxis
delete from <nombre_de_tabla> where <condición> delete from estudiantes where id=1
Nota: Si no se usa 'where', se eliminarán todas las filas.
El comando 'truncate' también puede vaciar una tabla
truncate
estudiantesDiferencias entre 'delete' y 'truncate'
- Ambos eliminan datos, pero no la estructura de la tabla.
- 'Truncate' reinicia el contador de claves autoincrementales.
- 'Truncate' no afecta las transacciones.
Tras eliminar toda la tabla con 'delete', el comportamiento al reiniciar la base de datos depende del motor:
- EnnoDB: Reinicia el contador de claves autoincrementales. - MyISAM: Continúa desde el último valor de la clave autoincremental.
DQL: Lenguaje de Consulta de Datos
La consulta más frecuente en bases de datos es 'select'.
# Sintaxis
select <campos>...from <nombre_de_tabla>
# Consulta de todos los datos
select * from `estudiantes`
# Consulta de campos específicos
select `id`,`nombre` from `estudiantes`
# Consulta con alias
select `id` as ID_Estudiante, `nombre` as Nombre_Estudiante from `estudiantes`
# Consulta con funciones
# Función concat: Concatenar cadenas en los resultados
select concat('Nombre: ',`nombre`) from `estudiantes`
# Consulta sin duplicados
# Función distinct: Elimina valores duplicados
select distinct `estudiante` from `resultados`
# Expresiones
# Ejemplos de expresiones
select version()
select @@auto_increment_increment
select 100*3-1 as Resultado_Cálculo
select `id`+1 as ID_Calculado,`resultado` from `estudiantes`
Cláusula WHERE
- Usada para filtrar datos. - La condición es una o varias expresiones que resultan en un valor booleano. - Se recomienda usar letras en inglés para mayor legibilidad. ```
select * from estudiantes where id>=1 and id <= 100
select * from estudiantes where id>=1 && id <=100
#### Búsqueda Vaga
| Operador | Sintaxis | Descripción | |---|---|---| | is null | a is null | Devuelve verdadero si a es nulo | | is not null | a is not null | Devuelve verdadero si a no es nulo | | between...and | a between b and c | Devuelve verdadero si a está entre b y c | | like | a like b | Devuelve verdadero si a coincide con b | | in | a in (a1,a2....an) | Devuelve verdadero si a está en a1, a2, ..., an | #### Ejemplos
1. Uso de 'like' - Buscar estudiantes cuyo nombre empiece con 'Liu' ```
select `id`,`nombre` from `estudiantes` where `nombre` like 'Liu%'
```
- Buscar estudiantes cuyo nombre tenga un solo carácter después de 'Liu' ```
select `id`,`nombre` from `estudiantes` where `nombre` like 'Liu_'
```
- Buscar estudiantes cuyo nombre tenga dos caracteres después de 'Liu' ```
select `id`,`nombre` from `estudiantes` where `nombre` like 'Liu__'
```
- Buscar estudiantes cuyo nombre contenga 'Jia' ```
select `id`,`nombre` from `estudiantes` where `nombre` like '%Jia%'
```
2. Uso de 'in' - Buscar estudiantes con IDs 1001, 1002, 1003 ```
select `id`,`nombre` from `estudiantes` where `id` in (1001,1002,1003)
```
- Buscar estudiantes de Beijing o Anhui ```
select `id`,`nombre`,`direccion_casa` from `estudiantes` where `direccion_casa` in ('Beijing','Anhui')
```
3. Uso de 'null' y 'not null' - Buscar estudiantes con dirección nula ```
select `id`,`nombre`,`direccion_casa` from `estudiantes` where direccion_casa='' or direccion_casa is null
```
- Buscar estudiantes con fecha de nacimiento no nula ```
select `id`,`nombre`,`fecha_nacimiento` from `estudiantes` where `fecha_nacimiento`!='' or `fecha_nacimiento` is not null
```
- Buscar estudiantes con fecha de nacimiento nula ```
select `id`,`nombre`,`fecha_nacimiento` from `estudiantes` where `fecha_nacimiento`='' or `fecha_nacimiento` is null
```
#### Consulta de Unión de Tablas: JOIN
1. Buscar estudiantes que hayan tomado un examen (número de estudiante, nombre, número de asignatura, calificación) - Análisis: 1. Identificar de qué tablas vienen los campos. 2. Determinar el tipo de consulta (7 tipos de uniones). 3. Escribir el código. ```
# inner join
select s.numero_estudiante, nombre, numero_asignatura, resultado_estudiante
from estudiantes as s
inner join resultados as r
where s.numero_estudiante=r.numero_estudiante
# left join
select s.numero_estudiante, nombre, numero_asignatura, resultado_estudiante
from estudiantes as s
left join resultados as r
on s.numero_estudiante=r.numero_estudiante
# right join
select s.numero_estudiante, nombre, numero_asignatura, resultado_estudiante
from estudiantes as s
right join resultados as r
on s.numero_estudiante=r.numero_estudiante
# Buscar estudiantes ausentes
select s.numero_estudiante, nombre, numero_asignatura, resultado_estudiante
from estudiantes as s
left join resultados as r
on s.numero_estudiante=r.numero_estudiante
where resultado_estudiante is null
# Resumen
1. join <tabla> on <condici>: Sintaxis fija para uniones.
2. where: Filtro de igualdad, intercambiable con 'on' en inner join.
</condici></tabla>
```
- Proceso para escribir consultas de múltiples tablas: 1. Identificar los campos necesarios y sus tablas. 2. Elegir la primera tabla. 3. Agregar la siguiente tabla y su tipo de unión. 4. Identificar los campos comunes (puntos de unión). 5. Repetir los pasos para agregar más tablas. 6. Aplicar condiciones de filtro. - Consulta de estudiantes que tomaron un examen: número de estudiante, nombre, nombre de asignatura, calificación ```
select s.numero_estudiante, nombre_estudiante, nombre_asignatura, resultado_estudiante
from estudiantes s
right join resultados r
on r.numero_estudiante=s.numero_estudiante
inner join asignaturas sub
on r.numero_asignatura=sub.numero_asignatura
```
#### Diferencias entre inner, left y right join
| Operación | Descripción | |---|---| | inner join | Retorna filas con coincidencias en ambas tablas. | | left join | Retorna todas las filas de la tabla izquierda, incluso si no hay coincidencias en la derecha. | | right join | Retorna todas las filas de la tabla derecha, incluso si no hay coincidencias en la izqiuerda. | #### Operadores Comunes en WHERE
| Operador | Significado | Rango | Resultado | |---|---|---|---| | = | Igual a | 5=6 | false | | <> o != | No igual a | 5<>6 | true | | > | Mayor que | 5>6 | false | | < | Menor que | 5<6 | true | | <= | Menor o igual a | 5<=6 | true | | >= | Mayor o igual a | 5>=6 | false | | between...and... | Dentro de un rango | [3,7] | - | | and | Y (&&&) | 5>1 and 1>2 | false | | or | O (||) | 5>1 or 1>2 | true | </div>