Como ya se dijo la tónica de este curso va a ser SELECTs y más SELECTs, sin embargo antes de seguir desarrollando las consultas SQL debemos hacer un alto en el camino y hablar de los tipos de dato, asunto que trataremos a continuación, y de los operadores, que veremos en la próxima lección. Es importante entender bien estos conceptos.
¿Qué es un Tipo de Dato?
Cuando usted durante su infancia jugaba a encajar piezas en un juego similar a este:
una de las cosas que aprendía era diferenciar tipologías de estructuras y encajarlas en una ubicación compatible. A base de prueba y error finalmente lograba completar el rompecabezas, y tras muchas sesiones el juego era trivial y su ejecución evidente, usted había asimilado completamente el concepto que el juego plantea. Podemos decir que usted aprendió a asociar tipos de objetos con tipos de ubicación después de entender que, un tipo de objeto concreto solo encaja en su tipo de ubicación correspondiente.
Los tipos de dato son como este juego de niños, cualquier dato es de un tipo concreto, como las piezas del juego, y cuando diseñamos una tabla, o un impreso de papel, diseñamos los campos para ubicar un tipo de dato concreto.
Otro aspecto a tener en cuenta es el tamaño del dato, si al niño que juega con las piezas se las cambiamos por piezas de mayor tamaño, pero las ubicaciones las mantenemos igual, le crearemos un conflicto. De pronto lo que funcionaba ya no funciona. El niño ejecuta como antes el procedimiento exitoso, pero por mucho que se esfuerza las piezas no logran encajar. Si el niño es muy bruto y la diferencia de tamaño entre el objeto y su ubicación es suficientemente pequeña, las piezas pueden llegar a encajar, como pasa con los impresos donde, por ejemplo, en un campo diseñado para albergar treinta letras como máximo, siempre hay quien logra escribir treinta y dos, pero en una BD relacional esto es mucho más cerrado, no se puede calzar un cuarenta en un zapato del treinta y nueve, el SGBD devuelve un error y la operación es rechazada.
Así pues diremos que cualquier dato es de un tipo concreto y tiene un tamaño determinado, en consecuencia cuando diseñamos una tabla, diseñaremos sus campos para ubicar un tipo de dato concreto y estableceremos un tamaño máximo para cada campo.
Tipos de Dato
Tipo de dato es un concepto propio de la informática, presente en cualquier lenguaje de programación, donde cada entorno de programación tiene su modo particular de definirlos. Los hay muy diversos, clasificados por grupos, definidos por el usuario... pero para lo que aquí nos ocupa vamos a considerar solamente estos cuatro tipos de dato:
- Cadena (cadena de texto o alfanumérica)
- Número entero (sin decimales)
- Número decimal (parte entera + parte decimal)
- Fecha
Como ya se ha dicho, cada entorno tiene su modo particular de definir los tipos de dato, aunque todos ellos se rigen en mayor o menor medida por un estándar. Veamos como se define cada uno ellos en MariaDB:
-
Cadena:
VARCHAR(tamaño)Las cadenas de texto son de tipo
VARCHAR, y su tamaño máximo para un campo concreto se especifica indicando su longitud entre paréntesis. Por ejemplo, al diseñar la tabla EMPLEADOS, se debe valorar qué longitud máxima se establece para el campo NOMBRE, de manera que pueda albergar cualquier nombre de persona que se pueda dar. En el caso de la tabla EMPLEADOS se decidió que como mucho un nombre no sobrepasa las 30 letras o caracteres, de modo que el tipo de dato para este campo se definió como:VARCHAR(30). Es decir, en el campo NOMBRE de la tabla EMPLEADOS se puede guardar cualquier cadena alfanumérica de hasta 30 caracteres. Fíjese que al hablar de tamaño máximo estamos hablando de la ubicación para muchos posibles datos, no del dato en sí.Cuando indicamos constantes en una consulta SQL, las cadenas de texto a diferencia de los números, y ahora estamos hablando del dato en sí y no del tipo, siempre se entrecomillarán para indicar al SGBD que se trata de una dato de tipo cadena y no de un dato de tipo número. Esto es muy importante y es necesario que quede bien entendido. Por ejemplo, supongamos que queremos saber ¿qué salario tiene Elena Rubio Cuestas?, un modo de hacerlo es realizar una consulta SQL que filtre por los apellidos, para tal propósito estableceremos una constante alfanumérica en la cláusula
WHEREexigiendo que sea igual al campo APELLIDOS, y esta deberá ir entrecomillada.Fíjese que ahora no hablamos de tamaño máximo, en todo caso podemos hablar del tamaño concreto del dato. En el caso de la constante 'Rubio Cuestas' su tamaño es 13.
De hecho existen más tipos de dato para cadenas, cada uno con diferentes prestaciones, pero con el tipo
VARCHARnos sobra por ahora, así que asumiremos que es el único que existe. -
Número Entero:
INTA diferencia del tipo VARCHAR, donde establecemos el tamaño máximo (longitud), para los números enteros existen varios tipos de dato de tamaño fijo (
TINYINT,INT,BIGINT...). Elegiremos uno u otro en función del valor máximo que necesitemos almacenar.Cuando tratamos números es más correcto hablar de rango que de tamaño, es decir, bajo qué rango de valores (máximo y mínimo) podemos operar. Para simplificar, nos quedaremos con el estándar: el tipo
INT.El valor máximo y mínimo que puede alcanzar es suficientemente amplio para no preocuparse por ello en este curso. Recuerde que a diferencia de las cadenas, NO debe entrecomillarse. Ejemplo: 3467
-
Número Decimal:
DECIMAL(M, D)Para almacenar importes exactos como precios o salarios, evitaremos el tipo
FLOAT(que es aproximado) y usaremos el tipoDECIMAL.Este tipo requiere dos parámetros entre paréntesis:
1. El número TOTAL de dígitos (Precisión).
2. El número de decimales (Escala).Por ejemplo,
DECIMAL(10, 2)permite almacenar un número con 10 cifras en total, reservando 2 para los decimales (lo que deja 8 cifras para la parte entera). NO deben entrecomillarse. Ejemplo: 1500.50 -
Fecha:
DATEEl tipo
DATEtiene el tamaño apropiado para registrar un dato de: año + mes + día. Existe también el tipoDATETIME, por ejemplo, que además del día registra la hora, y algunos más que no vamos a considerar por ahora.Un dato de tipo
DATEy/oDATETIMEse expresa en forma de cadena con un formato determinado, de modo que quien procesa ese dato sabe cuál es el año, el día o el mes en función de la posición que ocupa en la cadena alfanumérica.Por ejemplo, tenemos el siguiente dato: 4 de noviembre de 2006, para expresar este dato debemos hacerlo de la siguiente forma: 'aaaammdd' donde aaaa indica cuatro dígitos para el año, mm dos dígitos para el mes y dd dos dígitos para el día. De modo que el 4 de noviembre de 2006 lo expresaríamos así: '20061104'. Al expresarse en forma de cadena, o si usted quiere, como una cadena con un formato concreto y sus posibles valores restringidos a una fecha válida, debe siempre entrecomillarse cuando aparece como constante en una consulta SQL.
Existen otros modos de trabajar con datos de tipo
DATE, pero por el momento supondremos que es el único modo que tenemos.
Ejemplo
Para finalizar la lección echemos un vistazo a los tipos de dato, bajo la columna titulada Type, de cada uno de los campos de la tabla EMPLEADOS:
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
|---|---|---|---|---|---|
| ID_EMPLEADO | int(10) unsigned | NO | PRI | NULL | |
| NOMBRE | varchar(30) | NO | NULL | ||
| APELLIDOS | varchar(50) | NO | NULL | ||
| F_NACIMIENTO | date | NO | NULL | ||
| SEXO | varchar(1) | NO | NULL | ||
| CARGO | varchar(30) | NO | NULL | ||
| SALARIO | decimal(10,2) unsigned | YES | NULL |
No confundir
int(10)con número entero de 10 dígitos, el 10 entre paréntesis no expresa el rango de valores posibles, esto es una particularidad de MariaDB y tiene que ver con el formato del número para impresión y no con su tamaño, como ya se dijo el rango de valores para el tipoINTes fijo y va implícito en el propio tipo de dato.
Observe también que tanto para el tipo
INTcomo para el tipoDECIMALpueden definirse como UNSIGNED (sin signo), esto permite ampliar el rango de números positivos en detrimento de los negativos, de modo que el valor mínimo en el caso de definirlo como UNSIGNED es cero y el número mayor posible a almacenar es el doble de grande que un campo numérico con signo, que sí permite números negativos. Digamos que al no necesitar números negativos se desplaza el rango de valores para tener más números positivos disponibles.
Resumen
Cualquier dato es de un tipo concreto y tiene un tamaño determinado, en consecuencia cuando diseñamos una tabla, diseñaremos sus campos para ubicar un tipo de dato concreto y estableceremos un tamaño máximo para cada campo.
El tamaño máximo o rango de valores puede ir implícito en el propio tipo de dato, como es el caso del tipo INT, o bien debe especificarse en tiempo de diseño como ocurre con el tipo VARCHAR.
Los datos de tipo VARCHAR o cadenas de texto van siempre entrecomillados, a diferencia de los números (INT y DECIMAL).
Las fechas o datos de tipo DATE, se expresan en forma de cadena con un formato determinado, concretamente: 'aaaammdd' donde aaaa es el año, mm es el mes y dd es el día. Al ser cadenas deben siempre entrecomillarse.
Ejercicios Propuestos
- Defina de que tipo de dato crearía los campos, y su tamaño mínimo si se tercia, para albergar los siguientes datos:
- 'Hola mundo'
- 9.36
- 4564
- 'Esto es un ejercicio de tipos de datos'
- 8 de enero de 1998
- Formatee en una cadena, según se ha visto en esta lección, las siguientes fechas.
- 23 de agosto de 1789
- 8 de enero de 1998
Reseñas de la lección 4
-
26/03/2026