如何使用触发器将新记录存储到其他 table 而无需重复
how to store new record to other table without duplicate using trigger
我想将数据记录从 table dvc0004 复制到 table dvc0005,而不使用触发器复制数据。
这是我的触发器:
CREATE
DEFINER = ''@''
TRIGGER testing_MesinAbsen.trigger1
AFTER INSERT
ON testing_MesinAbsen.dvc0004
FOR EACH ROW
BEGIN
IF (NOT EXISTS(SELECT * FROM dvc0005 d WHERE d.NIK = NEW.NIK AND d.Enroll=NEW.Enroll)) THEN
INSERT INTO dvc0005 (NIK,Enroll)
VALUES (NEW.NIK,NEW.Enroll);
END IF;
END
我尝试插入一条新记录,所以出现如下提示:
这是我的 table:
关于 dvc0004
NIK
Enroll
1
2021-03-01 00:00:00
2
2021-03-01 00:01:00
3
2021-03-01 00:03:00
4
2021-03-01 00:04:00
在 dvc0005
NIK
Enroll
1
2021-03-01 00:00:00
3
2021-03-01 00:03:00
4
2021-03-01 00:04:00
这是我想要的结果:
在 dvc0005 上:
NIK
Enroll
1
2021-03-01 00:00:00
2
2021-03-01 00:01:00
3
2021-03-01 00:03:00
4
2021-03-01 00:04:00
从期望的结果来看table,数据记录NIK : 2成功插入dvc0005,没有重复数据插入
一切正常。请检查。
创建 table dvc0005
并插入行:
create table dvc0005 (NIK int, Enroll datetime);
insert into dvc0005 values(1, '2021-03-01 00:00:00');
insert into dvc0005 values(3, '2021-03-01 00:03:00');
insert into dvc0005 values(4, '2021-03-01 00:04:00');
创建tabledvc0004
create table dvc0004(NIK int, Enroll datetime);
创建触发器:
CREATE
TRIGGER trigger1
AFTER INSERT
ON dvc0004
FOR EACH ROW
BEGIN
IF (NOT EXISTS(SELECT * FROM dvc0005 d WHERE d.NIK = NEW.NIK AND d.Enroll=NEW.Enroll)) THEN
INSERT INTO dvc0005 (NIK,Enroll)
VALUES (NEW.NIK,NEW.Enroll);
END IF;
END
插入到dvc0004
insert into dvc0004 values(1, '2021-03-01 00:00:00');
insert into dvc0004 values(2, '2021-03-01 00:01:00');
insert into dvc0004 values(3, '2021-03-01 00:03:00');
insert into dvc0004 values(4, '2021-03-01 00:04:00');
select * from dvc0005;
输出:
NIK
Enroll
1
2021-03-01 00:00:00
3
2021-03-01 00:03:00
4
2021-03-01 00:04:00
2
2021-03-01 00:01:00
select * from dvc0005;
输出:
NIK
Enroll
1
2021-03-01 00:00:00
3
2021-03-01 00:03:00
4
2021-03-01 00:04:00
2
2021-03-01 00:01:00
dbhere
这个触发器可以运行在mariaDB
上执行
CREATE
DEFINER = ''@''
TRIGGER testing_MesinAbsen.trigger1
AFTER INSERT
ON testing_MesinAbsen.dvc0004
FOR EACH ROW
BEGIN
IF (NOT EXISTS(SELECT * FROM dvc0005 d WHERE d.NIK = NEW.NIK AND d.Enroll=NEW.Enroll)) THEN
INSERT INTO dvc0005 (NIK,Enroll)
VALUES (NEW.NIK,NEW.Enroll);
END IF;
END
我想将数据记录从 table dvc0004 复制到 table dvc0005,而不使用触发器复制数据。
这是我的触发器:
CREATE
DEFINER = ''@''
TRIGGER testing_MesinAbsen.trigger1
AFTER INSERT
ON testing_MesinAbsen.dvc0004
FOR EACH ROW
BEGIN
IF (NOT EXISTS(SELECT * FROM dvc0005 d WHERE d.NIK = NEW.NIK AND d.Enroll=NEW.Enroll)) THEN
INSERT INTO dvc0005 (NIK,Enroll)
VALUES (NEW.NIK,NEW.Enroll);
END IF;
END
我尝试插入一条新记录,所以出现如下提示:
这是我的 table:
关于 dvc0004
NIK | Enroll |
---|---|
1 | 2021-03-01 00:00:00 |
2 | 2021-03-01 00:01:00 |
3 | 2021-03-01 00:03:00 |
4 | 2021-03-01 00:04:00 |
在 dvc0005
NIK | Enroll |
---|---|
1 | 2021-03-01 00:00:00 |
3 | 2021-03-01 00:03:00 |
4 | 2021-03-01 00:04:00 |
这是我想要的结果:
在 dvc0005 上:
NIK | Enroll |
---|---|
1 | 2021-03-01 00:00:00 |
2 | 2021-03-01 00:01:00 |
3 | 2021-03-01 00:03:00 |
4 | 2021-03-01 00:04:00 |
从期望的结果来看table,数据记录NIK : 2成功插入dvc0005,没有重复数据插入
一切正常。请检查。
创建 table dvc0005
并插入行:
create table dvc0005 (NIK int, Enroll datetime);
insert into dvc0005 values(1, '2021-03-01 00:00:00');
insert into dvc0005 values(3, '2021-03-01 00:03:00');
insert into dvc0005 values(4, '2021-03-01 00:04:00');
创建tabledvc0004
create table dvc0004(NIK int, Enroll datetime);
创建触发器:
CREATE
TRIGGER trigger1
AFTER INSERT
ON dvc0004
FOR EACH ROW
BEGIN
IF (NOT EXISTS(SELECT * FROM dvc0005 d WHERE d.NIK = NEW.NIK AND d.Enroll=NEW.Enroll)) THEN
INSERT INTO dvc0005 (NIK,Enroll)
VALUES (NEW.NIK,NEW.Enroll);
END IF;
END
插入到dvc0004
insert into dvc0004 values(1, '2021-03-01 00:00:00');
insert into dvc0004 values(2, '2021-03-01 00:01:00');
insert into dvc0004 values(3, '2021-03-01 00:03:00');
insert into dvc0004 values(4, '2021-03-01 00:04:00');
select * from dvc0005;
输出:
NIK | Enroll |
---|---|
1 | 2021-03-01 00:00:00 |
3 | 2021-03-01 00:03:00 |
4 | 2021-03-01 00:04:00 |
2 | 2021-03-01 00:01:00 |
select * from dvc0005;
输出:
NIK | Enroll |
---|---|
1 | 2021-03-01 00:00:00 |
3 | 2021-03-01 00:03:00 |
4 | 2021-03-01 00:04:00 |
2 | 2021-03-01 00:01:00 |
db
这个触发器可以运行在mariaDB
上执行CREATE
DEFINER = ''@''
TRIGGER testing_MesinAbsen.trigger1
AFTER INSERT
ON testing_MesinAbsen.dvc0004
FOR EACH ROW
BEGIN
IF (NOT EXISTS(SELECT * FROM dvc0005 d WHERE d.NIK = NEW.NIK AND d.Enroll=NEW.Enroll)) THEN
INSERT INTO dvc0005 (NIK,Enroll)
VALUES (NEW.NIK,NEW.Enroll);
END IF;
END