Si bien considero saber usar SQL al nivel suficiente con el cual hacer una aplicación simple, al menos nunca me he visto en la necesidad de ir mas allá de hacer un left join, siempre olvido su sintaxis, por eso aquí mantendré una lista de comandos que uso constantemente.
Todos los datos son basados en MySQL, que es la base de datos que mas utilizo.
Lo mas basico, pero que siempre falla por una razon o por otra y debo buscar en que parte de la sintaxis falle.
create table usuario
(
id int primary key auto_increment,
nombre varchar(255) not null,
password binary(32) not null,
salt binary(16) not null,
trabajador int not null,
foreign key (trabajador) references trabajador (id),
inserted_at timestamp,
modified_at timestamp,
);
Cuando se crean foreign keys se tiene la opción de agregar on delete y on update constraints, siempre olvido exactamente que significa cada modo de estos constraints así que para ilustrarlos usare el siguiente modelo:
create table trabajador
(
id int primary,
nombre varchar(255) not null
);
create table usuario
(
id int primary key,
nombre varchar(255) not null,
trabajador_id int not null,
foreign key (trabajador_id) references trabajador on (id)
);
RESTRICT
(default): Si es que se intenta actualizar el id de la tabla
trabajador la operación sera rechazada mientras exista al menos un usuario
que referencie a ese trabajador.NO ACTION
: Lo mismo que RESTRICT
.CASCADE
: Si es que se intenta actualizar el id del trabajador, el id
también sera actualizado en todos los usuarios que referencien al
trabajador.SET NULL
: Al cambiar el id del trabajador, las referencias a este id en
la tabla usuario se harán nulas.RESTRICT
(default): Si es que se intenta eliminar el trabajador la
operación sera rechazada mientras exista al menos un usuario que tenga una
referencia a ese trabajador.NO ACTION
: Lo mismo que RESTRICT
.CASCADE
: Al eliminar un trabajador también se eliminaran todos los
usuarios que tengan su id asociado.SET NULL
: Cuando se elimine un trabajador, todas sus referencias en la
tabla usuarios sera llenadas con nulls.Siempre que tengo una tabla y la quiero relacionar con una recien creada aparece tema, nunca es facil encontrar ejemplos de la sintaxis porque siempre muestran como se hace dentro de un create table.
alter table usuario add constraint fk_usuario_trabajador
foreign key (trabajador_id) references trabajador (id);