要測試MySQL中的外鍵約束,請按照以下步驟操作:
首先,創(chuàng)建兩個表,一個作為主表(parent_table),另一個作為子表(child_table)。在創(chuàng)建子表時,需要定義外鍵約束,引用主表的相應(yīng)列。
CREATE TABLE parent_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE child_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES parent_table(id)
);
向主表中插入一些數(shù)據(jù):
INSERT INTO parent_table (name) VALUES ('Parent 1'), ('Parent 2'), ('Parent 3');
嘗試向子表中插入一些數(shù)據(jù),其中parent_id
為主表中存在的ID:
INSERT INTO child_table (name, parent_id) VALUES ('Child 1', 1), ('Child 2', 1), ('Child 3', 2);
此時,插入成功,因為子表中的parent_id
值在主表中存在。
嘗試向子表中插入一個數(shù)據(jù),其中parent_id
為主表中不存在的ID:
INSERT INTO child_table (name, parent_id) VALUES ('Child 4', 10);
此插入操作將失敗,因為parent_id
為10的值在parent_table
中不存在。MySQL將返回一個錯誤,提示外鍵約束失敗。
創(chuàng)建一個AFTER INSERT觸發(fā)器,當(dāng)向子表中插入違反外鍵約束的數(shù)據(jù)時,該觸發(fā)器將被激活。
DELIMITER //
CREATE TRIGGER test_fk_constraint
AFTER INSERT ON child_table
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT * FROM parent_table WHERE id = NEW.parent_id) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Error: Child table references non-existing parent table ID.';
END IF;
END;
//
DELIMITER ;
現(xiàn)在,當(dāng)嘗試插入違反外鍵約束的數(shù)據(jù)時,觸發(fā)器將激活并返回錯誤消息。