Herramientas de usuario

Herramientas del sitio


bloque4:sql

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque4:sql [2022/05/13 07:38] – [Restricciones] fernandobloque4:sql [2024/09/16 19:34] (actual) – editor externo 127.0.0.1
Línea 197: 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 220: Línea 217:
 El tipo ''CHAR'' permite almacenar cadenas de caracteres de longitud fija entre 1 y 255 caracteres. La longitud de la cadena se debe especificar entre paréntesis en el momento de la declaración (''cadena CHAR(25)'').  El tipo ''CHAR'' permite almacenar cadenas de caracteres de longitud fija entre 1 y 255 caracteres. La longitud de la cadena se debe especificar entre paréntesis en el momento de la declaración (''cadena CHAR(25)''). 
  
-Por otro lado, el tipo ''VARCHAR'' permite almacenar cadenas de caracteres variables de hasta 4.000            caracteres. La declaración del tipo ''VARCHAR'' es similar a la de un tipo CHAR (''cadena VARCHAR(25)''). La principal y única diferencia entre estos dos tipos, es que el tipo ''CHAR'' declara una cadena fija de la longitud que se especifica mientras que en la declaración de un tipo ''VARCHAR'' lo que se especifica es un tamaño máximo, la cadena sólo ocupará el tamaño necesario para almacenar el dato que contenga (hasta llegar al máximo). En cualquier caso, no es posible almacenar cadenas de mayor tamaño al especificado en su declaración, puesto que el SGBD truncará el valor almacenándose sólo hasta la longitud establecida.+Por otro lado, el tipo ''VARCHAR'' permite almacenar cadenas de caracteres variables. La declaración del tipo ''VARCHAR'' es similar a la de un tipo CHAR (''cadena VARCHAR(25)''). La principal y única diferencia entre estos dos tipos, es que el tipo ''CHAR'' declara una cadena fija de la longitud que se especifica mientras que en la declaración de un tipo ''VARCHAR'' lo que se especifica es un tamaño máximo, la cadena sólo ocupará el tamaño necesario para almacenar el dato que contenga (hasta llegar al máximo). En cualquier caso, no es posible almacenar cadenas de mayor tamaño al especificado en su declaración, puesto que el SGBD truncará el valor almacenándose sólo hasta la longitud establecida.
                          
 == Tipo TEXT == == Tipo TEXT ==
Línea 231: 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 ''BIT'', ''TINYINT'', ''INT'', ''BIGINT'', ''FLOAT'' y ''DOUBLE'', para la representación de números enteros de menor o mayor tamaño, y para números en coma flotante de menor o mayor precisión, respectivamente.+Para la representación de tipos de datos numéricos. Los tipos más utilizados son ''BIT'', ''TINYINT'', ''INT'', ''BIGINT'', para la representación de números enteros de menor o mayor tamaño.
                          
 +Para número decimales tenemos los tipos ''FLOAT'' y ''DOUBLE'', números en coma flotante de menor o mayor precisión, respectivamente. En este caso conviene tener en cuenta los problemas de precisión ((https://dev.mysql.com/doc/refman/5.5/en/problems-with-float.html)) que existen con estos tipos de datos. Si necesitamos almacenar valores en los que es muy importante la precisión decimal, podemos utilizar ''DECIMAL(d,n)'', //d// representa la cantidad de digitos del valor, y //n// la cantidad de decimales después de la coma.
 +
 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 ''UNSIGNED'' tras definir el tipo de éste. 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 ''UNSIGNED'' tras definir el tipo de éste.
  
Línea 239: Línea 238:
 </code> </code>
                          
-Para el caso de los números de coma flotante conviene tener en cuenta los problemas de precisión ((https://dev.mysql.com/doc/refman/5.5/en/problems-with-float.html)) que existen con estos tipos de datos. 
  
 === Tipos para fechas === === Tipos para fechas ===
  
-Los tipos más utilizado para almacenar valores de fechas (''DATE'') o fechas con hora (''DATETIME''). Por defecto            el formato más utilizado es ''DD/MM/YY'' ó ''DD/MM/YYYY''.+Los tipos más utilizado para almacenar valores de fechas (''DATE'') o fechas con hora (''DATETIME''). Por defecto            el formato utilizado es ''YYYY-MM-DD'' ''YYYY-MM-DD HH:MM:SS'' respectivamente. 
 + 
 +También se puede usar el tipo ''TIMESTAMP'' para almacenar una marca de tiempo (fecha y hora ''YYYY-MM-DD HH:MM:SS''). Además, permite el uso de la constante ''CURRENT_TIMESTAMP'' en la definición de la columna al definirle un valor por defecto cuando se crea la tabla
  
-También se puede usar el tipo ''TIMESTAMP'' para almacenar una marca de tiempo (fecha y hora). Además, permite el uso de la constante ''CURRENT_TIMESTAMP'' en la definición de la columna al definirle un valor por defecto cuando se crea la tabla.+La diferencia entre ''TIMESTAMP'' frente a ''DATETIME'', es que a pesar de mostrar el mismo formato, TIMESTAMP almacena también la zona horaria, y devuelve el valor modificado si cambiamos la zona horaria del servidor.
  
 === Tipo booleano === === Tipo booleano ===
  
-Permite almacenar valores lógicos Verdadero/Falso o Sí/No. Cuando usamos el tipo ''BOOLEAN'' a la hora de definir una columna internamente MySQL lo define usando el tipo ''TINYINT(1)'', que simplemente almacena los valores 0 y 1 para indicar los valores lógicos Verdadero y Falso respectivamente. Así, podremos utilizar los valores ''TRUE'' ó ''FALSE'' o directamente asignar 1 ó 0 para asignar valor.+Permite almacenar valores lógicos Verdadero/Falso o Sí/No. Cuando usamos el tipo ''BOOLEAN'' para definir un campo MySQL define internamente la columna como del tipo ''TINYINT'', utilizando los valores 0 y 1 para indicar los valores lógicos Verdadero y Falsorespectivamente. Así, podremos utilizar los valores ''TRUE'' ó ''FALSE'' o directamente asignar 1 ó 0 para asignar valor.
  
 ==== Restricciones ==== ==== Restricciones ====
Línea 280: Línea 280:
 </code> </code>
  
-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, siguiendo            esta sintaxis+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, siguiendo            esta sintaxis
 <code sql> <code sql>
 CREATE TABLE personas( CREATE TABLE personas(
Línea 291: Línea 291:
  
 === Autonumérico === === Autonumérico ===
-Es una propiedad que solo se nos permite añadir columnas de tipo entero que sean clave primaria. Hace que en cada inserción de nuevos registros en esa tabla, la clave primaria se genere automáticamente de forma secuencial. Es realmente útil ya que nos evita tener que dar valor a esa columna, siendo el motor de la base de datos el encargado de que sea siempre distinta.+Es una propiedad que solo se puede aplicar claves primarias de tipo entero. Hace que en cada inserción de nuevos registros en esa tabla, la clave primaria se genere automáticamente de forma secuencial. Es realmente útil ya que nos evita tener que dar valor a esa columna, siendo el motor de la base de datos el encargado de que sea siempre distinta.
  
 La forma de definirlo es añadiendo la restricción ''AUTO_INCREMENT'' en la definición de la columna que se ha definido como clave primaria: La forma de definirlo es añadiendo la restricción ''AUTO_INCREMENT'' en la definición de la columna que se ha definido como clave primaria:
Línea 302: Línea 302:
 ALTER TABLE mitabla AUTO_INCREMENT = 1; ALTER TABLE mitabla AUTO_INCREMENT = 1;
 </code> </code>
 +Si la tabla no está vacía, debe ser mayor que el último valor de esa columna.
  
 === Clave ajena === === Clave ajena ===
Línea 429: Línea 430:
  
 <code sql> <code sql>
 +CREATE TABLE libro(
 +id INT ...,
 +titulo ...,
 +autor VARCHAR(20),
 INDEX autor_index (autor) INDEX autor_index (autor)
 +);
 + 
 +-- También puedo añadirlo cuando la tabla ya se ha creado
 +CREATE INDEX indice_autor ON libro(autor);
 </code> </code>
  
bloque4/sql.1652427508.txt.gz · Última modificación: 2024/09/16 19:34 (editor externo)