• MySQL数据库之键


    约束条件之主键

    1.primary key主键

            从约束角度上而言 primary key主键 等价于非空且唯一 not rull unique

    1. create table a1(
    2. id int primary key,
    3. name varchar(32)
    4. );

            InnoDB存储引擎规定一张表必须且只有一个主键;如果创建的表中没有主键但是有非空且唯一的字段那么InnoDB存储引擎会自动将该字段设置为主键;如果创建的表中没有主键也没有非空且唯一的字段 那么InnoDB存储引擎会自动采用一个隐藏的字段作为主键(主键可以快速查询数据)

    1. create table a2(
    2. nid int not null unique,
    3. sid int not null unique,
    4. name varchar(32)
    5. );
    6. id int primary key :单列主键
    7. primary key(nid,sid) :联合主键

    2.auto_increment自增

            配合主键一起使用必须跟在键后面不能单独使用

    1. create table a3(
    2. id int primary key auto_increment,
    3. name varchar(32)
    4. );

    ps:自增小知识

            自增的操作不会因为执行删除数据的操作导致id回退或者重置

            如果要重置主键 则需要格式化表:truncate 表名;

    约束条件之外键

    1.外键的作用与目的

            外键字段用来记录表与表之间的数据关系;保持数据一致性,完整性,主要目的是控制存储在外键表中的数据,使两张表形成关联。

    2.外键字段的创建

            2.1 先通过‘换位思考’来判断数据的四种关系

                    一对多关系        多对多关系        一对一关系        没有关系

    例如:一对多关系

             2.2 Foreign Key外键

                    先创建被关联的表 再创建关联表

    1. create table user(
    2. id int primary key auto_increment,
    3. name varchar(32)
    4. gender enum('female','male') default 'male',
    5. dep_id int,
    6. foreign key(dep_id) references dep(career_id)
    7. );
    8. create table career(
    9. career_id int primary key auto_increment,
    10. career_name varchar(32)
    11. );

    ○ 插入表数据的时候外键字段只能填写被关联表字段已经出现过的数据值

    ○ 被关联的字段无法修改和删除操作性不强  

            2.3 级联更新、级联删除

                    将关联的两个表数据同步变动

    1. create table user(
    2. id int primary key auto_increment,
    3. name varchar(32),
    4. gender enum('male','female') default 'male',
    5. dep_id int,
    6. foreign key(deo_id) references career(career_id)
    7. on update cascade
    8. on delete cascade
    9. );
    10. create table career(
    11. id int primary key auto_increment,
    12. career_name varchar(32)
    13. );

    ○  因为表联合使用增加了表之间的耦合度 增加资源的消耗,我们可以通过自己写SQL来建立代码层面的关系

    3.表关系之多对多

            表一数据可以对应多条表二数据,表二也可以对应多条表一数据

    1. create table a1(
    2. id int primary key auto_increment,
    3. title varchar(32)
    4. );
    5. create table a2(
    6. id int primary key auto_increment,
    7. name varchar(32)
    8. );
    9. create table a3(
    10. id int primary key auto_increment,
    11. book_id int,
    12. foreign key(book_id) references a1(id)
    13. on update cascade
    14. on delete cascade
    15. author_id int,
    16. foreign key(author_id) references a2(id)
    17. on update cascade
    18. on delete cascade
    19. );

    ○  多对多表关系外键字段不能建在任意一方需要再建一个新的表

    4.表关系之一对一

            如果表一与表二没有两边都不可以 则先考虑两张表是不是没有关系,如果有关系那么肯定是一对一关系

    1. create table user(
    2. id int primary key auto_increment,
    3. name varchar(32)
    4. detail_id int unique,
    5. foreign key(detail_id) references userDetail(id)
    6. on update cascade
    7. on delete cascade
    8. );
    9. create table userDetail(
    10. id int primary key auto_increment,
    11. phone bigint
    12. );

    ○  创建一对一的表关系时建议建在查询频率较高的表中便于后续查询 

  • 相关阅读:
    易优cms小程序常见问题
    【车载开发系列】UDS诊断---电控单元复位 ($0x11)
    Skill Check: Fundamentals of Large Language Models
    uniapp 实时定位(系统、后台运行、支持息屏)插件 Ba-Location
    [附源码]java毕业设计小型医院药品及门诊管理
    Linux|如何查找和删除重复文件
    代码随想录算法训练营day57 | LeetCode 647. 回文子串 516. 最长回文子序列
    React组件复用
    再见RestTemplate,Spring 6.1新特性:RestClient 了解一下!
    R语言时间序列数据提取:使用xts包的first函数提取时间序列中最前面一个月的数据(first 1 month)
  • 原文地址:https://blog.csdn.net/weixin_52596593/article/details/126367066