生徒が削除されたときにトリガー/プロシージャを使用してテーブル '教師'の 'student_total'列の複数の行を更新したい 関連テーブルの複数行を更新する多対多の実数 「n」先生は「m」生徒を持つことができます関連テーブルの複数行の更新
- はまったく可能ですか?あなたのサイトから学んだ 結果セットを保存することができないので、
- Mysql、Postgressなどで?前売で
おかげ
Ritin
--------------- SQL
CREATE TABLE `Teacher` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`student_total` int(11) DEFAULT '0',
PRIMARY KEY (`id`)
);
CREATE TABLE `Student` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `Teacher_has_Student` (
`teacher_id` smallint(5) unsigned NOT NULL,
`student_id` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`teacher_id`,`student_id`),
KEY `fk_Teacher_has_Student_teacher` (`teacher_id`),
KEY `fk_breeder_has_breed_student` (`student_id`),
CONSTRAINT `fk_Teacher_has_Student_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `Teacher` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_breeder_has_breed_student` FOREIGN KEY (`student_id`) REFERENCES `Student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);
私はINSERTのためのトリガーを持っています/ DELETE/UPDATE 例: ---------------------- SQL
CREATE TRIGGER teacher__student_insert AFTER INSERT ON Teacher_has_Student
FOR EACH ROW
BEGIN
UPDATE Teacher SET student_total = student_total + 1 WHERE id = NEW.teacher_id;
END;
以下のトリガーは1行だけを更新しますが、目的はすべての行を更新することです。
DELIMITER |
CREATE TRIGGER my_student__delete AFTER DELETE ON Student
FOR EACH ROW
BEGIN
set @std_id = old.id;
UPDATE teacher SET student_total = student_total - 1
WHERE id = @std_id;
END
|
おかげで...セカンドオピニオン、 あなたの説明は完璧な理にかなって、 敬礼 – ritin
を望んでいた。その後、あなたの学生数を取得するために、JOINを使用。 – DerVO
私はこの記事を見つけましたが、共有したかった http://wiki.postgresql.org/wiki/A_Brief_Real-world_Trigger_Example 私のウェブホストはトリガーをサポートしていませんでしたので、制約に固執する必要があります。 @Dervoもう一度ありがとう:) – ritin