老师讲课真垃圾,记得老师讲过级联什么的,但是她没讲出来,也许根本不会。毕竟她不是专门搞数据库的,还搞c,vb等,以前就更多了还有basic,delphe,pasic等我拼都拼不对的语言。
show tables;
+----------------+
| Tables_in_zpgl |
+----------------+
| roles |
| users |
| usersroles |
+----------------+
mysql> select * from users ;
+----+----------+----------+
| id | name | password |
+----+----------+----------+
| 1 | zhangsan | 123 |
| 2 | lisi | 123 |
| 3 | wangwu | 123 |
| 4 | zhaoliu | 123 |
| 5 | wangdan | 123 |
| 6 | sgl | 123 |
+----+----------+----------+
mysql> select * from roles ;
+----+----------+
| id | name |
+----+----------+
| 1 | admin |
| 2 | 问卷管理 |
| 3 | 职位管理 |
| 4 | 简历管理 |
| 5 | 面试管理 |
| 6 | 试题管理 |
+----+----------+
mysql> select * from usersroles ;
+----+--------+----------+--------+----------+
| id | userid | username | roleid | rolename |
+----+--------+----------+--------+----------+
| 1 | 6 | sgl | 1 | admin |
| 2 | 1 | zhangsan | 2 | 问卷管理 |
| 3 | 2 | lisi | 3 | 职位管理 |
| 4 | 3 | wangwu | 4 | 简历管理 |
| 5 | 4 | zhaoliu | 5 | 面试管理 |
| 6 | 5 | wangdan | 6 | 试题管理 |
+----+--------+----------+--------+----------+
我想在项目中赋予管理员删除普通用户表(users)用户时,级联删除usersroles的的相关数据。还好在网上找到一篇相关文章,摘过来参考一下(一下是转的):
首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。
下面,我们先创建以下测试用数据库表:
CREATE TABLE `roottb` (
`id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
`data` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) TYPE=InnoDB;
CREATE TABLE `subtb` (
`id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
`rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`data` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
INDEX (`rootid`),
FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE
) TYPE=InnoDB;
注意:
1、必须使用InnoDB引擎;
2、外键必须建立索引(INDEX);
3、外键绑定关系这里使用了“ ON DELETE CASCADE”,意思是如果外键对应数据被删除,将关联数据完全删除,更多信息请参考MySQL手册中关于InnoDB的文档;
好,接着我们再来插入测试数据:
INSERT INTO `roottb` (`id`,`data`)
VALUES ('1', 'test root line 1'),
('2', 'test root line 2'),
('3', 'test root line 3');
INSERT INTO `subtb` (`id`,`rootid`,`data`)
VALUES ('1', '1', 'test sub line 1 for root 1'),
('2', '1', 'test sub line 2 for root 1'),
('3', '1', 'test sub line 3 for root 1'),
('4', '2', 'test sub line 1 for root 2'),
('5', '2', 'test sub line 2 for root 2'),
('6', '2', 'test sub line 3 for root 2'),
('7', '3', 'test sub line 1 for root 3'),
('8', '3', 'test sub line 2 for root 3'),
('9', '3', 'test sub line 3 for root 3');
我们先看一下当前数据表的状态:
mysql>; show tables;
+----------------+
| Tables_in_test |
+----------------+
| roottb |
| subtb |
+----------------+
2 rows in set (0.00 sec)
mysql>; select * from `roottb`;
+----+------------------+
| id | data |
+----+------------------+
| 1 | test root line 1 |
| 2 | test root line 2 |
| 3 | test root line 3 |
+----+------------------+
3 rows in set (0.05 sec)
mysql>; select * from `subtb`;
+----+--------+----------------------------+
| id | rootid | data |
+----+--------+----------------------------+
| 1 | 1 | test sub line 1 for root 1 |
| 2 | 1 | test sub line 2 for root 1 |
| 3 | 1 | test sub line 3 for root 1 |
| 4 | 2 | test sub line 1 for root 2 |
| 5 | 2 | test sub line 2 for root 2 |
| 6 | 2 | test sub line 3 for root 2 |
| 7 | 3 | test sub line 1 for root 3 |
| 8 | 3 | test sub line 2 for root 3 |
| 9 | 3 | test sub line 3 for root 3 |
+----+--------+----------------------------+
9 rows in set (0.01 sec)
嗯,一切都正常,好,下面我们要试验我们的级联删除功能了。
我们将只删除roottb表中id为2的数据记录,看看subtb表中rootid为2的相关子纪录是否会自动删除:
mysql>; delete from `roottb` where `id`='2';
Query OK, 1 row affected (0.03 sec)
mysql>; select * from `roottb`;
+----+------------------+
| id | data |
+----+------------------+
| 1 | test root line 1 |
| 3 | test root line 3 |
+----+------------------+
2 rows in set (0.00 sec)
mysql>; select * from `subtb`;
+----+--------+----------------------------+
| id | rootid | data |
+----+--------+----------------------------+
| 1 | 1 | test sub line 1 for root 1 |
| 2 | 1 | test sub line 2 for root 1 |
| 3 | 1 | test sub line 3 for root 1 |
| 7 | 3 | test sub line 1 for root 3 |
| 8 | 3 | test sub line 2 for root 3 |
| 9 | 3 | test sub line 3 for root 3 |
+----+--------+----------------------------+
6 rows in set (0.01 sec)
嗯,看subtb表中对应数据确实自动删除了,测试成功。
结论:在MySQL中利用外键实现级联删除成功!
分享到:
相关推荐
在数据库管理系统中,外键是用来建立和加强两个表数据之间链接的一类约束。在MySQL数据库中,可以通过特定的语法结构来增加外键,即便在建表时未设置外键也能在之后进行添加。本文详细介绍了在MySQL中增加外键的方法...
数据库设计中的这种关联通常采用关系型数据库管理系统(RDBMS)实现,如MySQL、PostgreSQL、Oracle等。在这些系统中,可以使用SQL(Structured Query Language)来创建和操作表,定义主键和外键约束。 例如,创建...
全国省市区镇四级级联的MySQL数据库文件"region.sql"是一个包含了中国行政区域详细信息的数据资源,主要用于在数据库系统中构建地理位置的关联结构。这样的数据通常包括省级、市级、区县级以及乡镇级行政区划的代码...
MySQL是一个非常流行的关系型数据库管理系统(RDBMS)。它基于SQL(结构化查询语言)来进行数据管理,并且是LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈的一个重要组成部分。LAMP技术栈常用于构建动态网站...
MySQL,作为一款广泛使用的开源关系型数据库管理系统,是实现这种级联结构的理想选择。本资源集合,源自腾讯官方,为适应国内需求并支持国际化,提供了中文、日文和英文的独立级联数据。 1. **级联数据库设计**: ...
在这个场景下,我们使用的数据库是MySQL,一个广泛应用于Web开发的关系型数据库管理系统。 在MySQL中,设计省市区级联的数据库结构通常会包含以下三个表: 1. **省份表(province)**:这个表存储了所有省份的信息...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,其在处理大量数据时表现出高效性和稳定性。本教程主要探讨MySQL中的四大核心高级特性:字段约束、索引、视图和外键。这四个概念是数据库设计和管理的基础,对于...
首先,让我们详细了解一下MySQL数据库在这个项目中的作用。在数据库设计中,省市区数据通常被组织成三个相关的表:省份表、城市表和区县表。每个表分别存储对应级别的行政区域信息,如省份ID、省份名称,城市ID、...
MySQL是全球广泛使用的开源关系型数据库管理系统,具有高效、稳定和易用等特点,非常适合处理这种级别的数据存储需求。在MySQL中,我们可以创建一张包含这些字段的表,例如: ```sql CREATE TABLE `areas` ( `id` ...
在本实验报告中,学生管理系统是基于MySQL数据库和PHP脚本语言实现的,旨在提供一个管理高校学生信息的平台。该系统涵盖了四个主要实体:学生、班级、系和学会,以及一个关联实体“参加”,用于描述学生参与学会的...
然后,`mysql`是广泛使用的开源关系型数据库管理系统,用于存储和管理数据。在这个项目中,mysql数据库保存了三个下拉列表框的数据,例如,省份、城市和区县的关系数据。当服务器收到ajax请求后,会根据接收到的参数...
其中MySQL作为一种流行的关系型数据库管理系统(RDBMS),因其开放源代码特性、跨平台能力、高性能、可靠性、易于使用以及强大的社区支持等特点,在LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈中占据了...
- **定义**: 查询处理是指关系数据库管理系统执行SQL查询语句的过程。 - **步骤**: - 查询解析: 分析SQL语句的语法结构。 - 查询优化: 确定执行查询的最佳路径。 - 执行计划生成: 根据优化结果生成具体的执行计划...
Oracle数据库是世界上最流行的数据库管理系统之一,它在企业级数据存储和管理方面扮演着核心角色。在Oracle数据库中,约束是确保数据完整性和准确性的关键工具。本电子文档“Oracle电子文档:数据库约束”深入探讨了...
通过上述分析,我们可以看到,在MySQL中实现省市区三级级联的关键在于合理设计数据表结构,利用外键约束确保数据的一致性,并通过多表连接查询实现完整的路径检索。这种设计不仅能够提高数据管理效率,还能简化前端...
在MySQL数据库管理中,外键约束是实现关系型数据库中数据完整性和参照完整性的关键机制。外键确保了不同表之间的引用完整性,即一个表中的数据必须存在另一个表的记录中。然而,当需要删除有外键约束的表数据时,...
在MySQL这样的关系型数据库管理系统中,这种数据结构可以帮助我们高效地存储和检索全球各地的地理位置信息。 【描述】虽然描述为空,但我们可以推测这个数据集可能包含了全球各国、各省级行政区以及下辖的城市信息...
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),以其高效、稳定和易于管理的特点,被许多网站和应用程序用于存储和管理数据。 【描述】:描述中提到,这个脚本集提供了美国城市及其所属州的数据,这意味...
在数据库 ONE 中创建三张表,注意外键约束,均是级联更新,级联删除。使用 MySQL 的 CREATE TABLE 语句可以创建表。 (3)导入数据 将数据导入到表中。使用 MySQL 的 INSERT INTO 语句可以导入数据。 (4)查询...