Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Delete cascade

Estas en el tema de Delete cascade en el foro de Mysql en Foros del Web. Saludos corillo, espero que la estén pasando muy bien: ¿Por qué al tener las tablas de esta forma... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original DROP ...
  #1 (permalink)  
Antiguo 18/08/2010, 17:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Delete cascade

Saludos corillo, espero que la estén pasando muy bien:

¿Por qué al tener las tablas de esta forma...
Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS `tbl_user`;
  2. CREATE TABLE IF NOT EXISTS `tbl_user` (
  3.   `EmplNum` varchar(8) NOT NULL,
  4.   `Name` varchar(50) NOT NULL,
  5.   `Pwd` varchar(50) NOT NULL DEFAULT 'aquivalacontrasena',
  6.   `Guide` int(1) NOT NULL DEFAULT '1',
  7.   `ChangePwd` int(1) NOT NULL DEFAULT '1',
  8.   `DisabledAccount` int(1) NOT NULL DEFAULT '0',
  9.   PRIMARY KEY (`ID`),
  10.   UNIQUE KEY `EmplNum` (`EmplNum`)
  11.  
  12. --
  13. -- Dumping data for table `tbl_user`
  14. --
  15.  
  16. INSERT INTO `tbl_user` (`ID`, `EmplNum`, `Name`, `Pwd`, `Guide`, `ChangePwd`, `DisabledAccount`) VALUES
  17. (1, 'ADMIN', 'Administrador', 'aquivalacontrasena', 1, 0, 0);
  18.  
  19. DROP TABLE IF EXISTS `tbl_user_access`;
  20. CREATE TABLE IF NOT EXISTS `tbl_user_access` (
  21.   `ID_user` int(11) unsigned NOT NULL,
  22.   `AppAccess` int(11) NOT NULL,
  23.   `Access` int(3) NOT NULL,
  24.   `DisabledAccess` int(1) unsigned NOT NULL,
  25.   PRIMARY KEY (`ID`),
  26.   KEY `ID_user` (`ID_user`)
  27.  
  28. --
  29. -- Dumping data for table `tbl_user_access`
  30. --
  31.  
  32. INSERT INTO `tbl_user_access` (`ID`, `ID_user`, `AppAccess`, `Access`, `DisabledAccess`) VALUES
  33. (1, 1, 1, 63, 0),
  34. (2, 1, 2, 63, 0),
  35. (3, 1, 4, 63, 0);
  36.  
  37. --
  38. -- Constraints for table `tbl_user_access`
  39. --
  40. ALTER TABLE `tbl_user_access`
  41.   ADD CONSTRAINT `tbl_user_access_ibfk_1` FOREIGN KEY (`ID_user`) REFERENCES `tbl_user` (`ID`) ON DELETE CASCADE;
  42.  
  43.  
  44. DROP TABLE IF EXISTS `tbl_user_app_access`;
  45. CREATE TABLE IF NOT EXISTS `tbl_user_app_access` (
  46.   `Bit` int(11) NOT NULL,
  47.   `Name` varchar(100) NOT NULL,
  48.   PRIMARY KEY (`ID`)
  49.  
  50. --
  51. -- Dumping data for table `tbl_user_app_access`
  52. --
  53.  
  54. INSERT INTO `tbl_user_app_access` (`ID`, `Bit`, `Name`) VALUES
  55. (1, 1, 'Admin'),
  56. (2, 2, 'QSO'),
  57. (3, 4, 'Retención');

....al tratar de añadir esto me sale el siguiente error?
Código MySQL:
Ver original
  1. ALTER TABLE `tbl_user_access`
  2.   ADD FOREIGN KEY (`AppAccess`) REFERENCES `tbl_user_app_access` (`Bit`) ON DELETE CASCADE
  3.  
  4. -- Error
  5. -- #1005 - Can't create table 'qso.#sql-ea4_4b0' (errno: 150)
Primero me aseguré que sea InnoDB y luego que tuvieran la misma cantidad de dígitos o sea int(11). Y hasta ahí llego.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 22/08/2010 a las 15:33 Razón: corregir datos..
  #2 (permalink)  
Antiguo 18/08/2010, 17:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Delete cascade

Porque el campo `tbl_user_app_access`.`BIT` no es ni PK ni UNIQUE en su tabla.
Acuérdate que una FK es un campo o conjunto de campos que hacen referencia a la clave primaria de otra tabla.
Si no es clave primaria, o (en MySQL) al menos UNIQUE, no se lo puede usar como FK...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/08/2010, 17:53
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Delete cascade

Hola abimaelrc

Sino estoy mal, una llave foranea solo puede ser creada contra un campo que sea primary key.
En este caso, BIT no tiene esta propiedad y no te va a dejar hacer el enlace entre tablas.

No tengo como probar en este momento, pero puedes probar haciendo UNIQUE el campo BIT.

No he probado.

EDITO: se me ha adelantado gnzsoloyo. jejeje

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 18/08/2010, 18:02
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Delete cascade

Por eso digo que se me olvido colocar el unique

Corillo son los mejores gracias
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: cascade, delete
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:41.