MySQL学习笔记(11)--外键

·概念

foreign key,外面的键(键不在自己表中):
如果A表中有一个字段(非主键)指向B表的主键,那么将该子段称之为外键。A表被称为从表,B表被称为主表。

·外键操作

·增加外键

1.创建表的时候增加外键

[constraint `外键名`] foreign key (外键字段) references 主表(主键)
--实例
create table my_foreign(
	id int primary key auto_increment,
	name varchar(10) not null,
	class_id int,
	-- 增加外键,关联my_class的主键字段id
	foreign key (class_id) references my_class(id)
);
desc my_foreign;

在这里插入图片描述
MUL:多索引,外键本身是一个索引,外键还要求外键字段本身也是一种普通索引

show create table my_foreign;

在这里插入图片描述
2.在创建表后增加外键

alter table 从表 add [constraint `外键名`] foreign key(外键字段) references 主表(主键);
--实例
alter table my_foreign add [constraint `student_class_ibfk_1`] foreign key (class_id) references my_class(id);
--效果同上

·修改&删除外键

事实上,外键不允许修改,只能删除再增加

alter table 从表 drop foreign key 外键名;
--实例
alter table my_foreign drop foreign key `my_foreign_ibfk_1`;

在这里插入图片描述
删除普通索引:

alter table 表名 drop index 索引名字;

·外键基本要求

  1. 外键字段需要保证与关联的主键字段类型完全一致
  2. 基本属性也要相同
  3. 外键只能使用innodb存储引擎,myisam不支持

·外键约束

通过建立外键关系之后,对主表和从表会有一定的数据约束。

·约束的基本概念

  1. 不能在从表中插入主表不存在的数据
  2. 不能在主表中删除从表已有的数据
insert into my_foreign values(null,'ykk',5);   -- 插入失败,主表没有5班
insert into my_foreign values(null,'ykk',2);   -- 插入成功
delete from my_class where id = 2;   -- 删除失败,从表已经有对应数据了

·外键约束的概念

可以在创建外键的时候,对外键约束进行选择性的操作。

add foreign key (外键字段) references 主表 (主键) on 约束模式;

约束模式(约束对象主要是主表):

  1. District:严格模式(默认的),主表不能删除或者更新一个已经被从表数据引用的记录
  2. Cascade:级联模式,主表变化,从表数据也变化
  3. Set null:置空模式,主表的操作之后(删除),从表对应的数据(外键字段)被置空,前提是外键字段允许为空

通常进行约束使用的时候,需要指定操作:update 和 delete
常用的约束模式:

on update cascade on delete set null      -- 更新级联,删除置空

·约束作用

保证数据完整性:主表与从表的数据要一致
正因为外键有非常强的数据约束,而且可能会导致数据在后台变化的不可控。导致程序在进行设计开发逻辑的时候,没有办法很好得把握数据,所以外键较少使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一种开源的关系型数据库管理系统,它支持多种操作系统,并且广泛应用于Web应用程序的后端数据存储。MySQL的DDL(Data Definition Language)是用于定义和管理数据库结构的基础操作。 以下是MySQL中DDL的基础操作: 1. 创建数据库:使用CREATE DATABASE语句可以创建一个新的数据库。例如,CREATE DATABASE mydatabase; 2. 删除数据库:使用DROP DATABASE语句可以删除一个已存在的数据库。例如,DROP DATABASE mydatabase; 3. 创建表:使用CREATE TABLE语句可以创建一个新的数据表。在CREATE TABLE语句中,需要指定表名和表的列及其属性。例如,CREATE TABLE mytable (id INT, name VARCHAR(50)); 4. 删除表:使用DROP TABLE语句可以删除一个已存在的数据表。例如,DROP TABLE mytable; 5. 修改表结构:使用ALTER TABLE语句可以修改已存在的数据表的结构,包括添加、修改和删除列等操作。例如,ALTER TABLE mytable ADD COLUMN age INT; 6. 添加主键:使用ALTER TABLE语句可以为数据表添加主键约束,以确保每行数据的唯一性。例如,ALTER TABLE mytable ADD PRIMARY KEY (id); 7. 添加外键:使用ALTER TABLE语句可以为数据表添加外键约束,以确保与其他表的关联完整性。例如,ALTER TABLE mytable ADD FOREIGN KEY (customer_id) REFERENCES customers(id); 8. 创建索引:使用CREATE INDEX语句可以为数据表创建索引,以提高查询性能。例如,CREATE INDEX idx_name ON mytable (name); 这些是MySQL中DDL的基础操作,通过这些操作可以定义和管理数据库的结构。如果你有更具体的问题或者需要了解更多高级的DDL操作,请告诉我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值