问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在phpMyAdmin中设置外键

发布网友 发布时间:2022-04-09 11:45

我来回答

2个回答

懂视网 时间:2022-04-09 16:06

1.只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。 

2.注意: 
1、必须使用InnoDB引擎; 
2、外键必须建立索引(INDEX); 
3、外键绑定关系这里使用了“ ON DELETE CASCADE”,意思是如果外键对应数据被删除,将关联数据完全删除,

 

3.更新的操作也类似,因为我们在前面建表的时候已经定义外键删除、更新操作都是CASCADE,所以在这里可以直接测试数据。

4.用外键对多个相关联的表做同时删除、更新的操作,从而保证了数据的一致性。

 

. cascade方式 
   在父表上update/delete记录时,同步update/delete掉子表的匹配记录 
   On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用 

  . set null方式 
   在父表上update/delete记录时,将子表上匹配记录的列设为null 
   要注意子表的外键列不能为not null 
   On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用 

  . No action方式 
   如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 
   这个是ANSI SQL-92标准,从mysql4.0.8开始支持 

  . Restrict方式 
   同no action, 都是立即检查外键约束 

  . Set default方式 
   解析器认识这个action,但Innodb不能识别,不知道是什么意思...

只有innoDB才允许使用外键

标签:

热心网友 时间:2022-04-09 13:14

ON DELETE、ON UPDATE表示事件触发*,可设参数:
RESTRICT(*外表中的外键改动)

CASCADE(跟随外键改动)

SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)

数据库 mysql 建立外键的前提:本表的列必须与外键类型相同(外键
必须是外表主键)。
外键作用: 使两张表形成关联,外键只能引用外表中的列的值!
指定主键关键字: foreign key(列名)
引用外键关键字: references <外键表名>(外键列名)
事件触发*: on delete 和on update , 可设参数cascade(跟随外键改
动), restrict(*外表中的外键改动),set Null(设空值),set Default(设
默认值),[默认]no action
例如:
outTable 表主键 id 类型int
创建含有外键的表:
create table temp(
id int,
name char(20),
foreign key(id) references outTable(id) on delete cascade on update
cascade);
说明:把id 列设为外键参照外表 outTable 的id 列当外键的值删除
本表中对应的列删除当外键的值改变本表中对应的列值改变。
自己实践 才能完全了解外键的作用关键是:事件触发*的作用
restrict 在没有删除引用id 的时候不允许删除背引用id
no action 在没有删除引用id 的时候不允许删除背引用id
cascade 级联删除
set null 在删除被引用id 的时候会把引用id 置为空
有时没有外键设置选项是怎么回事呢?是因为storage engine 的原因,
设置为ENGINE= InnoDB 就可以了。
用 phpmyadmin 怎么建MySQL 的外键
在 PHPMYADMIN 中暂时还没有见到所见即所得的外键定义方式.
你可以使用SQL指令去建立
语法如下:
ALTER TABLE 表名ADD FOREIGN KEY (字段名) REFERENCES
表名(字段名)
如果直接删除外键,会报错
首先先找到该外键的名称,FK_Relationship_77
先操作删除外键名称
alter table tbl_procts drop foreign key FK_Relationship_77
然后在操作删除字段
alter table tbl_procts drop column ProctLogicClassesId
下面是一个实例
首先,目前在产品环境可用的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中利用外键实现级联删除成功!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样喷香水留香更持久?有哪些技巧? 有哪些方法让香水持久度更长一些? 怎样喷香水比较持久? 如何喷香水能使味道更持久? 败北是什么梗 湖南第一师范学院生活开销 赣州博沃新能源科技有限公司怎么样? 在湖南第一师范学院读书需要支出哪些费用 江西信丰恒隆麦饭石酒业有限公司公司荣誉 信丰县资源特点 买的冰冻虾加热后,外壳怎么发白,而不是以前的变红色 在Illustrator CS6中,除了文字工具外还有什么 我用的是ai cs6,转出来字是碎的。这该怎么解决? 上虞社会保险 浙江省上虞市上浦镇养老保险查询哪个网址?? AI CS5 里面的文字块再次打开都散开了 ai中文字与描边如何分离,并且文字没有转曲,也没有打散像是下图这样,图片是cdr做的效果图 我用的ai cs6 ,怎样把文字打散? 养老保险网上怎么查询 AI中编辑文字后,想对每个字,有时是每行字,进行调整间距字体等?怎么打散的?可是怎么制作这些的? 在AI中将文字创建轮廓打散后,如何单独填色? illustrator中怎么把转曲的文字笔画打散? 在AI里面输入的段落文字可以打散吗? AI中如何将文字打散 上虞养老保险金去哪个网站查? 在Adobe Illustrator CS6中如何把一个字打散 空间已发表的说说可以再次设置权限吗? QQ空间已发表的说说怎么设置权限 汽车喇叭怎么接线图解 真空机的操作步骤 found文件夹在哪里 移动硬盘连接win7,说有异常要修复,修复后东西转移到found文件夹,这文件夹在哪,找不到 怎么找到电脑里的found文件夹 嘉兴佰捷汽车租赁有限公司怎么样? found文件夹是干什么的? 温州大华国际贸易有限公司怎么样? WIN7 有没有 FOUND 这个文件夹 怎么查看啊 内蒙古乾创通汽车维修服务有限责任公司怎么样? 汕头市和全汽车租赁有限公司怎么样? 修复磁盘时候,出现了FOUND文件夹,原来的文件都丢失了吗? 德阳市黑马运业有限责任公司怎么样? 描写人的作文350字左右 FOUND.000这个文件在C盘的哪里啊? 我的U盘出现问题了,恢复了以后显示这样,说在“Found”文件夹,可是这个文件夹在哪啊?我在计算机 found.000文件夹里面的文件怎么拿出来? 硬盘出现“FOUND”文件夹怎么办? 我盘里东西不见了,多出一个found文件夹,怎样把文件夹里东西还原回去 WIN7系统里FOUND文件夹在什么位置,移动硬盘的文件被转到了这个文件夹里。 LOL解说小智视频的介绍游戏外设的男子是谁!!! 请问,怎么才能焊接好氩弧焊