bloque4:sql
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
bloque4:sql [2022/03/08 15:37] – [Lenguaje Estructurado de Consultas] fernando | bloque4:sql [2024/09/16 19:34] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Lenguaje Estructurado de Consultas ====== | ====== Lenguaje Estructurado de Consultas ====== | ||
- | * sdfh | + | |
- | * asdg | + | |
- | * | + | |
===== Lenguaje SQL ===== | ===== Lenguaje SQL ===== | ||
El lenguaje SQL (Structured Query Language) permite la comunicación con el SGBD. Actualmente es el lenguaje estándar para la gestión de Bases de Datos relacionales para ANSI (American National Standard Institute) e ISO (International Standarization Organization). Entre las principales características de este lenguaje destaca que es un lenguaje para todo tipo de usuarios ya que quién lo utiliza especifica qué quiere, pero no dónde ni cómo, de manera que permite realizar cualquier consulta de datos por muy complicada que parezca. | El lenguaje SQL (Structured Query Language) permite la comunicación con el SGBD. Actualmente es el lenguaje estándar para la gestión de Bases de Datos relacionales para ANSI (American National Standard Institute) e ISO (International Standarization Organization). Entre las principales características de este lenguaje destaca que es un lenguaje para todo tipo de usuarios ya que quién lo utiliza especifica qué quiere, pero no dónde ni cómo, de manera que permite realizar cualquier consulta de datos por muy complicada que parezca. | ||
Línea 69: | Línea 67: | ||
Es un cliente para MySQL/ | Es un cliente para MySQL/ | ||
{{ : | {{ : | ||
+ | |||
+ | |||
+ | === Cliente de terminal de comandos mysql === | ||
+ | Cuando trabajamos en sistemas que no disponen de interfaz gráfica de usuario, por ejemplo, cuando nos conectamos desde un terminal de comandos remoto, podemos usar el cliente //mysql//. A continuación vemos las operaciones principales para poder conectarnos: | ||
+ | |||
+ | < | ||
+ | # Conectarnos al servidor Mysql | ||
+ | mysql -u miusuario -p micontrasena | ||
+ | |||
+ | # Mostrar las bases de datos del servidor | ||
+ | SHOW DATABASES; | ||
+ | |||
+ | # Crear una base de datos | ||
+ | CREATE DATABASE mi_Base_Datos; | ||
+ | |||
+ | # Conectarse a una base de datos | ||
+ | USE mi_Base_Datos; | ||
+ | |||
+ | # Mostrar las tablas de mi base de datos | ||
+ | SHOW TABLES; | ||
+ | |||
+ | # Mostrar las propiedades de una tabla | ||
+ | DESCRIBE mi_tabla; | ||
+ | </ | ||
===== Creación base de datos con SQL ===== | ===== Creación base de datos con SQL ===== | ||
Línea 175: | Línea 197: | ||
ALTER TABLE alumnos ADD CONSTRAINT nombre_fk_1 FOREIGN KEY (id_curso) REFERENCES cursos(id); | ALTER TABLE alumnos ADD CONSTRAINT nombre_fk_1 FOREIGN KEY (id_curso) REFERENCES cursos(id); | ||
ALTER TABLE alumnos DROP FOREIGN KEY nombre_fk; | ALTER TABLE alumnos DROP FOREIGN KEY nombre_fk; | ||
- | |||
- | -- Restaura el valor de AUTO_INCREMENT a 1. Debe ser mayor al índice más alto | ||
- | ALTER TABLE alumnos AUTO_INCREMENT = 1; | ||
-- Renombar tabla | -- Renombar tabla | ||
Línea 198: | Línea 217: | ||
El tipo '' | El tipo '' | ||
- | Por otro lado, el tipo '' | + | Por otro lado, el tipo '' |
| | ||
== Tipo TEXT == | == Tipo TEXT == | ||
Línea 209: | Línea 228: | ||
=== Tipos numéricos === | === Tipos numéricos === | ||
- | Para la representación de tipos de datos numéricos. Los tipos más utilizados son '' | + | Para la representación de tipos de datos numéricos. Los tipos más utilizados son '' |
| | ||
+ | Para número decimales tenemos los tipos '' | ||
+ | |||
En ocasiones el rango de los valores negativos resultará prescindible (claves numéricas, valores de dinero, cantidades, . . .) por lo que será posible ampliar el rango positivo de un tipo numérico añadiendo la restricción '' | En ocasiones el rango de los valores negativos resultará prescindible (claves numéricas, valores de dinero, cantidades, . . .) por lo que será posible ampliar el rango positivo de un tipo numérico añadiendo la restricción '' | ||
Línea 217: | Línea 238: | ||
</ | </ | ||
| | ||
- | Para el caso de los números de coma flotante conviene tener en cuenta los problemas de precisión ((https:// | ||
=== Tipos para fechas === | === Tipos para fechas === | ||
- | Los tipos más utilizado para almacenar valores de fechas ('' | + | Los tipos más utilizado para almacenar valores de fechas ('' |
+ | |||
+ | También se puede usar el tipo '' | ||
- | También se puede usar el tipo '' | + | La diferencia entre '' |
=== Tipo booleano === | === Tipo booleano === | ||
- | Permite almacenar valores lógicos Verdadero/ | + | Permite almacenar valores lógicos Verdadero/ |
==== Restricciones ==== | ==== Restricciones ==== | ||
Las restricciones se pueden establecer, o no, a las columnas de cada tabla para forzar a que los datos almacenados | Las restricciones se pueden establecer, o no, a las columnas de cada tabla para forzar a que los datos almacenados | ||
- | en ellas cumplan una serie de condiciones, | + | en ellas cumplan una serie de condiciones, |
Hay que tener en cuenta que, por lo general, las restricciones se definen en línea con la definición del campo (tal y como se muestra en la sintaxis de la sentencia de '' | Hay que tener en cuenta que, por lo general, las restricciones se definen en línea con la definición del campo (tal y como se muestra en la sintaxis de la sentencia de '' | ||
Línea 258: | Línea 280: | ||
</ | </ | ||
- | Hay que tener en cuenta que a la hora de definir claves primarias compuestas (la componen 2 ó más campos de la tabla), ésta deberá ser definida forzosamente tras la definición de los campos involucrados, | + | Hay que tener en cuenta que a la hora de definir claves primarias compuestas (dos ó más columnas), ésta deberá ser definida forzosamente tras la definición de los campos involucrados, |
<code sql> | <code sql> | ||
CREATE TABLE personas( | CREATE TABLE personas( | ||
Línea 269: | Línea 291: | ||
=== Autonumérico === | === Autonumérico === | ||
- | + | Es una propiedad | |
- | Especialmente útil en el caso de aquellas columnas | + | |
La forma de definirlo es añadiendo la restricción '' | La forma de definirlo es añadiendo la restricción '' | ||
Línea 276: | Línea 297: | ||
id INT PRIMARY KEY AUTO_INCREMENT | id INT PRIMARY KEY AUTO_INCREMENT | ||
</ | </ | ||
+ | |||
+ | Como detalle, cualquier inserción fallida en la tabla seguirá incrementando el índice autonumérico aunque no se inserten los datos. Podemos resetearlo: | ||
+ | <code sql> | ||
+ | ALTER TABLE mitabla AUTO_INCREMENT = 1; | ||
+ | </ | ||
+ | Si la tabla no está vacía, debe ser mayor que el último valor de esa columna. | ||
=== Clave ajena === | === Clave ajena === | ||
- | Una clave ajena está formada por una o varias columnas que hacen referencia a una clave primaria de otra o de | + | Una clave ajena está formada por una o varias columnas |
+ | |||
+ | Al definir una columna como clave ajena '' | ||
Las claves ajenas se deben definir después de la definición de los campos de la tabla: | Las claves ajenas se deben definir después de la definición de los campos de la tabla: | ||
Línea 291: | Línea 320: | ||
| | ||
- | + | | |
- | -- También se le puede indicar | + | -- También se puede crear indicandole |
| | ||
); | ); | ||
</ | </ | ||
- | El ejemplo anterior haría referencia | + | El ejemplo anterior haría referencia tabla //cursos//: |
<code sql> | <code sql> | ||
CREATE TABLE cursos( | CREATE TABLE cursos( | ||
Línea 314: | Línea 343: | ||
| | ||
- | | + | |
</ | </ | ||
- | En caso que la clave ajena haga referencia a una clave primaria compuesta: | + | Si la clave ajena hace referencia a una clave primaria compuesta: |
<code sql> | <code sql> | ||
Línea 323: | Línea 352: | ||
</ | </ | ||
- | En cualquiera | + | Las definiciónes |
- | Habrá que tener en cuenta que mientras que un campo definido como clave ajena haga referencia a un campo definido como clave primaria, la fila de la segunda tabla no podrá ser eliminada hasta que no lo haga la fila que le hace referencia (integridad referencial). Para evitar estos problemas (aunque no siempre es un problema) es posible definir la restricción de clave ajena añadiendo la cláusula '' | + | Habrá que tener en cuenta que mientras que un campo definido como clave ajena haga referencia a un campo definido como clave primaria, la fila de la segunda tabla no podrá ser eliminada hasta que no lo haga la fila que le hace referencia (integridad referencial). Para evitar estos problemas (aunque no siempre es un problema) es posible definir la restricción de clave ajena añadiendo la cláusula '' |
* **RESTRICT**: | * **RESTRICT**: | ||
Línea 348: | Línea 377: | ||
* Una columna clave ajena nunca podrá ser '' | * Una columna clave ajena nunca podrá ser '' | ||
- | * La columna | + | * La columna/s clave ajena debe ser del mismo tipo de datos que la columna |
- | * La columna deberá ser un índice. A partir de Mysql 8 y versiones compatibles de MariaDB, se hace automáticamente. | + | * La columna deberá ser un índice. A partir de Mysql 8 y versiones compatibles de MAriaDB, se hace automáticamente. |
* Si la columna se define como obligatoria ('' | * Si la columna se define como obligatoria ('' | ||
* Toda restricción de clave ajena tiene un nombre. Para ver el nombre de las restricciones de una tabla: '' | * Toda restricción de clave ajena tiene un nombre. Para ver el nombre de las restricciones de una tabla: '' | ||
Línea 371: | Línea 400: | ||
=== Condiciones === | === Condiciones === | ||
- | De forma más genérica, podemos forzar a que los valores de determinados campos de la tabla cumplan una ciertas condiciones. En caso contrario no se permitirá la inserción de esa fila en dicha tabla. | + | De forma más genérica, podemos forzar a que los valores de determinados campos de la tabla cumplan una ciertas condiciones. |
Lo habitual es definir una columna como de tipo enumeración ('' | Lo habitual es definir una columna como de tipo enumeración ('' | ||
Línea 382: | Línea 411: | ||
=== Valores únicos === | === Valores únicos === | ||
- | La restricción '' | + | La restricción '' |
<code sql> | <code sql> | ||
email VARCHAR(100) UNIQUE | email VARCHAR(100) UNIQUE | ||
+ | |||
+ | // o para varias columnas | ||
+ | . . . | ||
+ | email VARCHAR(100), | ||
+ | login VARCHAR(50), | ||
+ | UNIQUE (email, login) | ||
</ | </ | ||
+ | === Índices === | ||
+ | |||
+ | Los índices se utilizan para obtener datos de las tablas de una forma más rápida. En definitiva, lo que el SGBD hace es asociar el valor de una columna (sobre la que definimos el índice) con su posición en la tabla. De esa | ||
+ | |||
+ | Se recomienda su uso en aquellas columnas sobre las que se vayan a realizar búsquedas en una tabla. Por ejemplo, | ||
+ | |||
+ | <code sql> | ||
+ | CREATE TABLE libro( | ||
+ | id INT ..., | ||
+ | titulo ..., | ||
+ | autor VARCHAR(20), | ||
+ | INDEX autor_index (autor) | ||
+ | ); | ||
+ | |||
+ | -- También puedo añadirlo cuando la tabla ya se ha creado | ||
+ | CREATE INDEX indice_autor ON libro(autor); | ||
+ | </ | ||
+ | |||
+ | Por otra parte, los índices presentan algún inconveniente como puede ser el hecho de que ocupan espacio en la tabla, y dependiendo del caso podría llegar a ocupar más espacio que la propia tabla, por lo que hay que tener cuidado a la hora de escoger una columna como índice. También hay que tener en cuenta que hay que actualizar el índice cada vez que se modifica la columna en la tabla por lo que no resulta conveniente elegir como índices | ||
+ | |||
+ | {{ indice.jpg |Uso de índices}} | ||
===== Creación de un script SQL ===== | ===== Creación de un script SQL ===== | ||
Línea 460: | Línea 516: | ||
<code sql> | <code sql> | ||
+ | |||
INSERT INTO nombre_tabla [ ' | INSERT INTO nombre_tabla [ ' | ||
{ VALUES ' | { VALUES ' | ||
+ | |||
</ | </ | ||
bloque4/sql.1646753854.txt.gz · Última modificación: 2024/09/16 19:34 (editor externo)