Опитайте TRIGGERS:
- Прилагане на чужди ключове програмно в MySQL
- Емулиране на каскадни операции От InnoDB до MyISAM таблици
Пример MyIsam с външен ключ:
Създаване на родителска таблица:
CREATE TABLE myisam_parent
(
mparent_id INT NOT NULL,
PRIMARY KEY (mparent_id)
) ENGINE=MYISAM;
Създаване на дъщерна таблица:
CREATE TABLE myisam_child
(
mparent_id INT NOT NULL,
mchild_id INT NOT NULL,
PRIMARY KEY (mparent_id, mchild_id)
) ENGINE = MYISAM;
Създаване на задействане (с DELIMITER):
DELIMITER $$
CREATE TRIGGER insert_myisam_child
BEFORE INSERT ON myisam_child
FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM myisam_parent WHERE mparent_id=new.mparent_id)=0 THEN
INSERT error_msg VALUES ('Foreign Key Constraint Violated!');//Custom error
END IF;
END;$$
DELIMITER ;
Тестов случай:
Опитайте с вмъкване (създайте 3 реда в myisam_parent
и 6 реда в myisam_child
):
INSERT INTO myisam_parent VALUES (1), (2), (3);
INSERT INTO myisam_child VALUES (1,1), (1,2), (2,1), (2,2), (2,3), (3,1);
Опитайте да вмъкнете:
INSERT INTO myisam_child VALUES (7, 1);
Връща тази грешка:
Забележка:
Този пример е за INSERT
, за "задействания" с DELETE и UPDATE четене на връзката (в началото на въпроса)