Day08:MySQL外键约束(FOREIGN KEY)

MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或多列。一个表可以有一个或多个外键。

外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。
外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。

Mysql数据库默认使用的引擎是MyISAM,而MyISAM引擎不支持建外键,所以将数据库默认引擎改为InnoDB。

外键的作用

外键的作用是保持数据的一致性、完整性。例如,课程表course的主键c_id,在学生表student中有一个建courseId与这个c_id关联。

  • 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。
  • 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。

简单来说就是,一对多的关系,一是主表,多是从表

选取设置 MySQL 外键约束的字段

定义一个外键时,需要遵守下列规则:

  1. 父表必须已经存在于数据库中,或者是当前正在创建的表。
  2. 必须为父表定义主键
  3. 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  4. 在父表的表名后面指定列名或列名的组合。这个列或列的组合必须是父表的主键或候选键。
  5. 外键中列的数目必须和父表的主键中列的数目相同。
  6. 外键中列的数据类型必须和父表主键中对应列的数据类型相同。

在创建表是设置外键约束

在数据表中创建外键使用 FOREIGN KEY 关键字,具体的语法规则如下:

方式1:不指定外键名称,数据库自动生成
FOREIGN KEY (<列名>) REFERENCES <主表名> (<列名>) [ ON UPDATE CASCADE ON DELETE CASCADE]
方式2:方式二:指定外键名称为(FK_Name)
constraint FK_Name FOREIGN KEY (<列名>) REFERENCES <主表名> (<列名>) [ on delete cascade on update cascade ]

注意:外键名为定义的外键约束的名称,一个表中不能有相同名称的外键;字段名表示子表需要添加外健约束的字段列;主表名即被子表外键所依赖的表的名称;主键列表示主表中定义的主键列或者列组合。

【实例1】创建学生表students和课程表course,其中学生表和课程表是一对多的关系,输入的SQL语句如下

mysql> create table course(
    -> c_id int(11) primary key auto_increment,
    -> c_name varchar(50),
    -> c_grade varchar(20)
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Query OK, 0 rows affected
mysql> create table students(
    ->id int auto_increment primary key,
    ->name varchar(6),
    ->class_id int,
    ->foreign key(class_id) references Class(id) ON UPDATE CASCADE ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

删除外键约束

对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系,MySQL 中删除外键的语法格式如下:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

【实例2】把学生表students的外键删除,输入的SQL语句如下

mysql> alter table students drop foreign key students_ibfk_1;
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0

mysql> 

在修改表时添加外键约束

在修改数据表时添加外键约束的语法规则为:

ALTER TABLE <数据表名> ADD CONSTRAINT <FK_Name>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

【实例3】把学生表的students添加外键关系,输入的SQL语句如下

mysql> alter table students add constraint students_ibfk_1
    -> foreign key (c_course) references course(c_id);
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

didiplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值