zoukankan      html  css  js  c++  java
  • mysql的联合主键与复合主键区别

    复合主键就是指你表的主键含有一个以上的字段组成 。 例如; create table test ( name varchar(19), id number, value varchar(10), primary key (id,name) ) 上面的id和name字段组合起来就是你test表的复合主键 (若其一为单索引字段时,左边的id才会有索引) 它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性 一般情况下,主键的字段长度和字段数目要越少越好

    联合主键,顾名思义就是多个主键联合形成一个主键组合,体现在联合。 (主键原则上是唯一的,别被唯一值所困扰。) 索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。 简单的例子 主键A跟主键B组成联合主键 主键A跟主键B的数据可以完全相同(困扰吧,没关系),联合就在于主键A跟主键B形成的联合主键是唯一的。

    联合主键体现在多个表上,复合主键体现在一个表中的多个字段

    学生表:student
    

    create table student(
    id mediumint auto_increment comment '主键id',
    name varchar(30) comment '姓名',
    age smallint comment '年龄',
    primary key(id)
    )
    engine = myisam,
    charset = utf8,
    comment = '学生'

    课程表:course

    create table course(
    id mediumint auto_increment comment '主键id',
    name varchar(30) comment '课程名称',
    primary key(id)
    )
    engine = myisam,
    charset = utf8,
    comment = '课程'

    学生课程表:stu_cour

    create table IF NOT EXISTS stu_cour(
    id mediumint auto_increment comment '主键id',
    stu_id mediumint comment '学生表id',
    cour_id mediumint comment '课程表id',
    primary key(id)
    )
    engine = myisam,
    charset = utf8,
    comment = '学生课程表'

    此时stu_cour中id就表示联合主键,通过id可以获取学生和课程的一条记录

    复合主键:

    create table student(
    name varchar(30) comment '姓名',
    age smallint comment '年龄',
    sex enum('男','女') comment '性别',
    primary key(name,age)
    )
    engine = myisam,
    charset = utf8,
    comment = '学生'
    
    原文地址:https://www.jianshu.com/p/8625b3b639b3
  • 相关阅读:
    关于QTTabBar的使用
    Delay, Sleep, Pause, & Wait in JavaScript
    highly recommended javascript books
    How to get the current script element
    MDX格式的字典制作
    while循环体的新用法
    printf函数的标准表达式
    C语言生成随机数代码
    C语言数组代码,小明摘苹果
    几个简单常用的C语言函数
  • 原文地址:https://www.cnblogs.com/jpfss/p/12115128.html
Copyright © 2011-2022 走看看