- 要件の説明
仕事はそのような要件に遭遇します。2つのテーブルがあります。1つはユーザーの基本情報テーブルです。ユーザーの基本情報テーブルには結婚するかどうかのフィールドがあります。1つは、子テーブル、配偶者テーブル、親テーブル、および家族関係テーブルのユーザーに関連するその他の情報があり、これらはフィールド相対によって区別されます。配偶者を削除するときは、ユーザーテーブルに配偶者フィールドがあるかどうかを更新する必要があります。実際、コードを使用することもできますが、トリガーの使用はより簡潔で効率的な処理です。オンラインプロジェクトでは公式時計を直接表示しないため、実際の時計をシミュレートすることで関係を確立します。 - テーブルリレーションシップを作成する
配偶者テーブル
CREATE TABLE `tb_mate` (
`id` bigint(20) NOT NULL,
`pk_userId` bigint(20) DEFAULT NULL,
`relative` varchar(20) DEFAULT NULL COMMENT '1=配偶关系 0=其他关系',
`name` varchar(20) DEFAULT NULL COMMENT '姓名',
`dr` int(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ユーザーテーブル
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL,
`dr` int(1) DEFAULT NULL COMMENT '删除标示',
`name` varchar(20) DEFAULT NULL,
`phone` varchar(11) DEFAULT NULL,
`flag` smallint(6) DEFAULT NULL COMMENT '配偶标示0 没有 1 有',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
トリガーロジック:この配偶者テーブルを
更新するとき、dr = 1で、この配偶者を削除すると、ユーザーテーブルの配偶者フィールドが0に更新されるかどうかがトリガーされます
。dr= 0の場合、ユーザーテーブルの配偶者フィールドは1にトリガーされるため、トリガーステートメントの作成は次のとおりです。
- トリガーを作成する
DELIMITER $$
CREATE
TRIGGER `upd_info` AFTER UPDATE ON `tb_mate`
FOR EACH ROW BEGIN
IF(new.relative = 1)
THEN
UPDATE tb_user SET flag = !new.dr
WHERE id = new.pk_userId;
END IF;
END;
概要:実際のテストによると、挿入の更新に関係なく、(後/前の)トリガーはトランザクションに関連しています。コードにエラーが関連付けられている場合、トリガーもロールバックします。