我試圖用外鍵刪除架構中的某些信息時出現問題。 這裏是我的表使用外鍵刪除時從其他表中刪除
CREATE TABLE tb_class (class_ID INT PRIMARY KEY);
CREATE TABLE tb_product (fingerprint VARCHAR(255) PRIMARY KEY);
CREATE TABLE tb_class_product (class_ID INT,
fingerprint VARCHAR(255),
PRIMARY KEY (class_ID, fingerprint),
UNIQUE INDEX tb_class_product_UNIQUE (fingerprint ASC),
FOREIGN KEY (class_ID) REFERENCES tb_class(class_ID)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (fingerprint) REFERENCES tb_product(fingerprint)
ON UPDATE CASCADE
ON DELETE CASCADE);
,當我在tb_class刪除類標識碼,我想,在tb_class_product信息和指紋在tb_product被自動刪除。
我已經嘗試下面的觸發器添加到tb_class_product,但沒有成功
DELIMITER //
CREATE TRIGGER tb_class_product_after_delete
AFTER DELETE ON tb_class_product FOR EACH ROW
BEGIN
DELETE FROM tb_product WHERE tb_product.fingerprint=old.fingerprint;
END; //
DELIMITER ;
-------- --------編輯好的 。我發現級聯外鍵只刪除主鍵被刪除時的外鍵,但在刪除外鍵時不刪除主鍵。
此外,我發現當一個級聯外鍵被刪除時,觸發器不能運行。
現在我找到了適用於我的解決方案。
CREATE TABLE tb_class (class_ID INT PRIMARY KEY);
CREATE TABLE tb_product (fingerprint VARCHAR(255) PRIMARY KEY);
CREATE TABLE tb_class_product (class_ID INT,
fingerprint VARCHAR(255),
PRIMARY KEY (class_ID, fingerprint),
UNIQUE INDEX tb_class_product_UNIQUE (fingerprint ASC),
FOREIGN KEY (class_ID) REFERENCES tb_class(class_ID),
FOREIGN KEY (fingerprint) REFERENCES tb_product(fingerprint));
DELIMITER //
CREATE TRIGGER tb_class_product_before_delete
BEFORE DELETE ON tb_class_product FOR EACH ROW
BEGIN
IF @deleting_from_product IS NULL THEN
SET @deleting_from_class_product=1;
DELETE FROM tb_product WHERE tb_product.fingerprint=old.fingerprint;
SET @deleting_from_class_product=NULL;
END IF;
END; //
DELIMITER ;
DELIMITER //
CREATE TRIGGER tb_class_before_delete
BEFORE DELETE tb_class FOR EACH ROW
BEGIN
DELETE FROM tb_class_product WHERE tb_class_product.class_ID=old.class_ID;
END; //
DELIMITER ;
DELIMITER //
CREATE TRIGGER tb_product_before_delete
BEFORE DELETE tb_product FOR EACH ROW
BEGIN
IF @deleting_from_class_product IS NULL THEN
SET @deleting_from_product=1;
DELETE FROM tb_class_product WHERE tb_class_product.fingerprint=old.fingerprint:
SET @deleting_from_product=NULL;
END IF;
END; //
DELIMITER ;
'tb_class_product'沒有關於'tb_class'的任何信息 – 1000111