Update de una tabla con llaves compuestas en MySql

publicado por: Anonymous

Necesito hacer un UPDATE a una tabla de mi base de datos y precisamente esta tabla tiene llaves compuestas y el campo a editar justamente es un PK
cualquier comentario se los agradeceré.

CREATE TABLE `t_seguimiento` (
`idSolicitud` int(11) NOT NULL,
`etapaProceso` varchar(50) NOT NULL,
`fechaActualizacion` datetime NOT NULL,
`usuarioRegistro` varchar(10) NOT NULL,
`estado` varchar(20) NOT NULL,
`observaciones` text NOT NULL)
ALTER TABLE `t_seguimiento`
ADD PRIMARY KEY (`idSolicitud`,`etapaProceso`,`fechaActualizacion`,`usuarioRegistro`);

Esa es mi tabla el campo a modificar es fechaActualizacion. mi pregunta es que si es posible hacer ese actualizacion.


$sql = "update t_seguimiento set idSolicitud="$_POST[idSolicitud]",etapaProceso="$_POST[etapaProceso]", fechaActualizacion="$_POST[fechaActualizacion]",usuarioRegistro="$_POST[usuarioRegistro]",estado="$_POST[estado]",observaciones="$_POST[observaciones]" where idSolicitud=".$_POST["idSolicitud"];

esa es la consulta que realice pero aun no realiza el update

solución

Por defecto puedes modificar una clave primaria (PK) como cualquier otra columna siempre y cuando no se este utilizando como clave foranea (FK) en algun registro de otra tabla, esta restricción mantiene la consistencia de los datos, ya que de no hacerlo, tendiamos claves foranes muertas en nuestras tabla. Para actualizar una PK es irrelevante si es simple o compuesta.

Para poder actualizar una clave primaria que esta siendo utilizada en registros de otras tablas como clave foranea, debemos utilizar ON UPDATE CASCADE, para que aplique la modificacion en todos los registros dependientes de esa clave primaria en otras tablas.

Para añadir la cascada debemos indicarlo al crear la clave foranea, por ejemplo:

CREATE TABLE tabla_hija (
    id INT,
    tabla_padre_id INT,
    PRIMARY KEY (id),

    CONSTRAINT nombre_para_la_FK
    FOREIGN KEY (tabla_padre_id)
        REFERENCES tabla_padre(id)
        ON UPDATE CASCADE

) ENGINE=INNODB;

Ademas de UPDATE CASCADE también existe DELETE CASCADE para permitir la eliminacion en cascada.

Si la tabla ya existe y queremos añadir cascada, primero debemos eliminar la clave foranea y volver a crearla con las opciones de cascade que queramos. Ejemplo:

ALTER TABLE tabla_hija 
DROP FOREIGN KEY nombre_FK;

ALTER TABLE tabla_hija
ADD CONSTRAINT nombre_para_la_FK
    FOREIGN KEY (tabla_padre_id)
    REFERENCES tabla_padre(id)
    ON DELETE CASCADE ON UPDATE CASCADE;

Una vez tenemos la cascada podemos actualizar la clave primaria sin problemas:

UPDATE tabla_padre SET id = 50
  WHERE id = 1;
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *