首页 > 其他分享 >外键

外键

时间:2024-07-29 09:19:10浏览次数:8  
标签:父表 外键 key table 子表 数据

数据库之外键

==========================、

一、外键的介绍

1、外键的定义

让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。

2、外键的作用

保持数据的一致性和完整性

3、msyql 数据库中的存储引擎?

myisam (默认)

innodb (外键需要用到innodb存储格式)

4、查看存储引擎

格式:show table status from 库名 where name='表名' ;

案例:show table status from hz017 where name='student2' ;

5、存储类型:myisam (默认)

5、查看外键方法:

(1)在navicat中查看

(2)

格式:show create table 表名;

案例:show create table cc

==================================================

二、外键运用

(一)建表时创建外键

(1)创建 engine=INNODB 格式

格式:
REFERENCES 父表(父表字段)) engine=INNODB ;
CREATE table 表名 (字段名 字段类型(字符长度) PRIMARY key , 字段名 字符类型(字符长度) ,constraint 外键名 FOREIGN key(子表字段);

案例:

父表
create table ss (id int(10) PRIMARY key, name varchar(20) )ENGINE=INNODB ;

子表
CREATE table cc (cid int(10) PRIMARY key ,cname VARCHAR(20) ,constraint wj FOREIGN key(cid)
REFERENCES ss(id)) engine=INNODB ;

constraint 外键 名 (指定外键名)

FOREIGN key 子表字段 指定的字段

REFERENCES 父表(父表字段) 引用外部表的主键

(二)建表以后再添加外键

格式:

alter TABLE 子表 add CONSTRAINT 外建名 FOREIGN key (子表字段) REFERENCES 父表(父表字段)

(1)新建两个表

父表
create table xx (id int(10) PRIMARY key ,name varchar(20))engine=INNODB ;

子表
create table yy (yid int(10) PRIMARY key ,yame varchar(20))engine=INNODB ;

select * from xx ;
SELECT * from yy;
show create table yy;

alter TABLE yy add CONSTRAINT wjm FOREIGN key (yid) REFERENCES xx(id)

==============================================================================

删除外键:

格式:ALTER TABLE 表名 drop foreign key 外键名;

案例:ALTER TABLE yy drop foreign key wjm ;

外键特点:

外键实际操作:

1、当父表不存在的数据,子表也无法插入数据(子表无法插入数据)

2、父表中存在的数据,子表就可以插入数据(插入数据)

3、删除数据,子表中存在的数据,直接删除父表是无法删除 (要先删除子表数据,在删除父表数据)

4、删除父表的数据,先删除子表,在删除父表

{{uploading-image-539099.png(uploading...)}}

=========================================

面试题:

1、什么是外键?

2、外键作用?

3、如何创建外键?

4、如何删除外键

5、公司中为什么使用外键?

(1)保存数据的一致性和完整性

(2)公司数据量大,造成数据重复,新旧表维护成本大,使用外键让公司数据进行分类和管理,让基础数据放在主表,子表单一化,避免数据的冗余

存储过程

标签:父表,外键,key,table,子表,数据
From: https://www.cnblogs.com/fujintao/p/18329336

相关文章

  • 【SQL 新手教程 3/20】关系模型 -- 外键
    ......
  • 【MySQL】MySQL基础知识:什么是主键?什么是外键?主键和外键有什么区别?外键有什么问题?
    在关系型数据库系统中,如MySQL,主键(PrimaryKey)和外键(ForeignKey)是两个基本且重要的概念,它们在数据库设计和数据维护中扮演着重要的角色。本文将从主键和外键的基本概念入手,详细解析它们之间的区别,并探讨外键在实际应用中可能遇到的问题。......
  • Django 将现有字段更改为外键
    我有一个Django模型,以前看起来像这样:classCar(models.Model):manufacturer_id=models.IntegerField()还有另一个模型,称为Manufacturer,id字段引用了该模型。但是,我意识到使用Django的内置外键功能会很有用,因此我将模型更改为:classCar(mode......
  • 20240722-0725 数据库外键报错
    数据库关联查询:​ 有一个村庄表,每个村庄属于一个村庄管理员,存着村庄管理员的id,村庄管理员在user_user和sys_user里存着。​ 查询村庄表,是超级管理员能看到所有村庄,村庄管理员只能看到自己的村庄。selectv.id,v.name,v.owner_id,v.created_at,v.updated_atfromlocation......
  • SQLAlchemy 无法通过多对多关系中的外键找到引用的表
    我已经成功在我的数据库中添加了一个多对多关系。但是,当尝试添加另一个时,我遇到了:sqlalchemy.exc.NoReferencedTableError:Foreignkeyassociatedwithcolumn'user_shiftTemplate.template_id'couldnotfindtable'shifttemplate'withwhichtogenerateaforeig......
  • Activiti删除外键
    Activiti相关数据库表定义了很多外键,在自定义驳回、收回操作时,很容易出现外键引起的操作失败,亲测有两种方法解决:1、临时关闭外键约束1.1操作开始前执行SETFOREIGN_KEY_CHECKS=0;关闭外键约束1.2操作完成后执行SETFOREIGN_KEY_CHECKS=1;开启外键约束2、删除Activiti相关表......
  • 第十四天笔记(外键)
    数据库之外键==========================、一、外键的介绍1、外键的定义让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。2、外键的作用保持数据的一致性和完整性3、msyql数据库中的存储引擎?myisam(默认)innodb(外键需要用到inno......
  • idea内置数据库DataGrip + 多表操作sql语句 -- 逻辑外键建表 + 案例联系
    逻辑外键建表+案例联系--=====================================多表设计================================---------------------一对多职位与员工--员工子表createtabletb_emp(idintunsignedprimarykeyauto_incrementcomment'id',user......
  • 20240718 数据库外键报错
    报错1. 1452-Cannotaddorupdateachildrow:aforeignkeyconstraintfails(bvn'.'user_user_role^,CONSTRAINT^user_user_role_user_id_e615b4e0_fk_user_user_idFOREIGNKEY(user_id’)REFERENCES^user_user(id'))翻译:不能添加或更新子行:外键约束失败(bvn&#......
  • 12 外键、视图、事务
    外键:foreignkye外键:一张表(表1)中的其中一个字段,保存的值是另外一张表(表2)的主键,那么表1就是从表(具有外键的表),表2就是主表外键表示了2张表中之间的联系,以另外一张表的外键作为主关键字的表是主表,具有此外键的表是主表的从表,设置了外键的表就是从表外键字段必须保证要与其关联的主......