更新mysql触发器时更新另一个表

时间:2015-09-24 06:49:51

标签: mysql triggers

我有2张桌子,学生和数学。当我使用我在学生中更新的ID更新students.Last_Name时,我想更新Math.Last_name上的现有数据。

学生表

CREATE TABLE `STUDENTS` (
`Date_Modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`LRN` BIGINT(12) NOT NULL AUTO_INCREMENT,
`Last_Name` VARCHAR(50) NOT NULL,
`First_Name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`LRN`)
)COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=123456789112;

MATH TABLE

CREATE TABLE `Math` (
`Date_Modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`LRN` BIGINT(12) NOT NULL,
`Last_Name` VARCHAR(50) NOT NULL,
`First_Name` VARCHAR(50) NOT NULL,
`Level` VARCHAR(3) NOT NULL,
`UT1` VARCHAR(3) NOT NULL,
`Q1` VARCHAR(50) NULL DEFAULT NULL,
`UT2` VARCHAR(50) NULL DEFAULT NULL,
`Q2` VARCHAR(50) NULL DEFAULT NULL,
`UT3` VARCHAR(50) NULL DEFAULT NULL,
`Q3` VARCHAR(50) NULL DEFAULT NULL,
`UT4` VARCHAR(50) NULL DEFAULT NULL,
`Q4` VARCHAR(50) NULL DEFAULT NULL,
`FINAL GRADE` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`LRN`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
ROW_FORMAT=COMPACT;

MY TRIGGER

CREATE TRIGGER `STUDENTS_after_update` AFTER UPDATE ON `STUDENTS` FOR EACH ROW BEGIN
UPDATE Math
SET Last_Name = NEW.Last_Name
WHERE LRN IN (SELECT LRN FROM Math where LRN = NEW.LRN);
END

1 个答案:

答案 0 :(得分:0)

在update命令中不需要子选择,因为对于每一行,它将获取新的LRN值并在MATH表中更新所有这些值new.LRN匹配MATH表。这里触发器的外观如何

delimiter //
create trigger `STUDENTS_after_update` after update on `STUDENTS`
for each row
begin
 update Math
 set Last_Name = NEW.Last_Name
 where LRN = NEW.LRN ;
end;//

delimiter ;

请注意,我在Mysql CLI中运行时需要添加分隔符,其他一些用户界面(如PHPMyadmin)需要从用户界面中选择分隔符。