MYSQL
MySQL es uno de los sistemas de gestión de
bases de datos más populares del mercado. Se trata de un SGBD basado en el
modelo relacional, con licencia dual GPL y propietaria, desarrollado por MySQL
AB, una compañía propiedad de Sun Microsystems, creadores de Java, desde Enero
de 2008.
ascii, de American Standard Code for Information Interchange; también conocido
como US-ASCII. Es una codificación de caracteres de 7 bits basado en el
alfabeto inglés con 95 caracteres imprimibles.
latin1, el juego de caracteres por defecto en MySQL. Contrariamente a lo que
cabría esperar se trata de la codificación ANSI / CP1252 / WinLatin1 /
Windows-1252 y no del estándar de la ISO 8859-1 o del estándar de la IANA
ISO-8859-1 (nótese el guión extra; se trata de un super conjunto de ISO
8859-1), que son los que se suelen conocer como Latin-1. Los tres son bastante
parecidos, por lo que a menudo se consideran equivalentes erróneamente, y son
causa de confusión habitual (de hecho el propio MySQL tenía un bug relacionado). En
concreto CP1252 se diferencia de ISO-8859-1 en que se utiliza el rango
0×80-0x9F para representar distintos caracteres imprimibles, como el símbolo
del euro o el de la libra, en lugar de caracteres de control. A diferencia de
ASCII, CP1252, y por lo tanto ISO 8859-1 e ISO-8859-1, son juegos de caracteres
de 8 bits, por lo que permiten representar 256 caracteres distintos. Los tres
incluyen los caracteres necesarios para representar textos en las lenguas de
Europa occidental: afrikaans, alemán, aragonés, asturiano, catalán, danés,
escocés, español, feroés, finés, francés, gaélico, gallego, inglés, islandés,
italiano, neerlandés, noruego, portugués, sueco y vasco.
utf8, de 8-bit Unicode Transformation Format. Unicode es un acrónimo de
“Universal Code” (código universal) y es, como su nombre indica, un juego de
caracteres con el que podemos representar textos escritos en la mayoría de los
alfabetos del planeta: latino, árabe, hebreo, griego, japonés, chino, coreano,
cirílico, … UTF-8 en concreto utiliza de 1 a 4 bytes para representar los
caracteres, dependiendo del símbolo.
Para ascii la colación por defecto es ascii_general_ci, para latin1latin1_swedish_ci y para utf8 utf8_general_ci.
Los nombres de las
colaciones comienzan con el nombre del juego de caracteres asociado y terminan
con _ci (case insensitive) si la comparación no tiene en cuenta mayúsculas y minúsculas, _cs (case sensitive) en caso contrario y _bin si es binaria (también case sensitive).
BIT: Representación en binario de un número. Por defecto es un número binario
de 1 bit por lo que su valor puede ser 0 o 1. Se puede utilizar un número
distinto de bits, de 1 a 64, pasando el valor entre paréntesis, por ejemplo BIT(8).
TINYINT: Para representar enteros muy pequeños, de -128 a 127. Se puede utilizar
la palabra clave UNSIGNED para que almacene
solo números positivos, en cuyo caso el rango va de 0 a 255. También se puede
indicar el número mínimo de dígitos que queremos utilizar para mostrar el valor
encerrando esta cantidad entre paréntesis; si se utiliza la palabra clave ZEROFILL el valor se
rellenará con ceros a la izquierda hasta completar el número de dígitos
indicado. Esto es así para el resto de tipos enteros, pero se obviará por
considerarse de poca utilidad.
BOOL: Sinónimo de TINYINT(1).
El valor 0 se considera falso, el resto verdadero.
BOOLEAN: Sinónimo de TINYINT(1).
El valor 0 se considera falso, el resto verdadero.
SMALLINT: Un entero pequeño, de -32768 a 32767. Si se utiliza UNSIGNED el rango va de 0 a
65535.
MEDIUMINT: Un entero de tamaño medio, de -8388608 a 8388607. Si se usaUNSIGNED,
de 0 a 16777215.
INT: Un entero, con rango de -2147483648 a 2147483647 y de 0 a 4294967295 si
esUNSIGNED.
INTEGER: Sinónimo de INT.
BIGINT: Un entero grande, de -9223372036854775808 a 9223372036854775807 y de 0 a
18446744073709551615 para los UNSIGNED
SERIAL: Alias para BIGINT UNSIGNED
NOT NULL AUTO_INCREMENT UNIQUE.
FLOAT: Un número decimal en coma flotante. Los valores permitidos son el 0 y los
valores de -3.402823466E+38 a -1.175494351E-38 y de 1.175494351E-38 a
3.402823466E+38 aunque el rango puede ser menor dependiendo de la máquina y el
sistema operativo utilizado. También podemos encontrarnos con algo como FLOAT(3, 2) que indicaría que
queremos 3 dígitos, 2 de ellos para los decimales. En este casoUNSIGNED solo sirve para
indicar que no permitimos números negativos. Es importante tener en cuenta que
los valores FLOAT no son exactos,
solo es preciso hasta, aproximadamente, 7 decimales. Si se necesita más
precisión hay que utilizar el tipoDECIMAL.
DOUBLE: Un número en coma flotante de precisión doble. Los valores permitidos van
de -1.7976931348623157E+308 a -2.2250738585072014E-308 y de
2.2250738585072014E-308 a 1.7976931348623157E+308, además del 0, aunque el
rango puede ser menor dependiendo de la máquina y el sistema operativo
utilizado. Como FLOAT,
los valoresDOUBLE no son exactos. Es
preciso hasta, aproximadamente, 15 decimales. Si se necesita mayor precisión
hay que utilizar el tipo DECIMAL.
REAL: Sinónimo de DOUBLE,
a menos que esté activado el modo REAL_AS_FLOAT,
en cuyo caso funciona como sinónimo de FLOAT.
DOUBLE PRECISION: Sinónimo de DOUBLE.
DECIMAL: Para representar números decimales de forma más precisa que FLOAT yDOUBLE.
DEC: Sinónimo de DECIMAL
NUMERIC: Sinónimo de DECIMAL.
Los tipos relativos
a fechas y horas son los siguientes:
DATE: Para representar una fecha en formato YYYY-MM-DD. El rango soportado va desde
1000-01-01 a 9999-12-31.
DATETIME: Una combinación de fecha y hora en formato YYYY-MM-DD HH:MM:SS. El rango
soportado va desde 1000-01-01 00:00:00 a 9999-12-31 23:59:59.
TIMESTAMP: Un timestamp. El rango va desde
1970-01-01 00:00:01 UTC a 2038-01-09 03:14:07 UTC. Si se asigna el valor NULL a un TIMESTAMP se almacenará la
fecha y hora actual, por lo que puede ser útil para saber cuándo se realizó la
última insección o actualización.
TIME: Una hora. El valor se muestra en formato HH:MM:SS. El rango va de
-838:59:59 a 838:59:59.
YEAR: Un año en formato YYYY. Los valores admitidos son 0000 y los valores de
1901 a 2155. También se puede usar formato YY si se utiliza YEAR(2) en cuyo caso el
rango de valores admitidos va de 70 a 69, representando los años de 1970 a
2069.
Por último, los
tipos de texto son los siguiente:
CHAR: Cadenas de longitud fija cuyo número de caracteres se especifica entre
paréntesis (si no se especifica es 1 por defecto). Este mecanismo de indicar el
tamaño entre paréntesis escomún para el resto de los tipos, por lo que no se
obviará.
VARCHAR: Cadena de longitud variable. Opcionalmente se puede indicar el tamaño
máximo de la cadena con un número entre paréntesis.
BINARY: Similar a CHAR pero en este caso
las cadenas se almacenan como binarias.
VARBINARY: Similar a VARCHAR pero en este caso
las cadenas se almacenan como binarias.
BLOB: Un Binary Large OBject (gran objeto binario), para almacenar datos
binarios como imágenes. El tamaño máximo es de 65.535 bytes.
TINYBLOB: Un BLOB de pequeño tamaño
(un máximo de 255 bytes).
MEDIUMBLOB: Un BLOB de tamaño medio (un
máximo de 16.777.215 bytes; cerca de 16MB)
LONGBLOB: Un BLOB de gran tamaño (un
máximo de 4GB bytes)
TEXT: Un texto con un máximo de 65.535 caracteres (menos si se utilizan
caracteres multi-byte, evidentemente).
TINYTEXT: Un texto pequeño, con un máximo de 255 caracteres.
MEDIUMTEXT: Un texto de longitud media, con un máximo de 16.777.215 caracteres.
LONGTEXT: Un texto largo, con un máximo de 4.294.967.295 caracteres.
ENUM: Enumerado, un tipo cuyo valor puede ser una cadena de entre las indicadas
entre paréntesis.
SET: Similar a ENUM,
pero en este caso el campo puede tener cero o más valores de entre los indicados
entre paréntesis.
Para cada columna,
además del tipo, podemos definir otras propiedades
NOT NULL: No se puede introducir valores nulos.
DEFAULT valor: Para definir un
valor por defecto
AUTO_INCREMENT: Para cada tupla
añadida a la tabla el valor del campo crecerá en una unidad. Solo puede existir
una columna con AUTO_INCREMENT en cada tabla, y
debe tratarse de una clave.
UNIQUE KEY: Los valores no se pueden repetir. Si puede existir varias tuplas con
valor NULL para la columna.
PRIMARY KEY: La clave primaria de la relación. Los valores deben ser únicos y no
nulos. Una tabla, como es lógico, sólo puede tener una clave primaria. Si
necesitamos crear una clave primaria compuesta por varios campos no podemos
usar este método en el que definimos las propiedades de un solo campo, sino que
tendremos que utilizar una clausula PRIMARY KEY 8/b>
COMMENT "comentario": Comentarios
varios sobre el campo.
REFERENCES tabla (campo): Para crear una
clave foránea o ajena. De esta forma indicamos este valor toma valores de
claves de otra tabla, implementando así una relación 1:N. En esta clausula
también podemos indicar las reglas de integridad referencial, es decir, qué
ocurrirá cuando se borre (ON DELETE) o se actualice (ON UPDATE) la tupla referenciada. Los valores posibles son RESTRICT, que indica que no se permite la actualización o borrado; CASCADE, con la que la actualización o borrado se propaga; SET NULL, que establece las claves foráneas a NULL y NO ACTION, que en MySQL es similar a RESTRICT.
Las restricciones
posibles para la tabla son:
PRIMARY KEY (campo1, campo2, ...): Para indicar el
campo o campos que conforman la clave primaria.
KEY (campo1, campo2, ...): Para crear una
clave no primaria ni única. Esto creará un índice para el campo.
INDEX (campo1, campo2, ...): Sinónimo de KEY.
FOREIGN KEY (campo1, campo2, ...)
REFERENCES tabla (campo3, campo4, ...): Para crear una clave foránea o ajena. Sigue el mismo formato queREFERENCES para las columnas.
CHECK (expresion): En teoría, para definir
otras restricciones. En realidad esta opción se admite por el parser, pero se
ignora. Tenemos que recurrir a triggers o disparadores.
No hay comentarios:
Publicar un comentario