lunes, 21 de octubre de 2019

Creando una tabla con clave foránea en MySQL

Diagrama EER

En este ejemplo vamos a implementar el código SQL para MySQL de la siguientes tablas que tenemos según el diagrama EER. Si quieres el código SQL de la tabla "inquilinos" has clic aquí


Código SQL

El código resultante será el siguiente:

CREATE TABLE IF NOT EXISTS pagos (
   idpagos INT NOT NULL AUTO_INCREMENT,
   inquilino INT NOT NULL,
   monto DECIMAL(10,2) NOT NULL,
   fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (idpagos),
   CONSTRAINT fk_pago_inquilino
     FOREIGN KEY (inquilino)
     REFERENCES inquilinos (idinquilinos)
       ON DELETE NO ACTION
       ON UPDATE NO ACTION
)ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


  • El campo "inquilino" sera nuestra clave foránea, lo que significa que estará vinculado a la tabla "inquilinos", de tal manera que para agregar un pago, primero debemos tener por lo menos un inquilino, ya que el campo es "NOT NULL".
  • La clave "fk_pago_inquilino" es el nombre de la clave foránea debe ser única, lo que implica que no se podrá repetir este nombre en ningún campo o nombre de relación de esta base de datos.
  • Se usa las siguientes sentencias:
    • ON DELETE NO ACTION: Implica que si se desea eliminar un registro de "inquilinos" que tenga por lo menos un pago, saltará un error y no dejará borrarlo.
    • ON UPDATE NO ACTION: Implica que si se desea actualizar la clave primaria de un registro de "inquilinos" que tenga por lo menos un pago, saltará un error y no dejará cambiar la clave, pero ¿Por qué querríamos hacer eso?
  • ENGINE = InnoDB, nos garantiza que podremos utilizar claves foráneas y soporte del "commit" y "rollback"
  • DEFAULT CHARACTER SET = utf8; nos permite ingresar caracteres especiales como la "ñ" o vocales tildadas a nuestros registros.


Insertando datos de prueba

INSERT INTO pagos(inquilino, monto, fecha) 
   VALUES (1,400,CURRENT_TIMESTAMP),
          (2,300,"2019-10-18 18:30:00");

  • En el caso del campo "fecha", se emplea en el primer caso "CURRENT_TIMESTAMP" que devuelve la fecha y hora actual para el servidor MySQL, en el segundo caso se especifica la fecha y hora en el formato "YYYY-MM-DD HH:MM:SS".


No hay comentarios:

Publicar un comentario