SQL - borrado restringido

 
Vista:

borrado restringido

Publicado por maria (1 intervención) el 19/08/2008 19:44:25
Hola.
Mi problema es para hacer todos los borrados restringido aunque para resumir voy a hablar solo de dos tablas como ejemplo.
Tengo dos tablas "pedido" y "banco" definidas de la siguiente manera :
CREATE TABLE BANCO (
COD_BANCO VARCHAR(4) NOT NULL,
NOMBRE VARCHAR(20) NOT NULL,
ENTIDAD VARCHAR(4) NOT NULL,
OFICINA VARCHAR(4) NOT NULL,
DC VARCHAR(2) NOT NULL,
CUENTA VARCHAR(10) NOT NULL,
PRIMARY KEY (COD_BANCO)
);

CREATE TABLE PEDIDO (
COD_PEDIDO INT(6) NOT NULL AUTO_INCREMENT,
FECHA DATE NOT NULL,
ID_ESTADO VARCHAR(2) NOT NULL,
FORMA_PAGO CHAR NOT NULL,
COD_BANCO VARCHAR(4) NULL,
COD_USUARIO_PED INT(10) NOT NULL,
FOREIGN KEY (ID_ESTADO) REFERENCES ESTADO(ID_ESTADO) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (COD_BANCO) REFERENCES BANCO(COD_BANCO) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (COD_USUARIO_PED) REFERENCES USUARIO_PEDIDO(COD_USUARIO_PED) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (COD_PEDIDO)
);

COD_BANCO es clave ajena respecto de la tabla banco y lo que yo quiero es que cuando borre el cod_banco no se borre de la tabla pedido.
En principio la restriccion que tengo que utilizar es on delete restrict o on delete no action pero al ejecutar el delete de la tabla banco me da un error de que no puedo borrar esa tabla porque es clave ajena de la tabla pedido.
Si elimino la restriccion on delete restrict me da el mismo error.
¿Cuál es el modo correcto de hacerlo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:borrado restringido

Publicado por Isaias (5072 intervenciones) el 20/08/2008 01:40:36
Pues no entendi, lo que si veo, es que NO puedes borrar de BANCO, si no has borrado todos los registros referentes a COD_BANCO en tu tabla PEDIDO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:borrado restringido

Publicado por maria (4 intervenciones) el 20/08/2008 11:58:55
vale, a ver si me explico mejor.
Mi problema es precisamente ese, que no puedo borrar un cod_banco de la tabla BANCO sin haber borrado antes todos los registros donde se hace referencia a ese cod_banco. Lo que quiero saber es si hay alguna manera de hacerlo directamente con la restricciones delete no action o delete restrict o tengo que hacerlo "manualmente", es decir, primero borrar todos los registros de la tabla PEDIDO donde se hace referencia a ese cod_banco y despues borrar la tupla de la tabla BANCO donde aparece ese cod_banco.
He estado leyendo que al parecer con las restricciones no action y restrict no te permite borrar las tuplas padres sin haber borrado antes las tuplas donde se hace referencia, pero si es asi para que valen?? porque poner esas restricciones y no poner nada te da el mismo resultado
Un saludo y espero que te quede un poco mas clara mi duda
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:borrado restringido

Publicado por maria (4 intervenciones) el 20/08/2008 12:07:22
lo siento, pero me acabo de dar cuenta que hay una cosa que he explicado mal.
Lo que quiero en realidad es borrar un tupla de la tabla banco sin tener que borrarlas de la tabla pedido, ya que es informacion que todavia necesito a pesar de que ya no exista ese codigo del banco.
Hay algun modo de hacerlo con las restricciones de borrado on delete no action o on delete restrict ? es que sino se puede, no entiendo para que sirven, ya que poner eso y nada da el mismo resultado (un error que no te permite borrar un registro de la tabla banco) y sino ¿me puedes proponer alguna forma de hacerlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:borrado restringido

Publicado por Isaias (5072 intervenciones) el 20/08/2008 15:37:50
NO, no puedes, estarias violando el DRI, debes quitar tus constrains, borrar y luego volver a colocar dichos constrains
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar