dannyy1026 写道
建表如
CREATE TABLE TEMPAAA(
ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
NAME VARCHAR(32) BINARY NOT NULL,
CREATORID UNSIGNED,
CONSTRAINT PK_TEMPAAA PRIMARY KEY (ID),
CONSTRAINT FK_CREATORID FOREIGN KEY (CREATORID)
REFERENCES TEMPAAA (ID)
)TYPE=INNODB;
想用CREATORID来表示创建者ID,可是因为ID可以删除,所以必须在删除前维护外键的约束。想过用触发器来替代实现,可触发器无法再更新触发器基表。如果外键加on delete cascade/on update cascade约束,则会出现删除不想删除的记录。
这时候,我在我的项目里还是没要应用自表外键关联,在代码中实现关联。
经过测试,在mysql5.0.X下,表内引用必须添加on delete cascade/on update cascade约束.
官方文档
引用
15.2.6.4.外键约束
注意,InnoDB支持外键在一个表内引用,在这些情况下,子表实际上意味这在表内附属的记录。
那么用代码来关联好,还是表内外键好.在记录需要更改涉及到外部资源的时候, 可以用代码关联, 比如要根据记录来删除文件;在纯粹的表内记录更改的时候,表内外键更合适, 比如删除菜单树上的节点,可以充分利用数据库特性, 但是有时候牵扯到外部资源就需要权衡了.
参考资料:
Mysql数据库表内外键关联的问题
分享到:
相关推荐
帮助您学会增加外键,在建表的时候没有加外键在之后加的方法
MySQL命令行&MySql外键设置详解 .txt
在数据库MySQL中利用外键实现级联删除、更新等方面的内容。有兴趣可以看看。。
需求是这样的,一个资源表有分类r_class_id(分类表id对应的外键) 创建者r_up_creator(用户表id对应的外键) 审核者r_ver_id (用户表id对应的外键),这时候该怎么将其都查询出来呢? 首先用左连接: select ...
知识点很简单,但是语句总忘,在这里写一个小例子,有助于大家记忆。mySql主外键关联例子
很多朋友们在做表设计时,处理添加外键时提示error 150 问题,都会遇到此文档中详细的记载了解决方案,希望可以帮到你!
MySQL 外键
内包含外键约束模式,数据库的视图基本操作
删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库...
mysql里的 外键使用 详细讲解 mysql
MySQL外键详解MySQL外键详解MySQL外键详解MySQL外键详解MySQL外键详解
数据库表A: CREATE TABLE task_desc_tab ( id INT(11) PRIMARY KEY NOT NULL COMMENT '自增主键' AUTO_INCREMENT, <strong>taskname</strong> VARCHAR(200) NOT NULL COMMENT '任务名字', sqlname VARCHAR(20) ...
MySql外键设置详解MySql外键设置详解MySql外键设置详解MySql外键设置详解MySql外键设置详解MySql外键设置详解MySql外键设置详解MySql外键设置详解MySql外键设置详解
就是为程序员提供了一条可以查询表的主键被其他表引用为外键情况的查询
建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键...
本文介绍了在MySQL数据库中定义外键的方法。
MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,...
NULL 博文链接:https://yanzhenwei.iteye.com/blog/850724
附件包含的内容为MySQL数据库中关于外键的内容,包括外键定义,作用,添加和删除
mysql外键的添加与删除参考.pdf