0

我在制作触发器时遇到问题。每当我插入记录(casello)时,我都想在“nome1”中制作字段“nome”的“副本”。我收到此错误:

#1442 - 无法更新存储函数/触发器中的表“casello”,因为它已被调用此存储函数/触发器的语句使用。

我该如何解决?这是我的表的结构:

    --
    -- Struttura della tabella `casello`
    --

   CREATE TABLE IF NOT EXISTS `casello` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `posizione` double NOT NULL,
  `nome` varchar(100) NOT NULL,
  `nome1` varchar(100) DEFAULT NULL,
  `modalita_pagamento` varchar(255) NOT NULL,
  `servizio_assistenza` tinyint(1) DEFAULT NULL,
  `l_nome` varchar(100) DEFAULT NULL,
  `nome_autostrada` varchar(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `l_nome` (`l_nome`),
  KEY `nome_autostrada` (`nome_autostrada`),
  KEY `nome` (`nome`)
  ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

  --
  -- Dump dei dati per la tabella `casello`
  --

  INSERT INTO `casello` (`id`, `posizione`, `nome`, `nome1`, `modalita_pagamento`,
          `servizio_assistenza`, `l_nome`, `nome_autostrada`) VALUES
  (3, 35, 'napoli nord', NULL, 'contanti, carte, telepass', 1, 'caserta', 'a1'),
  (4, 15, 'napoli sud', NULL, 'contanti, carte, telepass', 1, 'napoli', 'a1'),
  (5, 310, 'roma nord', NULL, 'contanti, carte, telepass', 1, NULL, 'a1'),
  (6, 280, 'roma sud', NULL, 'contanti, carte, telepass', 1, NULL, 'a1'),
  (11, 25, 'palma campania', 'NULL', 'contanti, carte, telepass', 1, NULL, 'a30'),
  (12, 30, 'sarno', 'NULL', 'contanti, carte, telepass', NULL, NULL, 'a30'),
  (13, 35, 'nocera', NULL, 'contanti, carte, telepass', 1, NULL, 'a30');

  --
  -- Triggers `casello`
  --
  DROP TRIGGER IF EXISTS `cp nome nome1`;
  DELIMITER //
  CREATE TRIGGER `cp nome nome1` AFTER INSERT ON `casello`
  FOR EACH ROW UPDATE casello
  set casello.nome1=casello.nome
  //
  DELIMITER ;

PS当然,如果我这样做:

UPDATE casello
SET casello.nome1=casello.nome

作为一个简单的查询,它将起作用并复制数据。

4

1 回答 1

0

你可以像这样实现它:

DROP TRIGGER IF EXISTS `cp nome nome1`;
DELIMITER //
CREATE TRIGGER `cp nome nome1` BEFORE INSERT ON `casello`
FOR EACH ROW 
SET NEW.nome1=NEW.nome
//
DELIMITER ;

插入行UPDATE ,您不进行操作,而是将它们更改BEFOREINSERTed。

注意,NEW这里是关键字,不是表名。

于 2013-06-25T10:46:50.797 回答