Issue with execution query of update table in stored trigger

情到浓时终转凉″ 提交于 2019-12-24 16:21:45

问题


I'm trying to execute this auto generate query from PHP but it's not working

INSERT INTO mvt (id_piece, article_id_article, code_mvt, origine_mvt, type_mvt, code_art, des_art, qte_old, qte_mvt, qte_new, link_piece)
    SELECT 
        32,
        57,     
        'MVT/15/12/0001',
        'BSR/15/12/001',
        'S',
        'ART_039',
        'AAAA',
        a.qte_art,
        1,
        a.qte_art - 1,
        'uuuu'
    FROM article a
    WHERE a.id_article = 57

Structure of table mvt

CREATE TABLE IF NOT EXISTS `mvt` (
  `id_mvt` int(11) NOT NULL AUTO_INCREMENT,
  `id_piece` int(10) NOT NULL,
  `code_mvt` varchar(20) NOT NULL,
  `origine_mvt` varchar(100) NOT NULL,
  `date_mvt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `type_mvt` varchar(20) NOT NULL,
  `article_id_article` int(10) unsigned NOT NULL,
  `code_art` varchar(20) NOT NULL,
  `des_art` varchar(255) NOT NULL,
  `qte_old` double NOT NULL,
  `qte_mvt` double NOT NULL,
  `qte_new` double NOT NULL,
  `link_piece` varchar(255) NOT NULL,
  PRIMARY KEY (`id_mvt`),
  KEY `article_id_article` (`article_id_article`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=229 ;

Trigger of mvt

DROP TRIGGER IF EXISTS `before_insert_mvt`;
DELIMITER //
CREATE TRIGGER `before_insert_mvt` BEFORE INSERT ON `mvt`
 FOR EACH ROW BEGIN
    UPDATE article  SET qte_art = NEW.qte_new WHERE id_article = NEW.article_id_article;
END

Structure of table article

CREATE TABLE IF NOT EXISTS `article` (
  `id_article` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `famille_id_famille` int(10) unsigned NOT NULL,
  `marque_id_marque` int(10) unsigned NOT NULL,
  `tva_id_tva` int(10) unsigned NOT NULL,
  `code_art` varchar(20) DEFAULT NULL,
  `des_art` varchar(255) DEFAULT NULL,
  `paht_art` double DEFAULT NULL,
  `pamp_art` double DEFAULT NULL,
  `qte_art` double DEFAULT NULL,
  `seuil_alert` double NOT NULL,
  `seuil_reap` double NOT NULL,
  `date_modif` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `etat` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id_article`),
  KEY `article_FKIndex1` (`tva_id_tva`),
  KEY `article_FKIndex2` (`marque_id_marque`),
  KEY `article_FKIndex3` (`famille_id_famille`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ;

And this is sql error

 #1442 - Can't update table 'article' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

it doesn't work! What am I missing ?


回答1:


The trigger is trying to update the same table that you're getting the inserted data from, and that's not allowed. You can do it in two steps with a temporary table.

CREATE TEMPORARY TABLE temp_mvt AS
SELECT 
    32,
    57,     
    'MVT/15/12/0001',
    'BSR/15/12/001',
    'S',
    'ART_039',
    'AAAA',
    a.qte_art,
    1,
    a.qte_art - 1,
    'uuuu'
FROM article a
WHERE a.id_article = 57;

INSERT INTO mvt SELECT * FROM temp_mvt;

DROP TABLE temp_mvt;


来源:https://stackoverflow.com/questions/34444533/issue-with-execution-query-of-update-table-in-stored-trigger

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!