[英]Before Insert and After Update trigger on Same Table Not Working Properly
亲爱的先生,我在这张表上有一个主表 tbl_appli_basic_info 我创建了两种类型的触发器,一种是在插入之后,另一种是在更新触发器之前。我在主表中插入第一条记录意味着当主键是一个时,它会在主表中插入记录 在插入触发器之前在我单独创建的 tbl_appli_basic_info_after_insert 中插入记录。 其次,当我在主表中更新主键一条记录时,我插入名称,即 ab 现在我将其更新为 abc,更新后触发在另一个表中插入数据,即 tbl_appli_basic_info_after_update 我现在也单独创建的问题是,当我更新相同的数据两次时说现在名称是 abc 我更改了它 abcxzy 它不允许我更新记录我使用 after insert 触发器的主要目的是它在插入主表后维护记录,之后我不使用此表更新后触发器保持记录单个用户在不同行中更新记录的次数我无法操作代码请更正我的代码我会很高兴为您服务。
DROP TABLE IF EXISTS `tbl_appli_basic_info`;
CREATE TABLE IF NOT EXISTS `tbl_appli_basic_info` (
`appli_basic_info_id` int(22) NOT NULL AUTO_INCREMENT,
`apli_reg_no` int(22) NOT NULL,
`full_name` varchar(256) NOT NULL,
PRIMARY KEY (`appli_basic_info_id`),
KEY `apli_reg_no` (`apli_reg_no`)
);
CREATE TABLE IF NOT EXISTS `tbl_appli_basic_info_after_insert` (
`appli_basic_info_id` int(22) NOT NULL AUTO_INCREMENT,
`apli_reg_no` int(22) NOT NULL,
`full_name` varchar(256) DEFAULT NULL,
PRIMARY KEY (`appli_basic_info_id`),
KEY `apli_reg_no` (`apli_reg_no`)
) ;
CREATE TABLE IF NOT EXISTS `tbl_appli_basic_info_after_update` (
`appli_basic_info_id` int(22) NOT NULL AUTO_INCREMENT,
`apli_reg_no` int(22) NOT NULL,
`full_name` varchar(256) NOT NULL,
PRIMARY KEY (`appli_basic_info_id`)
);
DROP TRIGGER IF EXISTS `trg_appli_basic_info_after_insert`;
DELIMITER $$
CREATE TRIGGER `trg_appli_basic_info_after_insert` AFTER INSERT ON `tbl_appli_basic_info` FOR EACH ROW BEGIN
-- Insert record into tbl_appli_basic_info_after_insert table
INSERT INTO tbl_appli_basic_info_after_insert
( appli_basic_info_id,
apli_reg_no,
full_name)
VALUES
( NEW.appli_basic_info_id,
NEW.apli_reg_no,
NEW.full_name
);
END
$$
DELIMITER ;
DROP TRIGGER IF EXISTS `trg_appli_basic_info_before_update`;
DELIMITER $$
CREATE TRIGGER `trg_appli_basic_info_before_update` BEFORE UPDATE ON `tbl_appli_basic_info` FOR EACH ROW BEGIN
-- Insert record into audit table
INSERT INTO tbl_appli_basic_info_before_update
( appli_basic_info_id,
apli_reg_no,
full_name
)
VALUES
( NEW.appli_basic_info_id,
NEW.apli_reg_no,
NEW.full_name
);
END
$$
DELIMITER ;
您的审计表定义没有多大意义,因为您正在定义appli_basic_info_id
int(22) NOT NULL AUTO_INCREMENT 主键并在触发器中覆盖它,因此我希望重复键错误。 我会将表定义更改为
CREATE TABLE IF NOT EXISTS `tbl_appli_basic_info_after_insert` (
id int auto_increment primary key,
`appli_basic_info_id` int(22) ,
`apli_reg_no` int(22) NOT NULL,
`full_name` varchar(256) DEFAULT NULL,
PRIMARY KEY (id),
KEY `apli_reg_no` (`apli_reg_no`)
) ;
CREATE TABLE IF NOT EXISTS `tbl_appli_basic_info_after_update` (
id int auto_increment primary key,
`appli_basic_info_id` int(22) NOT NULL ,
`apli_reg_no` int(22) NOT NULL,
`full_name` varchar(256) NOT NULL,
PRIMARY KEY (id)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.