MySQL 1
MySQL 1
Contenidos Generales:
Una base de datos es una colección estructurada de datos. Puede ser cualquier cosa,
desde una simple lista de compras hasta una galería de imágenes o la gran cantidad de
información en una red corporativa. Para agregar, acceder y procesar datos almacenados
en una base de datos informática, se necesita un sistema de administración de bases de
datos como MySQL Server. Dado que las computadoras son muy buenas para manejar
grandes cantidades de datos, los sistemas de administración de bases de datos juegan un
papel central en los sistemas actuales, como utilidades independientes o como parte de
otras aplicaciones.
Una base de datos relacional almacena datos en tablas separadas en lugar de poner
todos los datos en un gran archivo. Las estructuras de la base de datos están organizadas
en archivos físicos optimizados para la velocidad. El modelo lógico, con objetos como
bases de datos, tablas, vistas, filas y columnas, ofrece un entorno de programación
flexible.
Esto configura reglas que gobiernan las relaciones entre diferentes campos de datos,
como uno a uno, uno a muchos, único, obligatorio u opcional, y " punteros " entre
diferentes tablas. La base de datos hace cumplir estas reglas, de modo que con una base
de datos bien diseñada, tu aplicación nunca ve datos inconsistentes, duplicados,
huérfanos, desactualizados o faltantes.
Las letras SQL de " MySQL " significan " Lenguaje de consulta estructurado " . SQL es el
lenguaje estandarizado más común utilizado para acceder a bases de datos.
Dependiendo de tu entorno de programación, podés ingresar SQL directamente (por
ejemplo, para generar informes), incrustar declaraciones SQL en código escrito en otro
idioma o usar una API específica del idioma que oculta la sintaxis SQL.
SQL está definido por el estándar ANSI / ISO SQL. El estándar SQL ha evolucionado
desde 1986 y existen varias versiones. Por ejemplo, “ SQL-92 ” se refiere al estándar
publicado en 1992, “ SQL: 1999 ” se refiere al estándar publicado en 1999 y “ SQL: 2003 ”
se refiere a la versión actual del estándar. Usamos la frase " el estándar SQL " para
referirnos a la versión actual del estándar SQL en cualquier momento.
MySQL Server se desarrolló originalmente para manejar grandes bases de datos mucho
más rápido que las soluciones existentes y se ha utilizado con éxito en entornos de
producción muy exigentes durante varios años. Aunque en constante desarrollo, MySQL
Server ofrece hoy en día un conjunto de funciones útiles y variadas. Su conectividad,
velocidad y seguridad hacen que MySQL Server sea muy adecuado para acceder a bases
de datos en Internet.
MySQL Server, es también, como una biblioteca multiproceso integrada que puede
vincular a su aplicación para obtener un producto independiente más pequeño, más
rápido y más fácil de administrar.
Formatos
La información puede organizarse en tablas o en documentos. Cuando organizamos
información en un Excel, lo hacemos en formato tabla y, cuando los médicos hacen
fichas a sus pacientes, están guardando la información en documentos. Lo habitual
es que las bases de datos basadas en tablas sean bases de datos relacionales y las
basadas en documentos sean no relacionales, pero esto no tiene que ser siempre
así. En realidad, una tabla puede transformarse en documentos, cada uno formado
por cada fila de la tabla. Solo es una cuestión de visualización.
Los dos esquemas de la imagen contienen exactamente la misma información. Lo
único que cambia aquí es el formato: cada documento de la figura de la derecha es
una fila de la figura de la izquierda.
Se ve más claro en la tabla, ¿verdad? Lo que pasa es que a menudo en una base
de datos no relacional una unidad de datos puede llegar a ser demasiado compleja
como para plasmarlo en una tabla. Por ejemplo, en el documento JSON de la
imagen que se muestra a continuación, al tener elementos jerárquicos, es más difícil
plasmarlo en una tabla plana. Una solución sería plasmarlo en varias tablas y, por
tanto, necesitar de relaciones.
Esto explica por qué las bases de datos relacionales suelen servirse de tablas y las
no relacionales de documentos JSON. En cualquier caso, a día de hoy, las bases de
datos más competitivas suelen permitir, de una forma u otra, operaciones de los dos
tipos. Por ejemplo, el servicio de base de datos en la nube BigQuery que ofrece
Google es, en principio, una base de datos de lenguaje de consulta SQL, por lo que
permite fácilmente relacionar varias tablas, pero, a su vez, permite insertar
elementos jerárquicos JSON, más propios de bases de datos no relacionales.
Diseño
La diferencia entre el éxito y el fracaso recae, sobre todo, en el diseño del modelo.
Es decir, si se decide que el mejor enfoque es usar una base de datos relacional, no
es suficiente con meter la información a lo bruto en una base de datos relacional y
esperar a que se relacione sola, porque eso no va a ocurrir. De nada sirve elegir la
base de datos más apropiada para nuestro sistema, si luego no se hace un buen
diseño.
Concepto de entidad, atributo y relación
Se define una entidad (o instancia) como una unidad de una base de datos que contiene
información. Esta unidad es una representación dentro de la base de datos de un objeto,
persona, empresa... etc, del mundo real, y como tal posee ciertos atributos que la
diferencian del resto de entidades. Así por ejemplo, en una base de datos de una oficina,
una entidad podría ser el material de oficina, otra los empleados, otra los clientes, incluso
el ambiente laboral, la empatía y cosas más abstractas. Cada una de estas entidades
tendría ciertos atributos propios. Así, los empleados tendrían atributos como nombre,
edad, estatura... las computadoras otros como un nro de serie, procesador, año de
compra... y así para cada una de ellas.
En una base de datos compleja pueden existir entidades relacionadas entre sí por
diversos parámetros o atributos, de tal modo que la existencia de una puede ir ligada a la
existencia de otra. Así, las entidades pueden ser fuertes (existen por sí mismas) o débiles
(su existencia depende de que exista otra entidad). Las relaciones entre entidades
suelen describirse en el esquema de la estructura de la base de datos e incluso pueden
agruparse entre sí para formar conjuntos de entidades, también llamados clases.
El Modelo Entidad-Relación es de hecho uno de los más importantes a la hora de
diseñar e implementar una base de datos con éxito. Mediante este modelo se relacionan
una o varias entidades por sus atributos, que pueden ser comunes o no a varias de ellas.
Tipos de relaciones
1 a N (uno a muchos)
Por ejemplo: una persona puede tener muchos autos y viceversa, muchos autos pueden
ser de una persona.
1 a 1 (uno a uno)
Por ejemplo: a un alumno le pertenece únicamente una libreta y viceversa, una libreta
pertenece únicamente a un alumno.
N a N (muchos a muchos)
Por ejemplo: muchos alumnos pueden tener muchas materias y viceversa, muchas
materias pueden contener a muchos alumnos.
Instalación MySQL Server
1) Descargar el instalador de https://dev.mysql.com/downloads/installer/
PHPMYADMIN
phpMyAdmin es una herramienta escrita en PHP con la intención de manejar la
administración de MySQL a través de páginas web, utilizando Internet.
Actualmente puede crear y eliminar Bases de Datos, crear, eliminar y alterar tablas,
borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves
en campos, administrar privilegios y exportar datos en varios formatos.
Por ejemplo:
Los argumentos que comienzan con un guión simple o doble ( -, --) especifican las
opciones del programa. Las opciones suelen indicar el tipo de conexión que un programa
debe realizar con el servidor o afectar su modo operativo.
Los argumentos que no son de opción (argumentos sin guiones iniciales) proporcionan
información adicional al programa. Por ejemplo, el programa mysql interpreta el primer
argumento que no es de opción como un nombre de base de datos, por lo que el
comando mysql --user=root test indica que desea utilizar la test base de datos.
Las secciones posteriores que describen programas individuales indican qué opciones
admite un programa y describen el significado de cualquier argumento adicional que no
sea de opción.
--host(o -h),
que especifican los parámetros de conexión. Indican el host donde se ejecuta el servidor
MySQL y el nombre de usuario y contraseña de su cuenta MySQL.
Todos los programas cliente de MySQL comprenden estas opciones; te permiten
especificar a qué servidor conectarse y la cuenta a utilizar en ese servidor.
Es probable que este sea el caso si obtiene un error de " programa no encontrado " cada
vez que intenta ejecutar un programa MySQL desde cualquier directorio que no sea el
directorio bin. Para que sea más conveniente usar MySQL, puede agregar el nombre de la
ruta del directorio bin a la PATH configuración de la variable de entorno. Eso le permite
ejecutar un programa escribiendo solo su nombre, no su ruta completa. Por ejemplo,
si mysql está instalado c:\Archivos\mysql\bin, podés ejecutar el programa invocándolo
como mysql, y no es necesario invocarlo como /c:\Archivos\mysql\bin .
Por ejemplo, -? y --help son las formas cortas y largas de la opción que le indica a un
programa MySQL que muestre su mensaje de ayuda.
● Algunas opciones toman un valor después del nombre de la opción. Por ejemplo, -
h localhost o --host=localhost indican el host del servidor MySQL a un programa
cliente. El valor de la opción le dice al programa el nombre del host donde se
ejecuta el servidor MySQL.
● Para una opción larga que toma un valor, separá el nombre de la opción y el valor
con un signo =.
Para una opción corta que toma un valor, el valor de la opción puede seguir
inmediatamente a la letra de la opción, o puede haber un espacio entre: -hlocalhost y -h
localhost son equivalentes. Una excepción a esta regla es la opción para especificar tu
contraseña de MySQL. Esta opción se puede dar en forma larga como o como . En el
último caso (sin ningún valor de contraseña dado), el programa le solicita
interactivamente la contraseña. La opción de contraseña también se puede dar en forma
abreviada como --password=pass_val o como --p pass_val.
mysql -ptest
mysql -p test
El primer comando le indica a mysql que use un valor de contraseña de test, pero no
especifica una base de datos predeterminada. El segundo indica a mysql que solicite el
valor de la contraseña y que la utilice test como base de datos predeterminada.
Dentro de los nombres de las opciones, el guión ( -) y el subrayado ( _) se pueden usar
indistintamente. Por ejemplo, --skip-grant-tables y --skip_grant_tables son
equivalentes. (Sin embargo, los guiones iniciales no se pueden dar como guiones bajos).
El servidor MySQL tiene ciertas opciones de comando que pueden especificarse solo al
inicio, y un conjunto de variables del sistema, algunas de las cuales pueden configurarse
al inicio, en tiempo de ejecución o ambos. Los nombres de las variables del sistema usan
guiones bajos en lugar de guiones, y cuando se hace referencia a ellos en tiempo de
ejecución (por ejemplo, usando instrucciones SET o SELECT), deben escribirse
usando guiones bajos:
SELECT @@GLOBAL.general_log;
Al iniciar el servidor, la sintaxis de las variables del sistema es la misma que la de las
opciones de comando, por lo que dentro de los nombres de las variables, los guiones y
los guiones bajos se pueden usar indistintamente. Por ejemplo, --general_log=ON y --
general-log=ON son equivalentes. (Esto también es cierto para las variables del sistema
establecidas dentro de los archivos de opciones).
Por ejemplo, el siguiente comando le dice a mysqladmin que haga ping al servidor 1024
veces, durmiendo 10 segundos entre cada ping:
Cuando especifique nombres de archivo como valores de opción, evite el uso del carácter
~meta de shell. Puede que no se interprete como esperaba.
Los valores de opción que contienen espacios deben estar entre comillas cuando se dan
en la línea de comando. Por ejemplo, la opción --execute (ó -e) se puede utilizar
con mysql para pasar una o más sentencias SQL separadas por punto y coma al
servidor. Cuando se usa esta opción, mysql ejecuta las declaraciones en el valor de la
opción y sale. Las declaraciones deben ir entre comillas. Por ejemplo:
+----------------+
| VERSION() |
+----------------+
| 8.0.19 |
+----------------+
+---------------------+
| NOW() |
+--------------------------+
| 2019-09-03 10:36:48 |
+--------------------------+
shell>
Nota: La forma larga ( --execute) va seguida de un signo igual ( =). Para usar
valores entre comillas dentro de una declaración, debe escapar de las comillas
internas o usar un tipo de comillas diferente dentro de la declaración de las que se
usan para citar la declaración en sí. Las capacidades de su procesador de
comandos dictan sus opciones sobre si puede usar comillas simples o dobles y la
sintaxis para escapar de los caracteres de comillas. Por ejemplo, si su procesador
de comandos admite comillas con comillas simples o dobles, puede utilizar
comillas dobles alrededor de la declaración y comillas simples para cualquier valor
entre comillas dentro de la declaración. Por ej: “ ’ Hola Mundo ‘ “
El servidor MySQL
mysqld es un archivo ejecutable (un programa). mysqld, también conocido como MySQL
Server, es un único programa multiproceso que hace la mayor parte del trabajo en una
instalación de MySQL. No genera procesos adicionales. MySQL Server administra el
acceso al directorio de datos MySQL que contiene bases de datos y tablas. El directorio
de datos también es la ubicación predeterminada para otra información, como archivos de
registro y archivos de estado.
Cuando se inicia el servidor MySQL, escucha las conexiones de red de los programas
cliente y administra el acceso a las bases de datos en nombre de esos clientes.
MySQL Server también tiene un conjunto de variables del sistema que afectan su
funcionamiento mientras se ejecuta. Las variables del sistema se pueden configurar al
iniciar el servidor y muchas de ellas se pueden cambiar en tiempo de ejecución para
efectuar la reconfiguración dinámica del servidor.
MySQL Server también tiene un conjunto de variables de estado que brindan información
sobre su funcionamiento. Podés supervisar estas variables de estado para acceder a las
características de rendimiento en tiempo de ejecución.
El servidor MySQL, mysqld , tiene muchas opciones de comando y variables del sistema
que se pueden configurar al inicio para configurar su funcionamiento. Para determinar la
opción de comando predeterminada y los valores de las variables del sistema que utiliza
el servidor, ejecutá este comando:
El comando produce una lista de todas las opciones de mysqld y variables de sistema
configurables. Su salida incluye la opción predeterminada y los valores de las variables y
se parece a esto:
abort-slave-event-count 0
allow-suspicious-udfs FALSE
archive ON
auto-increment-increment 1
auto-increment-offset 1
autocommit TRUE
automatic-sp-privileges TRUE
avoid-temporal-upgrade FALSE
back-log 80
basedir /home/jon/bin/mysql-8.0/
tmpdir /tmp
transaction-alloc-block-size 8192
transaction-isolation REPEATABLE-READ
transaction-prealloc-size 4096
transaction-read-only FALSE
transaction-write-set-extraction OFF
updatable-views-with-limit YES
validate-user-plugins TRUE
verbose TRUE
wait-timeout 28800
Para ver los valores actuales de las variables del sistema que realmente utiliza el servidor
mientras se ejecuta, conectate y ejecutá esta declaración:
Cada parámetro de conexión tiene un valor predeterminado, pero puede anular los
valores predeterminados según sea necesario utilizando las opciones del programa
especificadas en la línea de comandos o en un archivo de opciones.
Para que un programa cliente se conecte al servidor MySQL, debés utilizar los parámetros
de conexión adecuados, como el nombre del host donde se ejecuta el servidor y el
nombre de usuario y contraseña de tu cuenta MySQL. Cada parámetro de conexión tiene
un valor predeterminado, pero puede anular los valores predeterminados según sea
necesario utilizando las opciones del programa especificadas en la línea de comandos o
en un archivo de opciones.
Los siguiente ejemplos usan el programa cliente mysql , pero los principios se aplican a
otros clientes como mysqldump , mysqladmin o mysqlshow .
Este comando invoca a mysql sin especificar ningún parámetro de conexión explícito:
mysql
Para especificar el nombre de host y el nombre de usuario de forma explícita, así como
una contraseña, proporcioná las opciones adecuadas en la línea de comandos. Para
seleccionar una base de datos predeterminada, incorporá un argumento de nombre de
base de datos.
Ejemplos:
En algunos sistemas, la rutina de la biblioteca que utiliza MySQL para solicitar una
contraseña limita automáticamente la contraseña a ocho caracteres. Esa limitación es una
propiedad de la biblioteca del sistema, no MySQL. Internamente, MySQL no tiene ningún
límite para la longitud de la contraseña. Otra solución es cambiar tu contraseña de MySQL
a un valor que tenga ocho o menos caracteres, pero que tiene la desventaja de que las
contraseñas más cortas tienden a ser menos seguras.
Los programas cliente determinan qué tipo de conexión realizar de la siguiente manera:
● Solo se utilizan o verifican las opciones de conexión que son relevantes para el
protocolo de transporte seleccionado. Se ignoran otras opciones de conexión. Por
ejemplo, --host=localhost en Unix, el cliente intenta conectarse al servidor local
utilizando un archivo de socket Unix, incluso si se da una opción --p o -P para
especificar un número de puerto TCP / IP.
Para asegurarse de que el cliente realiza una conexión TCP / IP con el servidor local,
utilice --host o -h para especificar un valor de nombre de host de 127.0.0.1(en lugar
de localhost), o la dirección IP o el nombre del servidor local. También puede especificar
el protocolo de transporte explícitamente, incluso para localhost, utilizando la opción --
protocol=TCP. Ejemplos:
mysql --host=127.0.0.1
mysql --protocol=TCP
Las conexiones a servidores remotos utilizan TCP / IP. Este comando se conecta al
servidor en ejecución remote.example.com utilizando el número de puerto predeterminado
(3306):
mysql --host=remote.example.com
Para este comando, el programa usa un archivo de socket en Unix y la --port opción se
ignora:
Para hacer que se utilice el número de puerto, fuerce una conexión TCP / IP. Por ejemplo,
invoque el programa de cualquiera de estas formas:
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
| ENCRYPTION [=] {'Y' | 'N'}
CREATE DATABASE crea una base de datos con el nombre de indicado en esa orden. Para utilizar
esta declaración, se necesita el privilegio o permiso del sistema de la base de datos. CREATE
CREATE DATABASE no está permitido dentro de una sesión que tiene una declaración activa
LOCK TABLES .
Cada create_option especifica una característica de la base de datos. Las características de la base
Para ver los conjuntos de caracteres y las intercalaciones disponibles, utilizá las instrucciones
predeterminado, que es heredado por las tablas creadas en la base de datos. Los valores permitidos
son 'Y' (cifrado activado) y 'N' (cifrado desactivado). Si la opción ENCRYPTION no se especifica ,
base de datos.
Una base de datos en MySQL se implementa como un directorio que contiene archivos que
corresponden a tablas en la base de datos. Debido a que no hay tablas en una base de datos cuando
se crea inicialmente, la declaración CREATE DATABASE crea solo un directorio bajo el directorio
de datos MySQL. Si el nombre de una base de datos contiene caracteres especiales, el nombre del
directorio de datos (por ejemplo, con mkdir ) no es compatible con MySQL 8.0.
Al crear una base de datos, dejá que el servidor administre el directorio y los archivos que contiene.
MySQL no tiene límite en la cantidad de bases de datos. El sistema de archivos subyacente puede
SHOW TABLES;
Crear una base de datos de prueba
WORLD.SQL
Los pasos se detallan para VSCode pero para MySQL Workbench y phpMyAdmin
resultan similares.
1) Descargar world.sql del Aula Virtual y abrir con Visual Studio Code.
2) Apretar botón derecho -> Run SQL Query.
CREATE TABLE crea una tabla con el nombre especificado. Debes tener el privilegio /
permiso CREATE para crear una tabla.
Hay varios aspectos importantes de CREATE TABLE, descritos en los siguientes temas
de esta sección:
Nombre de la tabla
tbl_name
IF NOT EXISTS
Evita que se produzca un error si la tabla existe. Sin embargo, no se verifica que la
tabla existente tenga una estructura idéntica a la indicada por el CREATE TABLE.
Tablas temporales
Puede utilizar la palabra clave TEMPORARY al crear una tabla. Una tabla TEMPORARY
es visible sólo dentro de la sesión actual y se elimina automáticamente cuando se cierra la
sesión.
LIKE
Usá CREATE TABLE ... LIKE para crear una tabla vacía basada en la definición de
otra tabla, incluidos los atributos e índices de columna definidos en la tabla original:
Para crear una tabla a partir de otra, agregá una declaración SELECT al final de la CREATE
TABLE declaración:
IGNORE | REPLACE
Las opciones IGNORE y REPLACE indican cómo manejar filas que duplican valores clave
únicos al copiar una tabla usando una declaración SELECT.
Hay un límite estricto de 4096 columnas por tabla, pero el máximo efectivo puede ser menor para
una tabla dada y depende de los factores de soporte del sistema operativo y hardware.
data_type
Tipos de datos de caracteres ( CHAR, VARCHAR, los tipos TEXT, ENUM, SET, y
cualquier sinónimo) pueden incluir CHARACTER SET para especificar el conjunto de
caracteres para la columna. CHARSET es sinónimo de CHARACTER SET. Se puede
especificar una colación para el juego de caracteres con el atributo COLLATE, junto con
cualquier otro atributo. Ejemplo:
Para columnas CHAR, VARCHAR, BINARY, y VARBINARY, los índices pueden ser
creados para el uso de sólo la parte principal de los valores de columna, utilizando la
sintaxis para especificar un índice de longitud de prefijo, y aunque las columnas también
se pueden indexar, se debe dar una longitud de prefijo . Por ejemplo:
Para un índice no único, se produce un error (si el modo SQL estricto está habilitado)
o la longitud del índice se reduce para que se encuentre dentro del tamaño máximo de
tipo de datos de columna y se genera una advertencia (si el modo SQL estricto no está
habilitado).
JSON las columnas no se pueden indexar. Podés solucionar esta restricción creando un
índice en una columna generada que extraiga un valor de la columna JSON.
En MySQL 8.0, sólo los motores de almacenamiento InnoDB, MyISAMy MEMORY soportan
índices en columnas que pueden tener NULLvalores. En otros casos, deberás declarar las
columnas indexadas como NOT NULL o tendrás como resultado de un error.
DEFAULT
AUTO_INCREMENT
Para recuperar un valor AUTO_INCREMENT después de insertar una fila, usá la función
SQL LAST_INSERT_ID() o la función API de C mysql_insert_id().
Solo puede haber una columna AUTO_INCREMENT por tabla, debe estar indexada y no
puede tener un valor DEFAULT. Una columna AUTO_INCREMENT funciona correctamente
si contiene sólo valores positivos. Se considera que insertar un número negativo es insertar un
número positivo muy grande. Esto se hace para evitar problemas de precisión cuando los
números " pasan " de positivo a negativo y también para garantizar que no obtengas
accidentalmente una columna AUTO_INCREMENT que contenga 0.
Por ejemplo:
SELECT * FROM mitabla WHERE auto_columna IS NULL
COMMENT
Se puede especificar un comentario para una columna con la opción COMMENT, hasta 1024
caracteres. El comentario se muestra mediante las declaraciones SHOW CREATE TABLE
y SHOW FULL COLUMNS.
PRIMARY KEY
Un índice único donde todas las columnas clave deben definirse como NOT NULL. Si no se
declaran explícitamente como NOT NULL, MySQL los declara implícitamente (y
silenciosamente). Una tabla sólo puede tener una PRIMARY KEY. El nombre de
la PRIMARY KEY es siempre PRIMARY, por lo que no se puede utilizar como nombre para
ningún otro tipo de índice.
Si no tiene un PRIMARY KEY y una aplicación solicita el PRIMARY KEY en sus tablas,
MySQL devuelve el primer UNIQUE índice que no tiene columnas NULL como PRIMARY
KEY.
PRIMARY KEY puede ser un índice de varias columnas. Sin embargo, no puede crear un
índice de varias columnas utilizando el atributo clave PRIMARY KEY en una especificación
de columna. Si lo hace, solo marcará esa columna como principal. Debe utilizar
una cláusula separada . PRIMARY KEY(key_part, ...)
KEY | INDEX
UNIQUE
Un índice UNIQUE crea una restricción tal que todos los valores del índice deben ser
distintos. Se produce un error si intenta agregar una nueva fila con un valor clave que coincide
con una fila existente. Para todos los motores, un índice UNIQUE permite múltiples
valores NULL para las columnas que pueden contener NULL. Si especifica un valor de
prefijo para una columna en un índice UNIQUE, los valores de columna deben ser únicos
dentro de la longitud del prefijo.
FULLTEXT
Un FULLTEXTíndice es un tipo especial de índice que se utiliza para búsquedas de texto
completo. Solo los motores de almacenamiento InnoDB y MyISAM admiten
índices FULLTEXT. Ellos sólo se pueden crear a partir de
columnas CHAR, VARCHARy TEXT. La indexación siempre ocurre en toda la columna; la
indexación del prefijo de la columna no es compatible y cualquier longitud de prefijo se ignora
si se especifica.
FOREIGN KEY
MySQL admite claves externas, que le permiten realizar referencias cruzadas de datos
relacionados entre tablas y restricciones de claves externas, que ayudan a mantener la
coherencia de estos datos dispersos.
Las tablas particionadas que emplean el motor InnoDB de almacenamiento no admiten claves
externas.
key_part
Una especificación key_part puede terminar con ASC o DESC para especificar si los
valores de índice se almacenan en orden ascendente o descendente. El valor
predeterminado es ascendente si no se proporciona un especificador de orden.
DESCRIBE alumnos;
Aparecerá lo siguiente:
Primary key y Foreign Key
Las claves primarias (Primary Keys) son valores que identifican de manera única
a cada fila o registro de una tabla, esto quiere decir que no se puede repetir. Por
ejemplo: un DNI, un código de producto, etc.
Una clave foránea (Foreign Key) es un campo de una tabla “X” que sirve para
enlazar o relacionar entre sí con otra tabla “Y” en la cual el campo de esta tabla es
una llave primaria (Primary Key). Para que sea una clave foránea un campo, esta
tiene que ser una llave primaria en otra tabla.
Por ejemplo, en la tabla clientes el dni es una primary key, pero en una tabla
“pedidos” representa a quién pertenece ese determinado pedido.
Eliminar y Modificar una Tabla
Eliminar una Tabla
Si tipeamos nuevamente:
Si tipeamos nuevamente:
Para los tipos enteros, M indica el ancho máximo de visualización. Para los tipos de
coma flotante y de coma fija, M es el número total de dígitos que se pueden
almacenar (la precisión). Para los tipos de cadena, M es la longitud máxima. El valor
máximo permitido de M depende del tipo de datos.
D se aplica a los tipos de coma flotante y de coma fija e indica el número de dígitos
que siguen al punto decimal (la escala). El valor máximo posible es 30, pero no debe
ser mayor que M-2.
Para un almacenamiento óptimo, debe intentar utilizar el tipo más preciso en todos los
casos. Por ejemplo, si se usa una columna de números enteros para valores en el rango
de 1a 99999, MEDIUMINT UNSIGNED es el mejor tipo. De los tipos que representan
todos los valores requeridos, este tipo utiliza la menor cantidad de almacenamiento.
Todos los cálculos básicos ( +, -, *, y /) con DECIMAL columnas se realizan con precisión
de 65 decimales (base 10) dígitos.
TinyInt:
Es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128
a 127. Sin signo, el rango de valores es de 0 a 255
Bit ó Bool:
SmallInt:
Número entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767.
Sin signo, el rango de valores es de 0 a 65535.
MediumInt:
Número entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a
8.388.607. Sin signo el rango va desde 0 a16777215.
Integer, Int:
Número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a
2147483647. Sin signo el rango va desde 0 a 429.4967.295
BigInt:
Número entero con o sin signo. Con signo el rango de valores va desde -
9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a
18.446.744.073.709.551.615.
Float:
Número pequeño en coma flotante de precisión simple. Los valores válidos van desde -
3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a
3.402823466E+38.
xReal, Double:
Número en coma flotante de precisión doble. Los valores permitidos van desde -
1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde
2.2250738585072014E-308 a 1.7976931348623157E+308
Tipo de Tamaño de
Campo Almacenamiento
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT 4 bytes
INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(X) 4 ú 8 bytes
FLOAT 4 bytes
DOUBLE 8 bytes
DOUBLE
8 bytes
PRECISION
REAL 8 bytes
Tipos fecha:
A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una
manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta
comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31.
Date:
Tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al
31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia
DateTime:
Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0
horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y
59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos
TimeStamp:
Tamañ
Formato
o
AñoMesDiaHoraMinutoSegun
14
do aaaammddhhmmss
AñoMesDiaHoraMinutoSegun
12
do aammddhhmmss
8 ñoMesDia aaaammdd
6 AñoMesDia aammdd
4 AñoMes aamm
2 Año aa
Time:
Almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a
838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'
Year:
Almacena un año. El rango de valores permitidos van desde el año 1901 al año 2155. El
campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el
año con dos o cuatro dígitos.
Tamaño de
Tipo de
Almacenamient
Campo
o
DATE 3 bytes
DATETIME 8 bytes
TIMESTAMP 4 bytes
TIME 3 bytes
YEAR 1 byte
Tipos de cadena:
Char(n):
Almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255
caracteres.
VarChar(n):
Almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255
caracteres.
Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los
tipo BLOB (Binary large Object)
Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.
TinyText y TinyBlob:
Blob y Text:
MediumBlob y MediumText:
LongBlob y LongText:
Un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que
debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb.
Enum:
Campo que puede tener un único valor de una lista que se especifica. El tipo Enum
acepta hasta 65535 valores distintos
Set:
Un campo que puede contener ninguno, uno o varios valores de una lista. La lista puede
tener un máximo de 64 valores.
CHAR(n) n bytes
VARCHAR(n) n +1 bytes
TINYBLOB,
Longitud+1 bytes
TINYTEXT
MEDIUMBLOB,
Longitud +3 bytes
MEDIUMTEXT
LONGBLOB,
Longitud +4 bytes
LONGTEXT
Almace
Almace VARCHAR(
Valor CHAR(4) namient
namiento 4)
o
'abcdefgh
'abcd' 4 bytes 'abcd' 5 bytes
'