MySQL触发重复数据

时间:2016-04-05 02:34:06

标签: mysql triggers

我有这样的查询

CREATE TRIGGER `tambah_riwayatobat` AFTER INSERT ON `obat`
FOR EACH ROW insert into riwayat_obat(nama, keterangan, distributor,tanggal)
(select new.nama, 'Masuk', d.nama ,now()
From distributor d
join obat ON new.id_distributor = d.id_distributor)

我尝试插入带触发器的数据和带有约束的部分数据之一,但为什么数据是重复的条目?

输出:

enter image description here

例如,如果我尝试第一次插入数据obat,tambah_riwayatobat上的数据也会插入1

如果我尝试第二次插入数据obat,tambah_riwayatobat上的数据插入2次相同的数据

如果我尝试第三次插入数据,则tambah_riwayatobat上的数据会以相同的数据插入3次

1 个答案:

答案 0 :(得分:0)

我不确定完全发生了什么,但这是你的触发代码加入的结果。您已将obat加入distributor,但您的加入条件未提及obat,因此您可以获得某种跨产品在您的INSERT子查询的第二个及后续SELECT选择多行。

您不应该(并且不需要)使用加入,因为obat所需的所有数据都已在伪记录中 NEW 。以下代码应该更好用:

CREATE TRIGGER `tambah_riwayatobat`
  AFTER INSERT ON `obat`
  FOR EACH ROW
    INSERT INTO riwayat_obat
        (nama, keterangan, distributor, tanggal)
      (SELECT NEW.nama, 'Masuk', d.nama, now()
        FROM distributor d
        WHERE new.id_distributor = d.id_distributor
        LIMIT 1);

LIMIT子句将确保SELECT只选择一行,因此INSERT只插入一行;如果distributor.id_distributor是主键,则LIMIT子句是不必要的。