Tablas

Crear

Con clave única:

CREATE TABLE `nombre_tabla` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL,
  UNIQUE(`name`)
);

Con claves foráneas y clave única múltiple:

CREATE TABLE `mi_tabla` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `id_otra_tabla` INT UNSIGNED,
    `id_otra_distinta` INT UNSIGNED NOT NULL,
    `name` VARCHAR(255) NOT NULL,
    UNIQUE(`name`, `id_otra_tabla`),
    FOREIGN KEY (`id_otra_tabla`) REFERENCES otra_tabla(`id_otra_tabla`),
    FOREIGN KEY (`id_otra_distinta`) REFERENCES otra_distinta(`id_otra_distinta`)
);

Tabla con dos campos foráneos como clave primaria. Para crear relaciones 1-n:

CREATE TABLE `nombre_tabla` (
  `id_uno` INT UNSIGNED NOT NULL,
  `id_dos` INT UNSIGNED NOT NULL,
  FOREIGN KEY (`id_uno`)
    REFERENCES tabla_foranea_uno(`id_foraneo_uno`)
    ON DELETE CASCADE,
  FOREIGN KEY (`id_dos`)
  REFERENCES tabla_foranea_dos(`id_foraneo_dos`)
    ON DELETE CASCADE,
  PRIMARY KEY (`id_uno`, `id_dos`)
);

Modificar

Añadir campo:

ALTER TABLE `nombre_tabla` ADD `id_otra_tabla` int UNSIGNED default null;

Indicar un campo existente como foráneo e indicando un constraint. En este caso, al eliminarse el elemento padre otra_tabla id_otra_tabla se quedará en null.

ALTER TABLE `nombre_tabla`
ADD FOREIGN KEY (`id_otra_tabla`)
REFERENCES `otra_tabla`(`id_otra_tabla`) ON DELETE SET NULL;