Pregunta

Tengo una tabla llamada "usuarios" que contienen algunos campos como la identificación, parentid, Nombre.
Lo que quiero es alterar esta tabla para agregar nuevo auto unen relación de modo que enlazan a parentid Id, pero parentid es anulable. Quiero escribir esta DECLARACIÓN sql alter en MySQL sin dejar caer la tabla.

¿Fue útil?

Solución

¿Quiere decir que desea agregar una restricción de clave externa? Si es así, consulte las restricciones clave extranjero docs. He aquí un ejemplo, a partir de la creación de una tabla sencilla:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

Añadir un índice para la columna de la parent_id:

ALTER TABLE users
ADD INDEX `parent_id` (`parent_id`);

Añadir la restricción de clave externa:

ALTER TABLE users
ADD CONSTRAINT `fk_parent_id`
FOREIGN KEY `parent_id` (`parent_id`)
REFERENCES `users` (`id`);

Mostrar la nueva estructura de la tabla:

SHOW CREATE TABLE users;

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
  CONSTRAINT `fk_parent_id`
    FOREIGN KEY (`parent_id`)
    REFERENCES `users` (`id`)
) ENGINE=InnoDB;

Otros consejos

alter table Users add constraint parent foreign key (ParentId) references
  Users (Id);

Tenga en cuenta que si está trabajando con una tabla que contiene los datos, la creación relación de clave externa fallará si existen relaciones huérfanos. Encuentra y huérfanos fix antes de crear las claves externas!

SELECT * FROM users DONDE parent_id NO IN (SELECT ID DE users);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top