gpt4 book ai didi

mysql - 错误 #1442 MySQL - 创建触发器

转载 作者:行者123 更新时间:2023-11-30 01:32:31 24 4
gpt4 key购买 nike

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

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

我该如何修复它?这是我的表的结构:

    --
-- 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 ;

附注当然,如果我这样做:

UPDATE casello
SET casello.nome1=casello.nome

作为一个简单的查询,它可以工作并复制数据。

最佳答案

你可以这样实现:

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 插入行后,您可以更改它们 BEFORE他们是INSERT编辑。

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

关于mysql - 错误 #1442 MySQL - 创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17295051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com