讲师中心 微信公众号
AI工具推荐 视频效率加速

MySQL语句中的主键和外键怎么使用

雨芳吖_3054

雨芳吖_3054

发布时间:2023-06-03 12:14:02

|

3839人浏览过

|

来源于亿速云

转载

     一.主键:

    1.1)主键字段定义:

    在数据库表中,如果有一组字段能够唯一确定一条记录,则可以把它们设计成表的主键字段。

    例子:如果要创建一个人的信息表(字段:姓名,年龄,籍贯,工作单位......),那么身份证号是唯一能确定你这个人的,所以身份证号是主键。

    1.2) 创建:

    主键字段名 primary key

    1.3)主键的选取原则;

    原则上使用一个字段做主键,而且推荐使用没有业务含义的字段做主键,比如:id等。

    1.4)主键值的生成方式:

    主键字段的类型和长度由主键值的生成方式来决定:

    1.4.1)

    自增:借助数据库自身主键生成机制
               数值型 长度由数据量来决定

    创建:主键字段名 primary key not null auto_increment

    特点:

    优点:开发效率高,因为其可以自动编号且按顺序存放便于检索占用空间小,可以节省开发人员时间。

     缺点: 运行效率低且不灵活,因为其自动增长,在手动要插入或导入指定ID的数据时会很麻烦且如果数据量过大那么越到后面,数据库自增主键的时间会变长导致查询数据库的操作变慢。如果有合并表的操作时,有概率还会出现主键的重复。

    1.4.2)

    assighed:程序员手动生成主键值,唯一非空,算法.
    hi/low:数值型 长度由数据量决定
    UUID:字符串 长度是32位

    public class UUIDUtil {//java中自带UUID的算法
        public static  String getUUID(){
            return UUID.randomUUID().toString().replaceAll("-", "");
        }
    }

    特点:

    优点:主键值生成很灵活且能够保证在任何情况下都具有唯一性,数据迁移方便。                               

     缺点:占用空间大,很难记忆,会降低性能。

    1.4.4)

    联合主键:由多个字段的类型和长度决定

     二.外键:

    2.1)外键定义:

    通常用于在两个表之间建立关系。外键的主要用途是维持实体的两个独立实例之间的数据完整性。

    2.2)外键(约束)创建(不推荐使用,一般不进行外键约束,只进行外键约定):

    alert table 主键表名 add constraint FK_ID(外键名称) foreign key(外键字段名) references 外表表名(主键字段名)

     2.3)外键出现的情况:

    补充:
     在创建表的时候,表和表之间可能会存在的业务关系(关联关系),这时会产生外键。

    关联关系中存在的关系类型:

    1对1:一张表(A)中的一条记录只能对应另一张表(B)中的一条记录,另一张表(B)中的一条记录也只能对应一张表(A)中的一条记录。 

    MySQL
    MySQL

    编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

    下载

                  eg:软工2777班和班长,公民和身份证。(商品表和该商品的描述表)

    1对多:一张表(A)中的一条记录可以对应另一张表(B)中的多条记录,另一张表(B)中的一条记录只能对应一张表(A)中的一条记录。

                  eg:商品的分类表和商品表示一对多的关系,一个商品分类下可以有多个商品,学生和班级

    多对多:(有两张表,A表中的一条数据对应B表中的多条,同时,B表中的一条对应A表中的多条)

                  eg:客户表和部门表。

     关联查询(同时利用外键查询多张表中的数据)

     关联查询的类型:

    内连接:查询所有符合条件的数据,并且要求结果在两张表中都有相对应的记录

    左外连接:查询左侧表中所有符合条件的数据,即使在右侧表中没有相对应的记录

    右外连接:查询右侧表中所有符合条件的数据,即使在左侧表中没有相对应的记录

    2.3.1)在一对多中:

    例子:A(1)---------B(n)
                 父表         子表
    tbl_student                    tbl_class
    id      name class_id          id     name
    1001    zs    111              111    class1
    1002    ls    111              222    class2
    1003    ww    222
    1004    zl    

     //查询所有姓张的学生的id,name和所在班级name
                                                 select s.id,s.name,c.name as className
                                                 from tbl_student s
                                                  join tbl_class c on s.class_id=c.id//假如外键不可以为空
                                                  where s.name like 'z%'

    张表中有相对应的记录,使用内连接。如果您想要检索所有符合条件的左侧表记录,可以使用左外连接查询

     2.3.2)在一对一中:

    tbl_person         tbl_card
    id     name        id     name
    1001   zs          1001    card1

    特点:
    a)共享主键:(不推荐)
    添加数据:先添加先产生的表,再后产生的表记录
    删除数据:先删除后产生的表记录,再删除先产生的表记录
    查询数据:无需进行连接查询:

      //查询zhangsan的驾照信息  1001
                       select *
                       from tbl_card
                       where id='1001'

    2.3.3)多对多:

    tbl_student                    tbl_course
    id     name                    id     name   
    1001   zs                      111    java   
    1002   ls                      222    mysql  
    tbl_student_course_relation
    student_id     course_id
    1001            111
    1001            222
    1002            111
    1002            222
    特点:

    添加数据时,先添加父表记录(tbl_student,tbl_course),再添加子表(tbl_student_course_relation)记录;
    删除数据时,先删除子表记录(tbl_student_course_relation),再删除父表记录(tbl_student,tbl_course)
    查询数据时,可能会进行关联查询:

      //查询所有姓张的学生的id,name,和所选课程的name
                  select s.id,s.name,c.name as courseName
                  from tbl_student s
                              join tbl_student_course_relation scr on s.id=scr.student_id
                              join tbl_course c on scr.course_id=c.id
                  where s.name like 'z%'

    三.主键和外键的区别总结:

    MySQL语句中的主键和外键怎么使用

    热门AI工具

    更多
    SkildArt
    SkildArt Hot

    SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

    Atoms
    Atoms Hot

    Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

    二狗PPT
    二狗PPT Hot

    一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    讯飞绘文

    讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    LibLibAI
    LibLibAI Hot

    一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

    UP简历
    UP简历 Hot

    一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    相关专题

    更多
    Buffalo框架数据库开发全教程
    Buffalo框架数据库开发全教程

    本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

    60

    2026.09.23

    Buffalo框架路由与请求处理实操指南
    Buffalo框架路由与请求处理实操指南

    本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

    20

    2026.09.23

    Buffalo框架零基础入门教程
    Buffalo框架零基础入门教程

    本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

    20

    2026.09.23

    Conan创建软件包配方指南
    Conan创建软件包配方指南

    本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

    20

    2026.09.22

    Conan二进制包配置指南
    Conan二进制包配置指南

    本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

    20

    2026.09.22

    Conan私有仓库搭建教程
    Conan私有仓库搭建教程

    本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

    20

    2026.09.22

    loomy官网入口地址合集
    loomy官网入口地址合集

    本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

    20

    2026.09.22

    NumPy常见函数使用方法
    NumPy常见函数使用方法

    本专题整理 NumPy 常见函数使用方法相关教程,覆盖函数大全、参数用法、数组运算、统计聚合、排序处理、where 条件筛选、linspace 创建数列等常用场景,帮助读者快速掌握 NumPy 函数调用思路和实际数据处理技巧。

    40

    2026.09.22

    NumPy性能优化版本更新与常见报错排查
    NumPy性能优化版本更新与常见报错排查

    本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

    60

    2026.09.22

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    PostgreSQL vs MySQL
    PostgreSQL vs MySQL

    共1课时 | 172人学习

    使用phpenv集成环境安装极致CMS
    使用phpenv集成环境安装极致CMS

    共2课时 | 275人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn