展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > MySQL中主键和外键的使用方法

MySQL中主键和外键的使用方法

一.主键:1.1)主键字段定义:在数据库表中,如果有一组字段能够唯一确定一条记录,则可以把它们设计成表的主键字段。例子:如果要创建一个人的信息表(字段:姓名,年龄,籍贯,工作单位......),那么身份证号是唯一能确定你这个人的,所以身份证号是主键。1.2)创建:主键字段名primarykey1.3)主键的选取原则;原则上使用一个字段做主键,而且推荐使用没有业务含义的字段做主键,比如:id等。1.4)主键值的生成方式:主键字段的类型和长度由主键值的生成方式来决定:1.4.1)自增:借助数据库自身主键生成机

     一.主键:

    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)中的一条记录。 

                  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中主键和外键的使用方法

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 MySQL
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Compressor macOS版
    Compressor macOS版

    Compressor 是 Apple 面向 Mac 推出的专业媒体转码与交付工具,可与 Final Cut Pro、Motion 协同工作。它支持批量任务、自定义编码预置、HDR 与广色域处理、字幕、空间视频、专业媒体格式及多台 Mac 分

    Apple Motion macOS版
    Apple Motion macOS版

    Apple Motion 是苹果面向 Mac 视频创作者推出的动态图形与视觉特效工具,可制作二维及三维字幕、转场、粒子动画、对象跟踪和合成效果,并能将自定义模板直接用于 Final Cut Pro。

    Archicad macOS版
    Archicad macOS版

    Archicad是Graphisoft推出的建筑信息模型设计软件,可在Mac上完成概念设计、参数化建模、图纸编制、工程量统计、渲染展示及团队协同。模型与平立剖面、明细表和布局保持关联,适合建筑师、室内设计师、BIM团队及相关专业学生使用。

    AutoCAD LT macOS版
    AutoCAD LT macOS版

    AutoCAD LT是Autodesk推出的专业二维CAD设计与文档编制软件,Mac版本提供原生界面、多点触控及分屏查看体验。用户可精确创建和编辑DWG图形,完成图层管理、尺寸标注、表格、PDF参考、外部参照及打印输出。

    AutoCAD macOS版
    AutoCAD macOS版

    AutoCAD for Mac 是 Autodesk 面向 macOS 提供的专业计算机辅助设计软件,支持精确的二维绘图、标注、布局输出以及实体、曲面和网格建模。软件采用适配 Mac 操作习惯的界面,可处理 DWG 图纸。

    Autodesk Fusion macOS版
    Autodesk Fusion macOS版

    Autodesk Fusion 是面向产品设计与制造的一体化云连接平台,在 Mac 上提供参数化建模、自由曲面、装配、工程图、仿真、PCB 设计和 CAM 加工等工具。它适合机械工程师、工业设计师、创客及制造团队使用。

    Autodesk Maya macOS版
    Autodesk Maya macOS版

    Autodesk Maya是一套面向影视动画、游戏开发和视觉特效制作的专业三维创作软件,集多边形与曲面建模、角色绑定、关键帧动画、动力学模拟、程序化特效及Arnold渲染于一体,并提供脚本、插件和开放式制作管线支持。

    Blender macOS版
    Blender macOS版

    Blender是一款免费开源的综合三维创作软件,可在Mac上完成建模、数字雕刻、材质制作、角色绑定、动画、物理模拟、渲染、合成及视频剪辑。软件提供Cycles与Eevee渲染工具,并支持几何节点、蜡笔绘制和Python扩展。

    BricsCAD macOS版
    BricsCAD macOS版

    BricsCAD 是一款以原生 DWG 为核心的专业 CAD 软件,可在 Mac 上完成二维绘图、标注、图纸管理及三维建模。产品提供 Lite、Pro、BIM、Mechanical 和 Ultimate 等授权层级。

    Capture One Pro macOS版
    Capture One Pro macOS版

    Capture One Pro 是面向摄影师、数码技术员和商业影像团队的专业后期软件,提供高质量RAW解析、精细色彩控制、图层蒙版、目录与会话管理,以及业内领先的联机拍摄工作流。Mac用户可通过官方安装包部署。

    Cinema 4D macOS版
    Cinema 4D macOS版

    Cinema 4D是Maxon推出的专业三维创作软件,适合动态设计、广告包装、产品可视化、影视特效及游戏资产制作。软件将建模、角色动画、MoGraph程序化运动、动力学模拟与Redshift GPU渲染整合在统一工作环境中。

    Cubase macOS版
    Cubase macOS版

    Cubase 是 Steinberg 推出的专业数字音频工作站,适用于歌曲创作、录音、MIDI 编曲、影视配乐、混音及母带制作。Mac 版提供完整的多轨制作环境,并集成虚拟乐器、效果器、音高修正、节奏设计和乐谱编辑工具。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    Windows 10
    Windows 10

    Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

    极度公式
    极度公式

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    密码键盘
    密码键盘

    密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

    思源笔记
    思源笔记

    思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    傲梅轻松备份
    傲梅轻松备份

    傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

    Office 365 简体中文
    Office 365 简体中文

    一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

    Mac
    Wise Folder Hider Pro
    Wise Folder Hider Pro

    Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

    WALTR PRO
    WALTR PRO

    WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    CodeExpander
    CodeExpander

    CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。