Home Bases de Datos MySQL Creación de tablas

PostHeaderIcon Creación de tablas

Usar puntuación: / 5
MaloBueno 

Con la sentencia CREATE TABLE podemos crear una tabla con ciertas condiciones y propiedades.

 

CREATE TABLE nombre-tabla-nueva (

 

Nombre-campo1             tipo de dato                 otras propiedades,

Nombre-campo2             tipo de dato                 otras propiedades,

)

Ejemplo:

CREATE TABLE asignaturas(

     COD_ASIG int,

     NOMBRE_ASIG varchar(30),

)

Propiedades y restricciones (CONSTRAINT):

  • PRIMARY KEY: Clave primaria
  • NOT NULL: Indica que el campo tiene que tener un valor
  • FOREIGN KEY: Clave ajena
  • DEFAULT: Valor por defecto
  • CHECK: Verificación de condiciones
  • UNIQUE: Evita valores repetidos en la columna
  • AUTO INCREMENT: Valor que no hay que ir dándole valores porque se incrementa solo. MySQL sólo permite un campo AUTO INCREMENT por tabla, y además debe ser la clave principal.

Estas restricciones permiten trabajar con tablas transaccionales, que permiten hacer un rollback, y con tablas no transaccionales que no lo permiten. Por eso las restricciones son algo distintas en MySQL respecto a otras bases de datos. 

Ejemplo: Tabla alumnos V1

CREATE TABLE Alumnos(

     COD_ALUMNO INT AUTO_INCREMENT,

     NOMBRE VARCHAR (20) NOT NULL,

     DIRECCIÓN VARCHAR (20),

     FECHA_NACIMIENTO DATE DEFAULT CURDATE(),

     SEXO ENUM('HOMBRE', 'MUJER'),

     EXTRANJERO VARCHAR(2),

     CONSTRAINT PK PRIMARY KEY (Cod_Empleado),

     CONSTRAINT CH1 CHECK (FECHA_NACIMIENTO <= CURDATE ())

);

Aparece la palabra ENUM que limita los valores posibles a los descritos entre paréntesis.

Esta tabla se podía haber creado de otra manera: (V2)

CREATE TABLE Alumnos(

     COD_ALUMNO INT AUTO_INCREMENT PRIMARY KEY

     NOMBRE VARCHAR (20) NOT NULL,

     DIRECCIÓN VARCHAR (20),

     FECHA_NACIMIENTO DATE DEFAULT CURDATE(),

      SEXO ENUM('HOMBRE', 'MUJER'),

     EXTRANJERO VARCHAR(2),

     CONSTRAINT CH1 CHECK (FECHA_NACIMIENTO <= CURDATE ())

);

PRIMARY KEY DE MÁS DE UN CAMPO

Si queremos poner más de un campo como clave primaria de una tabla, definiremos esos campos como claves primarias al final de esta tabla como si fuera un CONSTRAINT.

CREATE TABLE nombre-tabla-nueva  (

nombre-campo1 TipoDato  otrasPropiedades,

nombre-campo2 TipoDato otrasPropiedades,

…,

CONSTRAINT nombre PRIMARY KEY (campo1, campo2…)

);

Ejemplo:Tabla cursan v1.

CREATE TABLE cursan(

     alumno int,

     asignatura int,

     nota int,

     CONSTRAINT PK PRIMARY KEY (alumno, asignatura),

     CONSTRAINT FK1 FOREIGN KEY alumno REFERENCES alumnos(COD_ALUMNO),

     CONSTRAINT FK2 FOREIGN KEY asignatura REFERENCES asignaturas(COD_ASIGNATURA)

)

Nótese la aparición de claves ajenas como CONSTRAINT. Se podían haber definido de la siguiente manera siendo igual de válidas (V2)

CREATE TABLE cursan(

     alumno int REFERENCES alumnos(COD_ALUMNO),

     asignatura int REFERENCES asignaturas(COD_ASIGNATURA),

     nota int,

     CONSTRAINT PK PRIMARY KEY (alumno, asignatura)

)

Ejercicio: Crear una tabla de profesores

Solución: 

CREATE TABLE PROFESORES (

     COD_PROFESOR int AUTO_INCREMENT PRIMARY KEY,

     NOMBRE VARCHAR(50) NOT NULL,

     ESTUDIOS VARCHAR (30)

)

EJERCICIO 2:

Crear una tabla de empleados, departamentos y otra de provincias

Empleados tendrá:

  • Nombre
  • Edad
  • Provincia a la que pertenece

Departamentos

  • el nombre
  • la localidad

Provincias tendrá:

  • Código
  • Nombre

SOLUCIÓN:

CREATE DATABASE EMPRESA;

CREATE TABLE provincias (

cod_pro INT PRIMARY KEY,

nom_pro VARCHAR(30)

);

CREATE TABLE empleados(

nom_emple VARCHAR (30),

edad INT,

cod_emple INT PRIMARY KEY,

ca_cod_pro INT,

CONSTRAINT tabla_2 FOREIGN KEY (ca_cod_pro) REFERENCES provincias (cod_pro)

);

CREATE TABLE departamentos (

nom_dep VARCHAR (20),

localidad VARCHAR (15)

);

EJERCICIO 3:

Una inmobiliaria desea almacenar información sobre los pisos que tiene en venta. La información de cada piso es:

  • Calle
  • Número
  • Piso
  • Puerta
  • Código Postal
  • Metros cuadrados
  • Comentarios
  • Código de la zona
  • DNI del propietario

Zonas:

  • Nombre de la zona
  • Datos de la zona

Propietario

  • DNI
  • Nombre
  • Teléfono

SOLUCIÓN:

CREATE TABLE pisos (

CREATE TABLE zonas (

nom_zona VARCHAR (15) PRIMARY KEY,

datos_zona VARCHAR (30)

);

CREATE TABLE propietario (

DNI VARCHAR (15) PRIMARY KEY,

nom_pro VARCHAR (30),

telefono INT

);

CREATE TABLE pisos (

calle VARCHAR (20) PRIMARY KEY,

numero INT,

piso INT,

puerta VARCHAR (5),

cp INT,

metros_cua INT,

comen VARCHAR (40),

ca_cod_zona VARCHAR (15),

ca_DNI VARCHAR (15),

CONSTRAINT tabla1 FOREIGN KEY (ca_cod_zona) REFERENCES zonas (nom_zona),

CONSTRAINT tabla2 FOREIGN KEY (ca_DNI) REFERENCES propietario (DNI)

);

NOTA: En MySQL y en general en cualquier SGBD el orden de los factores sí altera el producto: No se puede crear una FOREIGN KEY si primero no se ha creado la tabla. La única excepción que se podría hacer es crearla después, con la sentencia ALTER TABLE que veremos más adelante.

EJERCICIOS PARA RESOLVER:

1. Crear la tabla usuario que contendrá los siguientes campos:

  • DNI
  • Nombre
  • Departamento
  • Fecha de alta
Hacer que aparezca por defecto el departamento “0” en el campo departamento y la fecha del día (investigar en Internet cómo se hace en SQL) en el campo fecha.

2. El gobierno desea almacenar en una tabla las personas de la Comunidad Autónoma. Necesita almacenar Personas, Isla y Provincia

Personas

  • DNI
  • Nombre
  • Dirección
  • Población
  • Provincia
  • Isla

Provincias

  • Código de la provincia
  • Isla
  • Nombre

Islas

  • Nombre de la isla
 

Escribir un comentario


Código de seguridad
Refescar

PostHeaderIcon Más Comentado

PostHeaderIcon Últimos Comentarios

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy436
mod_vvisit_counterAyer950
mod_vvisit_counterEsta semana1386
mod_vvisit_counterLa semana pasada8055
mod_vvisit_counterEste mes23151
mod_vvisit_counterEl mes pasado31024
mod_vvisit_counterTodos los días1571729

We have: 33 guests online
Hoy es: Abr 24, 2018