首页 > 其他分享 >今日内容 约束条件之主键和外键

今日内容 约束条件之主键和外键

时间:2022-08-16 17:55:39浏览次数:75  
标签:约束条件 int primary 外键 id key 主键

  • 约束条件之主键

 一.primary主键

1.单从约束角度上而言主键等价于非空且唯一 not null unique
        create table t1(
           id int primary key,
           name varchar(32)
        ); 
     2.InnoDB存储引擎规定一张表必须有且只有一个主键
        2.1.如果创建的表中没有主键也没有非空且唯一的字段 那么InnoDB存储引擎会自动采用一个隐藏的字段作为主键(主键可以加快数据查询:新华字典的目录)
           2.2.如果创建的表中没有主键但是有非空且唯一的字段 那么InnoDB存储引擎会自动将该字段设置为主键
            create table t2(
               nid int not null unique,
               sid int not null unique,
               uid int not null unique,
               name varchar(32)
            ); 
    3.创建表的时候都应该有一个'id'字段 并且该字段应该作为主键
            uid、sid、pid、gid、cid、id

 

id int     primary key  单列主键

sid int    nid int    联合主键

 

二.auto_increment自增

该约束条件不能单独使用 必须跟在键后面(主要配合主键一起使用)
           create table t3(
                  id int primary key auto_increment,
                  name varchar(32)
            );

 

补充说明: 自增的特点

     自增的操作不会应为执行删除数据的操作而退回或者重置 如果非要重置主键,需要格式化表

     

truncate 表名; # 删除表数据并重置主键值

 

  • 约束条件之外键

一.外键的作用

外键字段主要是用来记录标语表之间数据的关系 而数据间的关系有三种:                                  

        一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。

       一对多关系示例:一个学生只属于一个班,但是一个班级有多名学生。

       多对多关系示例:多对多就是双向一对多,一个学生可以选择多门课,一门课也有多名学生

二.foreign key外键

1.先写普通字段
2.然后再写外键字段   

create table emp(
    id int primary key auto_increment,
     name varchar(32),
      gender enum('male','female','others') default 'male',
   dep_id int,
   foreign key(dep_id) references dep(id)
);
create table dep(
    id int primary key auto_increment,
       dep_name varchar(32),
    dep_desc varchar(32)
);
"""
1.创建表的时候需要先创建被关联的表(没有外键) 然后再是关联表(有外键)
2.插入表数据的时候 针对外键字段只能填写被关联表字段已经出现过的数据值
3.被关联字段无法修改和删除
    有点不太好 操作限制性太强
"""
解决这种问题就需要 级联更新和级联删除
   on update cascade  # 级联更新 
   on delete cascade  # 级联删除
所以完整代码命令是
create table emp1(
    id int primary key auto_increment,
     name varchar(32),
      gender enum('male','female','others') default 'male',
   dep_id int,
   foreign key(dep_id) references dep1(id) 
   on update cascade  # 级联更新 
   on delete cascade  # 级联删除
);
create table dep1(
    id int primary key auto_increment,
       dep_name varchar(32),
    dep_desc varchar(32)
);
"""
扩展:
    在实际工作中 很多时候可能并不会使用外键
        因为外键增加了表之间的耦合度 不便于单独操作 资源消耗增加
    我们为了能够描述出表数据的关系 又不想使用外键
        自己通过写SQL 建立代码层面的关系
"""


 

  •  表关系之多对多

以书籍表和作者表为例
    1.先站在书籍表的角度
        问:一条书籍数据能否对应多条作者数据
       答:可以
    2.再站在作者表的角度
        问:一条作者数据能否对应多条书籍数据
       答:可以
    总结:两边都可以 那么表数据关系就是'多对多'
    针对多对多表关系 外键字段不能建在任意一方!!!
需要单独开设第三张关系表 存储数据关系
        create table book(
            id int primary key auto_increment,
           title varchar(32)
        );
       create table author(
               id int primary key auto_increment,
           name varchar(32)
       );
        create table book2author(
            id int primary key auto_increment,
           book_id int,
           foreign key(book_id) references book(id) 
           on update cascade  # 级联更新 
           on delete cascade, # 级联删除
           author_id int,
           foreign key(author_id) references author(id) 
           on update cascade  # 级联更新 
           on delete cascade  # 级联删除
        );
  • 表关系之一对一

 针对'一对一'的表关系 外键字段建在任何一张表都可以 但是建议你建在查询频率较高的表中便于后续查询
   create table user(
           id int primary key auto_increment,
       name varchar(32)
       detail_id int unique,
       foreign key(detail_id) references userDetail(id) 
       on update cascade  # 级联更新 
       on delete cascade  # 级联删除
   );
    create table userDetail(
        id int primary key auto_increment,
       phone bigint
    );

 

标签:约束条件,int,primary,外键,id,key,主键
From: https://www.cnblogs.com/tai-yang77/p/16592406.html

相关文章

  • MySQL的约束条件,约束条件主键,外键,foieign key,表关系(多对一,多对多,一对一)
    MySQL的约束条件约束条件回顾约束条件之主键主键的作用primarykeyInnoDB存储引擎规定主键单列主键和联合主键auto_increment自增自增的特点......
  • 数据库2/字符编码/配置文件/字段类型/约束条件
    mysql基础2字符编码与配置文件存储引擎创建表的完整语法字段类型之整型字段类型之浮点型字段类型之字符型数字的含义字段类型与枚举集合字段类型之日期类型字段......
  • Mybatis新增数据返回自增主键
    一、数据库设计选择主键自动递增二、Mybatis配置设置eyProperty="id"useGeneratedKeys="true"<insertid="insertSentence"keyProperty="id"useGeneratedKeys="tru......
  • 5.1 主键约束
    主键约束(PRIMARYKEY)目录主键约束(PRIMARYKEY)SQLServerPRIMARYKEY(主键)约束简介SQLServerPRIMARYKEY约束示例SQLServerPRIMARYKEY(主键)约束简介主键是唯......
  • 5.2 外键约束
    外键约束(FOREIGNKEY)目录外键约束(FOREIGNKEY)SQLServer外键约束简介SQLServerFOREIGNKEY(外键)约束语法SQLServerFOREIGNKEY示例外键引用的行为删除父表中行的操......