mysql 级联删除_Mysql级联删除

首先是测试环境了。我的是phpmyadmin version 4.4.14版本。

测试的创建两个表,一个记录主要数据,一个记录扩展数据。

表结构式:-- phpMyAdmin SQL Dump

-- version 4.4.14

-- http://www.phpmyadmin.net

--

-- Host: 127.0.0.1

-- Generation Time: 2015-09-10 10:10:25

-- 服务器版本: 5.6.26

-- PHP Version: 5.6.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

SET time_zone = "+00:00";

--

-- Database: `one`

--

-- --------------------------------------------------------

--

-- 表的结构 `roottb`

--

CREATE TABLE IF NOT EXISTS `roottb` (

`id` int(11) unsigned NOT NULL,

`data` varchar(128) NOT NULL DEFAULT ''

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

--

-- 转存表中的数据 `roottb`

--

INSERT INTO `roottb` (`id`, `data`) VALUES

(1, 'test root line 1'),

(2, 'test root line 2'),

(3, 'test root line 3');

-- --------------------------------------------------------

--

-- 表的结构 `subtb`

--

CREATE TABLE IF NOT EXISTS `subtb` (

`id` int(10) unsigned NOT NULL,

`rootid` int(10) unsigned NOT NULL DEFAULT '0',

`data` varchar(128) NOT NULL DEFAULT ''

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

--

-- 转存表中的数据 `subtb`

--

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');

--

-- Indexes for dumped tables

--

--

-- Indexes for table `roottb`

--

ALTER TABLE `roottb`

ADD PRIMARY KEY (`id`),

ADD UNIQUE KEY `id` (`id`);

--

-- Indexes for table `subtb`

--

ALTER TABLE `subtb`

ADD PRIMARY KEY (`id`),

ADD KEY `rootid` (`rootid`);

--

-- AUTO_INCREMENT for dumped tables

--

--

-- AUTO_INCREMENT for table `roottb`

--

ALTER TABLE `roottb`

MODIFY `id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;

--

-- AUTO_INCREMENT for table `subtb`

--

ALTER TABLE `subtb`

MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=10;

--

-- 限制导出的表

--

--

-- 限制表 `subtb`

--

ALTER TABLE `subtb`

ADD CONSTRAINT `test` FOREIGN KEY (`rootid`) REFERENCES `roottb` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

创建数据表的时候给予主键和索引在导出表的时候不知道为什么显示在后面。

执行这个SQL之后可以得到的数据是:

ba241c2c8b19951c53e4022288a0d9d2.png

ccb4b7a95fa945a4e7916c0988ba52bb.png

然后我们删除第二条数据,得到的是:

e9fab9826da4598be35859119c4a22ae.png

f8e21a3fcad8df2397036e1387111afa.png

功能是实现了,需要注意的是

第一:必须使用InnoDB引擎;

第二:外键必须建立索引(INDEX);

第三:在phpmyadmin中设置级联更新和删除的时候是

4c79ffe805928399ed5b3053f7a6adfb.png

037c8d68788f9b277a79c2767ab74553.png

在删除文章的时候级联删除文章表的评论,这个功能还是蛮实用的。有兴趣的可以测试,如果本文章中有错误,欢迎指出。谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值