- 浏览: 612132 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
kangh:
转载的也拿出来 都不试一下 完全错误
Nginx+ffmpeg的HLS开源服务器搭建配置及开发详解 -
wangtxlz:
#cd builders/cmake#cmake .系统提示命 ...
crtmpserver流媒体服务器的介绍与搭建 -
hnraysir:
支持支持支持
手机Android音视频采集与直播推送,实现单兵、移动监控类应用 -
wuent:
把web服务器和php框架绑定到一起?真不建议这样。。。
Swoole(PHP高级Web开发框架) -
wuent:
有更详细的性能比较吗?php,python,java
PHP中的(伪)多线程与多进程
首先,目前在产品环境可用的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分布式中间件:Cobar
2015-01-28 00:18 1071Cobar是阿里巴巴研发的关系型数据的分布式处理系统(Amoe ... -
由浅入深探究mysql索引结构原理、性能分析与优化
2015-01-28 00:13 760第一部分:基础知识 第 ... -
MySQL Explain 结果解读与实践
2015-01-27 22:33 847Explain 结果解读与实践 基于 MySQL 5.0.6 ... -
MySQL 高可用架构之MMM - yayun
2015-01-20 00:09 811简介 MMM(Master-Master replicati ... -
理解MySQL——索引与优化
2015-01-09 15:23 643写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进 ... -
B树、B-树、B+树、B*树
2015-01-09 15:10 705B树 即二叉搜索树: 1.所 ... -
MySQL NDB 6.3.20集群安装
2014-10-19 10:49 949引言: 本文会先对MySQ ... -
sphinx的配置和管理
2013-10-16 14:38 720Sphinx增量索引(转) 在实际应用中往往有这么一 ... -
微博数据库设计
2013-06-14 09:27 0部分功能建表设计 Use ... -
MySQL STRAIGHT_JOIN 与 NATURAL JOIN
2013-03-12 14:10 1211MySQL STRAIGHT_JOIN STRAIGHT_ ... -
MySQL的四种不同查询的分析
2013-03-02 09:42 01.前置条件: 本次是基于小数据量,且数据块在一个页中的最 ... -
MySQL Variable解读
2012-12-07 14:36 2174说明:具体参数还是要很对应版本对应,这是dba必须要 ... -
MySQL DELAY_KEY_WRITE(在mysql插入大数据量时可以关闭索引的选项)
2012-12-07 14:27 0mysql插入索引太慢 加参 ... -
mysql 的explain解析
2012-11-16 15:43 0在 explain的帮助下,您 ... -
java execute、executeQuery和executeUpdate之间的区别
2012-11-16 13:51 1075在用纯JSP做一个页面报警功能的时候习惯性的用executeQ ... -
MySQL分区表
2012-11-16 10:46 933查看分区情况 点击(此处)折叠或打开 ... -
Linux启用MySQL的InnoDB引擎[转]
2012-10-24 23:09 0前几天公司的一个项目组的同事反应说公司内部的一台Linux服务 ... -
源码安装Mysql,补装innodb引擎方法
2012-10-24 23:03 936首先确定,在mysql的'plugin_dir'下有ha_ ... -
MYSQL使用.frm恢复数据表结构的实现方法
2012-10-16 23:06 970我们都知道当我们建立数据表(innodb或myisam)时,会 ... -
史上最详细MySQL5.5复制配置步骤,与以前版本的有所不同[转]
2012-05-21 12:53 980操作系统:CentOS 5.8 MySQL版本:5.5 ...
相关推荐
"MySQL 中利用外键实现级联删除、更新" 在 MySQL 中,外键是指在一个表中的一列或多列,引用另一个表中的主键或唯一索引。外键可以强制实施数据的一致性和完整性,使得数据更加可靠。外键在 MySQL 中的实现主要是...
本篇文章将详细讲解如何使用外键在MySQL中实现级联删除和更新。 首先,要使用外键,数据库表必须使用支持外键的存储引擎,如InnoDB。InnoDB引擎提供了事务处理、行级锁定以及外键约束等功能,是实现这些级联操作的...
本文详细介绍了在MySQL中增加外键的方法,并提供了使用PHPMyAdmin管理工具和SQL语句来实现外键添加的操作步骤和注意事项。 首先,要成功地在MySQL中增加一个外键,需要满足几个前提条件: 1. 本表的列必须与外键...
MySQL的InnoDB存储引擎支持多种不同的处理外键的方式,包括级联更新(Cascade Update)和级联删除(Cascade Delete)。本文将深入探讨这两种机制及其在MySQL中的实现方式。 #### 一、基本概念 **级联更新(Cascade ...
### 如何在MySQL数据库中定义外键 #### 定义数据表 ...综上所述,通过以上步骤,我们不仅可以在 MySQL 数据库中成功定义外键,还可以根据业务需求选择合适的级联操作来进一步增强数据的一致性和完整性。
本文介绍了在MySQL数据库中定义数据表、设置索引、定义外键、级联等操作。下面将详细说明标题和描述中所说的知识点。 首先,文章中提到了创建数据表的过程,例如创建parts表和Pc表。其中,parts表用于保存配件供货...
### 数据完整性与MySQL中的外键 ...掌握外键的使用,将有助于在数据库设计和开发中实现更高效、更可靠的数据管理。在实际应用中,合理地设计和使用外键不仅可以提高数据的准确性,还能简化数据维护的工作流程。
在MySQL数据库中,外键是实现表间关系的重要机制,它确保了数据的一致性和完整性。设置外键时,有几点需要注意,以确保数据库设计的规范性和高效性。以下是对这些关键点的详细阐述: 1. **外键约束定义**: 外键是...
在IT领域,省市区级联通常是指在数据库设计中,为了实现地区选择功能,通过三个关联的表来存储省级、市级和区级的数据。这样的设计能够有效地管理与地理位置相关的数据,便于用户在前端进行逐级选择。在这个场景下,...
例如,在 MySQL 中,可以在创建表时指定外键约束并开启级联删除/更新功能。 ### 3. JDBC 实现 #### 3.1 数据访问对象 (DAO) 设计 为了实现数据库操作的封装,采用 DAO 模式是非常常见的做法。这里我们将定义两个 ...
通过上述分析,我们可以看到,在MySQL中实现省市区三级级联的关键在于合理设计数据表结构,利用外键约束确保数据的一致性,并通过多表连接查询实现完整的路径检索。这种设计不仅能够提高数据管理效率,还能简化前端...
然而,自关联表的级联删除并不像简单的外键级联删除那样直接,因为它涉及到了递归关系。 在上述标题和描述中提到的MS Server自关联表的级联删除,主要通过触发器来实现。触发器是一种特殊的存储过程,它会在特定的...
3. **级联操作**:外键支持级联删除或更新,这意味着当主表中的记录发生变化时,可以通过配置实现子表中的相关记录也自动更新或删除。 #### 三、外键的定义与设置 ##### 1. 基本定义语法 外键的定义通常包括以下...
其中 `child` 表中的 `parent_id` 字段作为外键,参照 `parent` 表中的 `id` 字段,并且当删除 `parent` 表中的记录时,同时级联删除 `child` 表中的相关记录。 创建表的 SQL 语句如下: ```sql CREATE TABLE ...
这个“mysql外键教程.zip”压缩包包含了关于MySQL外键使用的多个方面,下面将详细解释这些知识点。 首先,我们了解下外键的基础知识。外键(Foreign Key)是数据库设计中的一个重要概念,它是一个字段或者一组字段...
外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以...
在 MySQL 中,外键约束可以通过 FOREIGN KEY 语句来实现,例如: CREATE TABLE t_user ( id INT NOT NULL, name VARCHAR(30), groupid INT, PRIMARY KEY (id), FOREIGN KEY (groupid) REFERENCES t_group(id) ...