mysql外键设置方式

news/2025/2/12 0:14:16/

mysql外键设置方式/在创建索引时,可指定在delete/update父表时,对子表进行的相应操作,
包括: restrict, cascade,set null 和 no action ,set default.

  • 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;

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

例如对上面新建的两个表,子表外键指定为:on delete restrict ON UPDATE CASCADE 方式,在主表删除记录的时候,若子表有对应记录,则不允许删除;主表更新记录时,如果子表有匹配记录,则子表对应记录 随之更新。
eg:

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

这里写图片描述


http://www.ppmy.cn/news/862628.html

相关文章

怎么在sqlyog设置表的外键

怎么在sqlyog设置表的外键 三种方法:   1.直接写sql语句.   2.用SQLyog 选择外键表 ,点击右键 选择关联/外键,然后再选择主表,外键.   3.在表 vet_specialties 上点击右键 ,然后找到Relationships/ForeignKeys中…

SQL server中如何设置外键

以前创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只有主键没有外键时不行的。 建外键的前提是此外键必须是另外一个表的主键。建外键的步骤: 第一步打开要建外键表的设计器,右击选择“关系”。…

什么是外键,外键的作用

什么是外键: 如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从…

MySQL中如何设置外键

下面我将以举例的方式说明,作者能力有限,欢迎指正和补充。也欢迎和我交流探讨~ 一、环境 Windows操作系统,MySQL 5.7 二、使用工具 Navicat 三、前提知识 1.什么是主键 Primary key,唯一标识一个实体,取值非空唯…

mysql中设置外键的方式

☸☸ MySQL中设置外键的两种方式 前置条件(创建主表 t_comment) create table t_comment( id int primary key auto_increment , title varchar(10) not null, contents varchar(100) not null );使用外键约束(创建副标 t_reply&#xff09…

【基础篇】MySQL系列之外键设置

🔹大家好,我是颜语凌。 🔶个人主页:颜语凌 🔹文章介绍:MySQL基础篇系列文章 🔶欢迎点赞➕关注➕评论 目录 一、外键约束作用 二、对于已经存在的字段添加外键约束 三、在创建数据表时设置外键…

外键的设置

关键词:外键 | 索引 | InNoDB和MyISAM | 引用 | Mysql 设置外键的目的:保证数据的一致性! 一、外键的使用条件: ① 两个表必须是InnoDB表,MyISAM表暂时不支持外键 #查看表类型SHOW TABLE STATUS#查询结果的Engine字…

一、外键设置:外键约束(Oracle)

1.在创建表时候设置外键约束(列级)