Inicio > MySQL > tabitah > Registro en uso

Registro en uso

Experto:
Usuario:
Fecha: 10/06/2005
Valoración: (4,00 sobre 5) Categoría: MySQL
08/06/2005
polder, usuario preguntando en MySQL
Usuario
Hola.

Tengo un pequeño problema, que en SQL Server lo supe solucionar pero en MySQL no se como hacerlo.

Lo voy a tratar con un ejemplo para que sea mas claro.

Tengo una tabla ciudad, que tiene dos campos, el codigo y ls descripcion.

Tengo otra tabla (proveedor) donde guardo el codigo de la ciudad seleccionada en un combo (que se carga de la tabla ciudad)...

El problema que tengo es que (a diferencia de SQL Server) puedo eliminar sin problemas desde la base de datos una ciudad que haya sido guardada en la tabla proveedor.

Y peor aun, cuando cargo el registro proveedor, mi sistema se cae porque no puede cargar el combo con el codigo que tenia guardado porque ya no existe.

En SQL Server, al tratar de eliminar una ciudad desde la base de datos, me tiraba el error -2147217900 con el cual yo detectaba una operacion ilicita.

Como puedo detectar esa operacion en este caso que utilizo MYSQL??

Gracias!!
08/06/2005
polder, experto respondiendo en MySQL
Experto
Si mandas llamar estos procesos desde un programa, deberás hacer un filtro, es decir, preguntar si el campo se necesita en otras tablas y no permitir eliminarlo, o en otro caso, borrar también los registros de la otra tabla.

De otra forma, hasta donde sé; no puede evitarse.

Saludos,
08/06/2005
polder, usuario preguntando en MySQL
Usuario
No se si te suena la sentencia ON DELETE RESTRICT


creo que se aplica al resgistro para que no se permita eliminar desde la tabla padre...sabes como utilizarla?

Estoy tratando de aplicar

ALTER TABLE proveedor
ON DELETE RESTRICT;

pero no esta bien, algo me falta...
09/06/2005
polder, experto respondiendo en MySQL
Experto
No, no la conozco.

La busqué en el manual de referencia de MySQL y no existe, ni como comando general ni como parte de ALTER TABLE.

Te mando el link por si deseas consultarlo:

http://dev.mysql.com/doc/mysql/en/alter-table.html

Saludos,
09/06/2005
polder, usuario preguntando en MySQL
Usuario
Mira esta pagina...

http://databasejournal.com/features/mysql/print.php/10897_2248101_2

Segun entiendo hay que eliminar primero la foreign key y luego agregarla especificando el On DELETE RESTRICT
pero no me resulta
09/06/2005
polder, experto respondiendo en MySQL
Experto
Tal vez sea la versión del MySQL.

Qué versión tienes?
09/06/2005
polder, usuario preguntando en MySQL
Usuario
La version es

4.0.22-standard
09/06/2005
polder, experto respondiendo en MySQL
Experto
Ah Ok!

Intenta lo siguiente:
ALTER TABLE `proveedor`.`ciudad` MODIFY COLUMN `cve_ciudad` INT(5) UNSIGNED NOT NULL DEFAULT 0,
ADD CONSTRAINT `FK_nombre_foreign_key` FOREIGN KEY `FK_nombre_foreign_key` (`campo1 de la llave`, `campo2 de la llave`, `campon de la llave)
REFERENCES `ciudad` (`campo1 de la llave`, `campo2 de la llave`, `campon de la llave`)
ON DELETE RESTRICT
ON UPDATE RESTRICT;

Espero que se entienda.
Por lo que veo es necesario escribir el tipo de tu campo a proteger, poner la relación entre las tablas, en ambas debe estar la misma llave y debes definir el nombre de tu llave foreign

A ver si sale.
09/06/2005
polder, usuario preguntando en MySQL
Usuario
Al menos no tuve errores en la sintaxis pero me tira

#1142 - alter command denied to user: 'pupelde@localhost' for table 'situacion'

(las tablas proveedor y ciudad solo eran el ejemplo)

proveedor---->zarpe
ciudad---->situacion

y en la tabla zarpe el campo se llama "situacion_codigo"
y en la tabla situacion el campo se llama "codigo"
09/06/2005
polder, experto respondiendo en MySQL
Experto
No tienes el usuario administrador?

Parece que no tienes privilegios para hacer esto.

:S
10/06/2005
polder, usuario preguntando en MySQL
Usuario
Bueno gracias, intentare nuevamente...
Más opciones
Enlaces patrocinados