MySQL群集能不能使用外键_Mysql外键的使用

MySQL外键(请确保数据库是innodb类型)网上有很多介绍的文章,这里我就凭自己的理解再次整理了下,废话不多说,直入正题哈.

外键的作用:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用外表中列的值!

我们来建两个表

1 CREATE TABLE`example1` (2 `stu_id` int(11) NOT NULL DEFAULT '0',3 `name` VARCHAR(11) NOT NULL DEFAULT '',4 `course_id` int(11) NOT NULL DEFAULT '0',5 `grade` float DEFAULT NULL,6 PRIMARY KEY(`stu_id`,`course_id`)7 ) engine=INNODB;8 CREATE TABLE`example2` (9 `id` int(11) NOT NULL,10 `stu_id` int(11) DEFAULT NULL,11 `course_id` int(11) DEFAULT NULL,12 PRIMARY KEY(`id`),13 KEY`f_ck` (`stu_id`,`course_id`),14 CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES`example1` (`stu_id`, `course_id`)15 ) engine=INNODB;16 insert into example1 (stu_id,name,course_id,grade)values(1,'baidu',1,97.5),(2,'google',2,89);17 insert into example2 (id,stu_id,course_id)values(1,1,1),(2,2,2);

example1表,里面包含stu_id学号,name姓名,course_id课程号,grade分数

example2表,里面包含id,stu_id学号,course_id课程号,然后建立外键

分别插入数据到两个表中。

我们把example2中的stu_id和course_id称为example2表的外键,example1是父表,example2是子表,两个表形成关联,必须子表的数据删除后,才能删除父表中的对应数据

现在我们来删除example1中的一条数据:

3655e9f69eb6d3a6efc59106cae7d376.png

因为example2中的数据关联了example1的数据,这样是删不了的,达到了外键的作用.

然后我们来先删除example2表中的数据,再删除example1表中的数据

4e95f5ae210afc58badb1503c6117399.png

这样就成功了;

事件触发限制:

on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

我们来看看事件触发限制是干啥的。。。

我们先删除外键,然后重新建立外键带上事件触发限制

alter table example2 drop foreign keyf_ck;alter table example2 add CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`) ON DELETE CASCADE ON UPDATE CASCADE;

我们先看下数据:

ec261d6e77e706a69ffe6034ca883329.png

3b818acaf63f8ad35c906b4b6e36463e.png

再来修改example1表中的数据看看

update example1 set stu_id=3,course_id=3 where stu_id=1;

再来查看数据:

e159d441b8edca441c2f0e8f62d02826.png

426c059a7d92b0733c43f6e162207e47.png

发现没,example1和example2中的stu_id和course_id都变成了3。

我们在来删除example1表中的数据

delete from example1 where stu_id=3;

会发现可以删除,而且example2子表中的数据也没有了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL外键约束是用来保证数据完整性的一种机制,主要用于确保两个表之间的关联关系。当在一个表中创外键,并将其指向另一个表的主键时,MySQL会自动检查这个外键是否存在对应的主键,如果不存在,则会拒绝这个操作。这样可以确保表之间的数据关联是正确的,从而保证了数据的完整性。 外键约束的使用场景包括以下几个方面: 1. 多对一关系:当一个表中的多条记录关联到另一个表中的一条记录时,可以使用外键约束来确保这种关系的正确性。比如,在一个订单表中,每个订单都对应着一个客户,这时可以在订单表中创一个指向客户表主键的外键,来确保每个订单都有对应的客户。 2. 一对一关系:当两个表之间存在一对一关系时,可以使用外键约束来确保这种关系的正确性。比如,在一个员工表和一个工资表之间存在一对一关系,可以在工资表中创一个指向员工表主键的外键,来确保每个工资记录都有对应的员工记录。 3. 多对多关系:当两个表之间存在多对多关系时,需要使用一个中间表来进行关联。这时可以在中间表中创两个外键,分别指向两个关联表的主键,来确保这种关系的正确性。 总的来说,外键约束是用来确保数据完整性的一种重要机制,可以避免数据关联错误和数据冗余等问题,提高数据的质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值