mysql外键设置方式

mysql外键设置方式mysql 外键设置方式 在创建索引时 可指定在 delete update 父表时 对子表进行的相应操作 包括 restrict cascade setnull 和 noaction setdefault restrict noaction 立即检查外键约束 如果子表有匹配记录 父表关联记录不能执行 delete update 操作 cascade 父表 delete

  • restrict,no action:
    立即检查外键约束,如果子表有匹配记录,父表关联记录不能执行 delete/update 操作;

  • cascade:
    父表delete /update时,子表对应记录随之 delete/update ;

  • set null:
    父表在delete /update时,子表对应字段被set null,此时留意子表外键不能设置为not null ;

  • set default:
    父表有delete/update时,子表将外键设置成一个默认的值,但是 innodb不能识别,实际mysql5.5之后默认的存储引擎都是innodb,所以不推荐设置该外键方式。如果你的环境mysql是5.5之前,默认存储引擎是myisam,则可以考虑。

选择set null ,setdefault,cascade 时要谨慎,可能因为错误操作导致数据丢失。

如果以上描述并不能理解透彻,可以参看下面例子。

country 表是父表,country_id是主键,city是子表,外键为country_id,和country表的主键country_id对应。

create table country( country_id smallint unsigned not null auto_increment, country varchar(50) not null, last_update timestamp not null default current_timestamp on update current_timestamp, primary key(country_id) )engine=INNODB default charset=utf8; CREATE TABLE `city` ( `city_id` smallint(5) unsigned NOT NULL auto_increment, `city` varchar(50) NOT NULL, `country_id` smallint(5) unsigned NOT NULL, `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`city_id`), KEY `idx_fk_country_id` (`country_id`), CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) on delete restrict ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

这里写图片描述
这里写图片描述

insert into country values(1,'wq',now()); select * from country; insert into city values(222,'tom',1,now()); select * from city; 

这里写图片描述

delete from country where country_id=1; update country set country_id=100 where country_id=1; select * from country where country='wq'; select * from city where city='tom'; 

这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199234.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午1:33
下一篇 2026年3月26日 下午1:33


相关推荐

  • java integer long 转换_long(Long)与int(Integer)之间的转换

    java integer long 转换_long(Long)与int(Integer)之间的转换1.将long型转化为int型,这里的long型是基础类型:longa=10;intb=(int)a;2.将Long型转换为int型的,这里的Long型是包装类型:Longa=10;intb=a.intValue();3.将Long型转换为Integer型的,这里的Long型是包装类型:Longa=10;;Integerb=a.intValue(…

    2022年6月5日
    44
  • SSE技术

    SSE技术作者 AlexFarber 出处 http www codeproject com cpp sseintro aspSSE 技术简介 Intel 公司的单指令多数据流式扩展 SSE StreamingSIM 技术能够有效增强 CPU 浮点运算的能力 VisualStudio NET2003 提供了对 SSE 指令集的编程支持 从而允许用户在 C 代码中不用编

    2026年3月18日
    3
  • Java面试题目,Java中级面试题及答案整理(1)

    Java面试题目,Java中级面试题及答案整理(1)(5)GlobalSession:这个只在portal应用中有用,给每一个globalhttpsession新建一个Bean实例。5、Spring事务传播行为所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有

    2022年8月31日
    6
  • Cursor如何开发前后端分离项目

    Cursor如何开发前后端分离项目

    2026年3月16日
    2
  • pycharm代码整体左移和右移缩进快捷键

    pycharm代码整体左移和右移缩进快捷键在使用pycharm时,经常会需要多行代码同时缩进、左移,pycharm提供了快捷方式1、pycharm使多行代码同时缩进  鼠标选中多行代码后,按下Tab键,一次缩进四个字符2、pycharm使多行代码同时左移 鼠标选中多行代码后,同时按住shift+Tab键,一次左移四个字符…

    2022年8月27日
    7
  • Java值传递与引用传递的区别

    Java值传递与引用传递的区别Java 值传递与引用传递文章目录 Java 值传递与引用传递前景实参与形参值传递与引用传递 Java 中的值传递总结前景关于这个问题 引发过很多广泛的讨论 看来很多程序员对于这个问题的理解都不尽相同 甚至很多人理解的是错误的 还有的人可能知道 Java 中的参数传递是值传递 但是说不出来为什么 在开始深入讲解之前 有必要纠正一下大家以前的那些错误看法了 如果你有以下想法 那么你有必要好好阅读本文 错误理解一 值传递和引用传递 区分的条件是传递的内容 如果是个值 就是值传递 如果是个引用 就是引用传递 错误

    2025年9月28日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号