精华内容
下载资源
问答
  • 主键的具体定义能够唯一标识一个事物的一个字段或者多个字段的组合,被称为主键设计主键要注意的问题 含有主键叫做主键表 主键通常都是整数,不建议使用字符串为主键。(如果主键是用于集群式服务(指跨数据库...

    • 我的电脑系统:Windows 10 64位
    • SQL Server 软件版本: SQL Server 2014 Express

    主键的具体定义

    能够唯一标识一个事物的一个字段或者多个字段的组合,被称为主键


    设计主键要注意的问题

    • 含有主键的表叫做主键表
      • 主键通常都是整数,不建议使用字符串为主键。(如果主键是用于集群式服务(指跨数据库服务,比如:跨行转账),才可以考虑用字符串当主键。)
      • 主键的值通常都不允许 修改,除非本记录被删除
      • 主键不要定义成id,而要定义成表名id 或者 表名_id
      • 要用代理主键,不要用业务主键
      • 任何一张表,强烈建议不要使用业务含义的字段充当主键,我们通常都是在表中单独添加一个整型的编号充当主键字段。

    请访问:http://www.aobosir.com/

    展开全文
  • 建表时: create table student...每个表只能有一个主键,但是可以多个属性组成联合主键,但只能是在表级上定义 语句如下: primary key (name,sno); create table class( id int, grade int, foreign key (i...
    建表时:
    create table student(
    id int primary key,          //主键
    name varchar);
    
    每个表只能有一个主键,但是可以是多个属性组成联合主键,但只能是在表级上定义
    语句如下:
    primary key (name,sno);
    
    
    create table class(
    id int,
    grade intforeign key (id) references student(id));      //外键
    
    
    建表后添加主键外键:
    alter table student 
    add primary key (id);              //主键
    
    alter table class 
    add foreign key (id) references student (id);
    
    删除:
    alter table student drop primary key;
    alter table class drop foreign key (id);
    
    
    展开全文
  • 每个数据库都有一个多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。 所以,现在我们使用关系型数据库管理系统(RDBMS)来...
  • MySQL必须有主键吗?

    千次阅读 2020-11-04 19:06:27
    因为聚集索引决定了表中数据的物理存储顺序,那么一个表则有且只有一个聚集索引。一个聚集索引可以包含多个列。好比一个电话本是基于名字,姓氏同时排序。 I nnodb选择一个聚集索引的过程 对于Innodb,主键

    前言:

    一般情况下,我们所使用的储存引擎是innodb,那今天我就基于存储引擎是innodb的情况来讨论下表是否必须有主键

    聚簇索引

    提到innodb就先介绍下聚簇索引的概念,聚集索引定义了表中数据的物理存储顺序。如何理解聚集索引呢,好比一个电话本,比如一个电话本是按照姓氏排序,并且电话号码紧跟着后面。因为聚集索引决定了表中数据的物理存储顺序,那么一个表则有且只有一个聚集索引。一个聚集索引可以包含多个列。好比一个电话本是基于名字,姓氏同时排序。

    I

    nnodb选择一个聚集索引的过程

    对于Innodb,主键毫无疑问是一个聚集索引。但是当一个表没有主键,或者没有一个索引,Innodb会如何处理呢。请看如下规则

    如果一个主键被定义了,那么这个主键就是作为聚集索引

    如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引

    如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。

    总结:

    在MySQL中,InnoDB存储引擎总是在没有显式指定的情况下创建主键,从而生成一个额外的列,您无法访问它。所以最好的情况下还是为innodb为存储引擎的数据表指定主键比较好

    展开全文
  • 主键

    2017-12-19 18:44:59
    在数据库设计时,主要就是对实体和关系的设计,实体表现出来就是表,关系表现出来就是外键。...其实更准确的说法,每一行数据的唯一标识是候选键(Candidate Key),一个表可以有很多个候选键,主键

    转自:https://www.cnblogs.com/studyzy/p/3309350.html


    在数据库设计时,主要就是对实体和关系的设计,实体表现出来就是表,关系表现出来就是外键。而对于一个表,由两部分组成:主键和属性。主键的简单定义就是表中为每一行数据的唯一标识。其实更准确的说法,每一行数据的唯一标识是候选键(Candidate Key),一个表中可以有很多个候选键,主键是候选键中的一个,主要用于更方便的检索和管理数据。一个表中可以有多个候选键,但是只有一个主键。由于主键常常用于检索数据,也用于表之间的关联,所以主键的设计的好坏将会严重影响数据操作的性能。下面来介绍下主键设计的几个考虑因素。

    主键的数据类型

    最常见的主键数据类型是数字类型、固定长度的字符类型和GUID类型。通常情况下,RDBMS会在主键上建立聚集索引(SQL Server默认都这么做),由于我们使用B-Tree的数据结构来存储索引数据,所以一般对主键有以下两个要求:

    • 越短越好——越短在一个Page中存储的节点越多,检索速度就越快。
    • 顺序增长——如果每一条插入的数据的主键都比前面的主键大,那么B-Tree上的节点也是顺序增长的,不会造成频繁的B-Tree分割。

    越短越好是为了查询的速度快,顺序增长是为了插入速度快。

    有了这两个要求,我们再来分析下各个数据类型:

    • 数字类型:根据数据量决定是用Int16还是Int32或者Int64,能用Int32的就不需要使用Int64。
    • 字符类型:基本不满足前面提到的2点要求,字符类型一般不会很短,而且也很可能不是顺序增长的,所以不是特别推荐的主键类型。当然如果确实业务需求使用字符类型,那么也尽量使用char(XX)而不要使用varchar(XX),因为在RDBMS中,对于定长字符串和变成字符串的数据结构和处理是不一样的,varchar的性能更差。
    • GUID类型:这个类型并不是所有数据库都有对应的数据类型,SQL Server有uniqueidentifier,MySQL没有。GUID类型在SQL Server中是16个字节,不算短,比4个字节的Int32长多了。在插入新数据时,GUID一般都是使用NewId()这样的生成随机GUID的方式生成的,所以也不是顺序增长的,在插入速度上不会很快。

    通过上面的比较,我们知道使用数字类型是更好的方式,那么我们为什么还会有人使用GUID和字符串来当主键呢?那是因为:

    相对于数字类型,字符类型更易读易记,在检索关联的数据时,更方便直接。

    GUID的优势是全球唯一,也就是说同样的系统,如果部署了多套环境,那么里面的数据的主键仍然是唯一的,这样有助于数据的集成。典型的例子就是一个系统在全国每个省份都部署一套,每个省份的数据各种录入,互不干扰,然后再把每个省的数据集成起来为总部做分析。

    数据库主键与业务主键

    前面说到一个表可能有很多个唯一标识的候选键,那么这么多候选键中,哪个应该拿来做主键呢?一种方案是再新建一个独立的字段作为主键,该字段并没有业务含义,只是一个自增列或者流水号,用于唯一标识每一行数据,这是数据库主键。另外一种方案是选择其中较短较常用的属性作为主键,这是业务主键。个人建议是不要使用任何有业务含义的字段作主键,而是使用一个自增的(或者系统生成的)没有实际业务意义的字段作为主键。为什么呢?主要是出于以下考虑:

    具有业务意义的字段很可能是用户从系统录入的,不要信任用户的任何输入,只要是用户自己录入的,那么就很有可能录错了,如果发现录入错误,这个时候再对主键进行修改,将会涉及到大量关联的外键表的修改,是很麻烦的一件事情。比如在做人员表的时候,就不要使用员工号或者身份证号做主键。

    具有业务意义的字段虽然在当前阶段是唯一的,是不变的,但是并不能保证随着公司政策变动、业务调整等原因,导致该业务字段需要修改,以满足新的业务要求,这个时候要修改主键也是很麻烦的事情。比如部门表,我们以部门Code作为主键,但是后来部门变动,Code修改,则系统部门表的主键也得更改。

    还有一个原因是业务主键在数据录入的时候不一定是明确知道的,有时我们会在不知道业务主键的情况下,就录入其他相关信息,这个时候,如果使用业务主键做数据库的主键,那么数据将无法录入。比如员工表把员工号作为主键,那么员工还没有入职,没有员工号的时候,HR需要先维护一些该预入职员工的信息是不可能的。

    联合主键

    联合主键就是以多个字段来唯一标识每一行数据。前面已经说到主键应该越短越好,而且是建议是一个没有意义的自增列,那么是不是就不会再需要联合主键呢?答案是否定的,我们仍然可能会使用到联合主键。联合主键主要使用在多对多的关系时,中间表就需要使用联合主键。在简单的多对多关系中,我们不需要为中间的关联建立实体,所以中间表可能就只需要两列,分别是两个实体表的主键。

    主键值的生成

    主键值的生成可以参考NHibernate的配置,概况下来主要有这么几种生成方式:

    • 自增,这是SQL Server常用的主键生成方式,完全由数据库管理主键的值。
    • Sequence对象,这是Oracle常用的主键生成方式,现在SQL Server已支持。主要是在数据库中有一个Sequence对象,通过该对象生成主键。
    • GUID,这是用于GUID类型的主键,可以使用newid()这种数据库提供的函数,或者使用程序生成Guid并赋值。
    • Hilo值,这是一种使用高低位算法生成的数字值的主键。该值由NHibernate程序内部生成。
    • 其他程序赋值,完全由程序根据自己的算法生成并赋值。

    更详细的主键生成,我们可以参见:http://www.cnblogs.com/chenkai/archive/2009/04/13/1434912.html

    主键与索引

    在概念和作用上,主键与索引是完全两个不同的东西,但是由于我们大部分情况下都是使用主键检索数据,所以大部分数据库的默认实现,在建立主键时会自动建立对应的索引。

    以SQL Server为例,默认情况下,建立主键的列,就会建立聚集索引,但是实际上,我们可以在建立主键时不使用聚集索引。另外还有一个唯一约束(索引)的概念,该索引中的数据必须是唯一不能重复的,感觉和主键的意义一样,但是还是有一点点区别。

    主键是只能由一个,而唯一约束(索引)在一个表中可以有多个。

    主键不能为空,而唯一约束(索引)是可以为空的。


    展开全文
  • SQL - 主键

    千次阅读 2015-07-30 10:11:07
    一个表只能存在一个主键可以由一个或多个列组成。包含多个列的主键称为复合主键。 如果一个表存在主键,那么主键列上的值不能重复。 创建主键 以下是将ID属性定义为CUSTOMERS表的主键的语法。 CREATE TABLE ...
  • 一、什么是主键 指一个列或者是多个列的组合,它的值能唯一地...1、一个表中只能有一个主键; 2、主键可以是一个字段,也可以多个字段组成主键; 3、设置为主键的字段不能重复; 4、设置为主键的字段不能为空; 三
  • MySQL主键

    2020-03-13 16:44:52
    主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或列称为表的主键,通过它可以强制表的实体完整性。... 每个表只能定义一个...
  • 1 题目 有争议的答案是D和C, C: 一张只能有一个主键一个主键可以包含多个字段。 D: 主键约束可以定义级或列级,主键不能
  • 背景: 公司现有数据库中有很主键,在SQLAlchemy中,正常是通过定义类去操作的增删改查; class User(Base): __tablename__ = 'user_...正常情况下如果指定主键是name那就可以给name字段添加一个prim
  • Mysql 主键

    2019-05-20 09:59:00
    MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识中的每一行。 这样的一列或多列称为的主键,通过它可以强制的实体完整性。 【2】选取设置主键约束的字段 主键约束即在定义个主键来唯一...
  • 候选键是一个表中,某些属性的组合可以决定其他属性的值,而且这些属性的真子集起不到这样的作用,这样的属性集合就构成了候选键,也可叫为候选碼或者碼 候选碼是可能有多个的,比如在学生表中,身份证和学号都可以...
  • 数据库主键是用来标记数据记录唯一性的列,不能为空,不能重复。 主键具有的特点:唯一性、非空性。 数据库联合主键可以多个列作为...一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接...
  • 主键:能够唯一表示一个记录的一个字段或者多个字段的组合 特点: 1.含有主键叫做主键表 2.主键通常都是整数,不建议使用字符串当主键(如果主键是用于集群式服务,才可以考虑用字符串当主键) 3.主键的值通常都...
  • MySQL||主键(primary key)及主键约束

    千次阅读 2019-07-24 22:43:02
    主键 主键(PRIMARY KEY)”...主键约束即在表中定义一个主键来唯一确定表中每行数据的标识符。主键可以是表中的某列或者列的组合,其中由列组合的主键称为复合主键。主键应该遵守下面的规则: 每个表只能...
  • 里面有一个2个表 A,B A对B是一对的关系 A: ---------- ID name B: --------- ID name A_ID B里面由 ID和A_ID共同决定一条唯一的记录,然后我把B里面的ID和A_ID 新建了一个B_PK.class,作为B...
  • 笔记_SQLite主键

    2019-07-16 21:25:00
    一个表只能有一个主键。 主键的值不可以是一个NULL值。 创建主键 主键通常在创建表时一同创建。在执行CREATE TABLE语句时可以直接定义主键。 CREATE TABLE table_name ( column1 datatype [ NULL | NOT ...
  • 主键可为聚集索引也可为非聚集索引。 两者的比较 下面是一个简单的比较表 ...一个表多少个 ...一个表最多一个主键 ...一个主键可以多个字段来定义 一个索引可以多个字段来定义 是否允许 ...
  • 表定义信息里包含了每一个字段最大长度、是否可以为空等属性,因此可以将这些信息与数据校验方法结合生成用于数据校验的go代码。以示例文件中输出的一行数据校验代码为例:util.CheckParam(structNeededToCheck.G
  • 一对一:既可以A的主键充当B的外键,也可以B的主键充当A的外键(一个人只有一把钥匙,一把钥匙只给一个人) 一对:把A的主键充当B的外键(一个父亲有几个孩子,一个孩子只有一个父亲) :...
  • mysql主键和外键约束

    2020-03-09 17:06:28
    个表只能定义个主键。 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。 一个列名只能在复合主键列表中出现一次。 复合主键不能...
  • 主键、聚集索引、非聚集索引区别

    千次阅读 2020-07-14 10:59:36
    个主键可以多个字段来定义 一个索引可以多个字段来定义 是否允许 null 数据行出现 如果要创建的数据列中数据存在null,无法建立主键。 创建时指定的 PRIMARY KEY 约束列隐式转换为 NOT...
  •  两者的比较 下面是一个简单的比较表 ...一个表多少个 ...一个表最多一个主键 ...一个主键可以多个字段来定义 一个索引可以多个字段来定义       是否允许 null 数据行出现 如果要创
  • MySQL 主键约束

    千次阅读 2019-01-30 17:00:19
    主键,又称住码,是中一列或列的组合。 主键要求主键列的数据唯一,并且不允许为空,主键能够唯一地表识中的一条...单字段主键一个字断组成,字断名 数据类型 primary key [默认值] 设置ID为主键 create ...
  • 数据库-主键

    2020-07-27 17:01:15
    主键(PRIMARY KEY)又称主码,用于唯一标识中的每一条记录,可以定义表中的一列或列为主键,主键列上不能有相同的值,也不能为空.假如,定义author,该给每一个作者分配一个作者编号,该编号作为数据库的主键,如果...
  • 主键、外键、索引

    2018-11-15 09:35:12
    定义主键:唯一标识一条记录,不能有重复的,不允许为空 外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值 ...外键:一个表可以多个外键 索引:一个表可以多个唯一索引 添加: 主键:...
  • SQL中的主键

    千次阅读 2016-08-03 14:36:40
    当创建或者更改表时可以通过定义PRIMARY KEY约束来创建主键,一个表只能有一个主键约束,而且主键约束中的列不能是空值,由于主键约束确保唯一数据,所一经常来定义标识列。       二、主键的作用 ...
  • 列,通常叫做字段,每一个字段都包含:字段名称、字段数据类型、字段约束、字段长度; (2)、行(记录) 行,通常叫做中的记录。中的数据是按行(记录),表里可以有0条或者条记录; 二、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 849
精华内容 339
关键字:

一个表可以定义多个主键