MySQL中添加外键约束实现数据表之间的关联性约束(mysql中加外键约束)
在MySQL中,外键约束是一种数据表之间的关联性约束方式,通过它可以实现数据表之间的引用完整性,保证数据之间的一致性和完整性,避免不必要的数据错误和重复。本文将介绍在MySQL中添加外键约束实现数据表之间的关联性约束,具体操作步骤如下。
一、创建主表和从表
在MySQL中创建两个数据表,一个称为主表,另一个称为从表。主表中包含的字段为员工ID、员工名称和职位ID,从表中包含的字段为职位ID和职位名称。两个表之间的连接实现的就是通过主表的职位ID和从表的职位ID来关联起来。
代码如下:
CREATE TABLE tbl_employee (
emp_id INT(11) NOT NULL, emp_name VARCHAR(50) NOT NULL,
position_id INT(11) NOT NULL, PRIMARY KEY (emp_id),
INDEX idx_position_id (position_id), CONSTRNT fk_position_id FOREIGN KEY (position_id) REFERENCES tbl_position (position_id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE tbl_position ( position_id INT(11) NOT NULL,
position_name VARCHAR(50) NOT NULL, PRIMARY KEY (position_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上代码中,主表的职位ID字段被设置为外键,并通过“REFERENCES”引用从表的职位ID字段,将它们两者连接起来形成关联性约束。从表中的职位ID字段被设置为主键,保证数据的唯一性。
二、查看外键约束
在以上代码中已经设置了外键约束,我们可以通过以下语句查看外键约束的详细信息:
SHOW CREATE TABLE tbl_employee;
输出如下:
CREATE TABLE `tbl_employee` (
`emp_id` int(11) NOT NULL, `emp_name` varchar(50) NOT NULL,
`position_id` int(11) NOT NULL, PRIMARY KEY (`emp_id`),
KEY `idx_position_id` (`position_id`), CONSTRNT `fk_position_id` FOREIGN KEY (`position_id`) REFERENCES `tbl_position` (`position_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900__ci
可以看到,外键约束的名称为“fk_position_id”,连接的从表是“tbl_position”的“position_id”字段。
三、测试外键约束
接下来,我们为主表添加数据,然后通过删除从表中的数据来测试外键约束,看是否能够有效地保护数据的完整性。代码如下:
INSERT INTO `tbl_position` (`position_id`, `position_name`) VALUES (1, 'CEO'), (2, 'CTO'), (3, 'CFO'), (4, 'COO');
INSERT INTO `tbl_employee` (`emp_id`, `emp_name`, `position_id`) VALUES (1, 'Alice', 2), (2, 'Bob', 1), (3, 'Charlie', 3), (4, 'David', 4);
DELETE FROM `tbl_position` WHERE `position_id` = 1;
在上述代码中,我们为从表“tbl_position”添加了四条记录,为主表“tbl_employee”添加了四条记录,并删除从表中的一个记录,这个记录被主表引用。此时,如果外键约束没有起到作用,从表中的数据就能被删除,那么数据的完整性就会被破坏,也就是删除后的数据和主表数据不匹配。
实际测试结果显示,如果数据表之间设定了外键约束,当从表中存在被主表引用的数据时,从表中的数据无法被删除。MySQL会通过抛出错误来告知用户无法删除数据,出错信息类似于:
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constrnt fls (`test`.`tbl_employee`, CONSTRNT `fk_position_id` FOREIGN KEY (`position_id`) REFERENCES `tbl_position` (`position_id`) ON DELETE CASCADE ON UPDATE CASCADE)
四、总结
本文介绍了在MySQL中添加外键约束实现数据表之间的关联性约束,通过外键约束可以保证数据的完整性和一致性,避免不必要的数据错误和重复。在设计数据库结构时,应合理地使用外键约束,以符合数据的业务需求和数据安全的要求。