Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/11/2013, 15:56
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Problema con Trigger BEFORE DELETE en CASCADE

Concretamente tengo esto:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `articulos` (
  2.   `id_articulo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3.   `codigo_proveedor` char(10) COLLATE utf8_bin NOT NULL,
  4.   `codigo_articulo` char(10) COLLATE utf8_bin NOT NULL,
  5.   `codigo_color` char(10) COLLATE utf8_bin NOT NULL,
  6.   `talle` char(10) COLLATE utf8_bin NOT NULL,
  7.   `descripcion` char(200) COLLATE utf8_bin NOT NULL DEFAULT '---',
  8.   `fecha_alta` datetime NOT NULL,
  9.   `costo` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
  10.   `precio_venta` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
  11.   `stock` int(10) unsigned NOT NULL,
  12.   `habilitado` tinyint(1) NOT NULL,
  13.   PRIMARY KEY (`id_articulo`),
  14.   UNIQUE KEY `codigo` (`codigo_proveedor`,`codigo_articulo`,`codigo_color`,`talle`),
  15.   KEY `codigo_articulo` (`codigo_articulo`),
  16.   KEY `codigo_color` (`codigo_color`)
  17.  
  18. --
  19. -- Volcado de datos para la tabla `articulos`
  20. --
  21.  
  22. INSERT INTO `articulos` (`id_articulo`, `codigo_proveedor`, `codigo_articulo`, `codigo_color`, `talle`, `descripcion`, `fecha_alta`, `costo`, `precio_venta`, `stock`, `habilitado`) VALUES
  23. (11, 'marca1', 'art1', '1', 'A', '---', '2013-11-11 00:00:00', '10.00', '20.00', 6, 1);
  24.  
  25.  
  26. -- RECEPCIONES DETALLE --
  27.  
  28. CREATE TABLE IF NOT EXISTS `recepciones` (
  29.   `id_recepcion` int(10) unsigned NOT NULL AUTO_INCREMENT,
  30.   `fecha_alta` datetime NOT NULL,
  31.   `fecha_actualizacion` datetime DEFAULT NULL,
  32.   `codigo_proveedor` char(10) COLLATE utf8_bin NOT NULL,
  33.   `descripcion` char(200) COLLATE utf8_bin NOT NULL DEFAULT '---',
  34.   `total` decimal(10,2) NOT NULL,
  35.   PRIMARY KEY (`id_recepcion`),
  36.   KEY `codigo_proveedor` (`codigo_proveedor`)
  37.  
  38. --
  39. -- Volcado de datos para la tabla `recepciones`
  40. --
  41.  
  42. INSERT INTO `recepciones` (`id_recepcion`, `fecha_alta`, `fecha_actualizacion`, `codigo_proveedor`, `descripcion`, `total`) VALUES
  43. (12, '2013-11-11 17:23:29', NULL, 'marca1', 'dsfs', '10.00'),
  44. (19, '2013-11-11 17:48:18', '2013-11-11 18:17:07', 'marca1', '', '50.00');
  45.  
  46.  
  47. -- RECEPCION DETALLE --
  48.  
  49. CREATE TABLE IF NOT EXISTS `recepcion_detalle` (
  50.   `id_recepcion` int(10) unsigned NOT NULL,
  51.   `id_articulo` int(10) unsigned NOT NULL,
  52.   `cantidad` int(10) NOT NULL,
  53.   `costo` decimal(10,2) unsigned NOT NULL,
  54.   PRIMARY KEY (`id_recepcion`,`id_articulo`),
  55.   KEY `id_articulo` (`id_articulo`)
  56.  
  57. CREATE TRIGGER `borrar_articulo` BEFORE DELETE ON `recepcion_detalle`
  58.  FOR EACH ROW UPDATE articulos SET stock=stock-OLD.cantidad WHERE articulos.id_articulo=OLD.id_articulo
  59.  
  60. --
  61. -- Volcado de datos para la tabla `recepcion_detalle`
  62. --
  63.  
  64. INSERT INTO `recepcion_detalle` (`id_recepcion`, `id_articulo`, `cantidad`, `costo`) VALUES
  65. (12, 11, 1, '10.00'),
  66. (19, 11, 5, '10.00');
  67.  
  68. ALTER TABLE `recepcion_detalle`
  69.   ADD CONSTRAINT `recepcion_detalle_ibfk_4` FOREIGN KEY (`id_recepcion`) REFERENCES `recepciones` (`id_recepcion`) ON DELETE CASCADE ON UPDATE CASCADE,
  70.   ADD CONSTRAINT `recepcion_detalle_ibfk_2` FOREIGN KEY (`id_articulo`) REFERENCES `articulos` (`id_articulo`) ON UPDATE CASCADE;
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios