XAMPP – Trigerite loomine ja kasutamine

Andmebaasi ja tabelite loomine

CREATE TABLE autoregister(
autoID int Auto_increment PRIMARY KEY,
mark varchar(15) NOT NULL,
mudel varchar(15) NOT NULL,
aasta INT,
omanik VARCHAR(50),
registreerimiseKuupaev DATE
);
  
CREATE TABLE logitabel(
id int Auto_increment PRIMARY KEY,
toiming  varchar(100),
aeg DATETIME,
autoAndmed TEXT
);

Auto lisamine

INSERT INTO logitabel(toiming, aeg, autoAndmed)
SELECT
'On tehtud INSERT käsk',
NOW(),
CONCAT('Mark: ', NEW.mark, ', Mudel: ', NEW.mudel, ', Omanik: ', NEW.omanik);

KONTROLL trigger logitabel

Auto Kustutamine

INSERT INTO logitabel(toiming, aeg, autoAndmed)
SELECT
'On tehtud DELETE käsk',
NOW(),
CONCAT('Mark: ', OLD.mark, ', Mudel: ', OLD.mudel, ', Omanik: ', OLD.omanik);

KONTROLL TRIGER kustutamine

Auto Uuendamine

INSERT INTO logitabel(toiming, aeg, autoAndmed)
SELECT
'On tehtud UPDATE käsk',
NOW(),
CONCAT('Vanad andmed - Mark: ', OLD.mark, ', Mudel: ', OLD.mudel, ', Omanik: ', OLD.omanik,
'\nUued andmed - Mark: ', NEW.mark, ', Mudel: ', NEW.mudel, ', Omanik: ', NEW.omanik)
FROM autoregister a
INNER JOIN autoregister ar
ON a.autoID=ar.autoID
WHERE NEW.autoID=a.autoID;

KONTROLL TRIGGER uuendamine

Autokindlustus lisamine

CREATE TABLE kindlustus (
    kindlustusID INT AUTO_INCREMENT PRIMARY KEY,
    autoID INT,
    kindlustusFirma VARCHAR(100),
    poliisiNumber VARCHAR(100),
    kehtivKuni DATE,
    FOREIGN KEY (autoID) REFERENCES autoregister(autoID)
        ON DELETE CASCADE
        ON UPDATE CASCADE
);

autoID — внешний ключ, ссылается на autoregister.

ON DELETE CASCADE — если удалить авто, удалится и его страховка

ON UPDATE CASCADE — если autoID изменится, обновится и тут

Kindlustus andmed lisamine

INSERT INTO kindlustus (autoID, kindlustusFirma, poliisiNumber, kehtivKuni)
VALUES (1, 'If Kindlustus', 'POL12345678', '2025-12-31');

Kontroll seosed

SELECT a.mark, a.mudel, k.kindlustusFirma, k.kehtivKuni
FROM autoregister a
JOIN kindlustus k ON a.autoID = k.autoID;

UUENDAMINE trigger koos kasutaja ja kindlustuse seostega

CREATE TRIGGER autoUuendamine
AFTER UPDATE ON autoregister
FOR EACH ROW
INSERT INTO logitabel (toiming, aeg, autoAndmed)
SELECT
  CONCAT('UPDATE tegi kasutaja: ', USER()),
  NOW(),
  CONCAT('Mark: ', NEW.mark,
         ', Mudel: ', NEW.mudel,
         ', Omanik: ', IFNULL(NEW.omanik, 'puudub'),
         ', Kindlustus: ', IFNULL(k.kindlustusFirma, 'puudub'),
         ', Poliisi nr: ', IFNULL(k.poliisiNumber, 'puudub'),
         ', Kehtib kuni: ', IFNULL(k.kehtivKuni, 'puudub'))
FROM kindlustus k
WHERE k.autoID = NEW.autoID;

KONTROLL

UPDATE autoregister
SET omanik = 'Uus Omanik'
WHERE autoID = 200;
SELECT * FROM logitabel