精华内容
下载资源
问答
  • 一张可以多少个主键

    万次阅读 2018-10-24 09:47:39
    今天学习sql语句的时候看到一张建立的时候个主键,印象中一张表中主键只能有一个, 一开始理解有一个可能是外键,但是外键也不长这样。 经过查阅资料,发现其实是联合外键。 总的来说,一张中的外键只能...

    今天学习sql语句的时候看到一张表建立的时候有两个主键,印象中一张表中主键只能有一个,

    一开始理解有一个可能是外键,但是外键也不长这样。

    经过查阅资料,发现其实是联合外键。

    总的来说,一张表中的外键只能有一个,多个的时候称为联合外键(好吧这样比较拗口)

    1、数据库的每张表只能有一个主键,不可能有多个主键。

    2、所谓的一张表多个主键,我们称之为联合主键。

         注:联合主键:就是用多个字段一起作为一张表的主键。

    3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。

    那么问题来了,如何建立联合外键呢

    展开全文
  • 1、数据库的每张表只能有一个主键,不可能个主键。 2、所谓的一张个主键,我们称之为联合主键。  注:联合主键:就是用多个字段一起作为一张的主键。 3、主键的主键的作用是保证数据的唯一性和完整性...

    今天在工作,做老项目维护的时候无意中发现一张表居然有三个主键。吓死宝宝了,然后尝试着建表建主键,但是都不能成功。疑问

    难道是我写的有问题,最后通过查资料总终于解决了。

    1、数据库的每张表只能有一个主键,不可能有多个主键。

    2、所谓的一张表多个主键,我们称之为联合主键。

         注:联合主键:就是用多个字段一起作为一张表的主键。

    3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。

     

    下面聊聊怎么创建联合主键:

     

    1、GUI中同时选中多列,点击设置为主键。

    2、sql语句将多列设置为主键:

     

     一种是在建表时就写出,语句如下:

    Create Table 表名 (字段名1 Int Not Null,
                       字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
                        字段名3…………
                        字段名N………… )

    另一种是在建表后更改,语句如下:

    ALTER TABLE 表名 WITH NOCHECK ADD 
    CONSTRAINT [PK_表名] PRIMARY KEY  NONCLUSTERED 
    (
      [字段名1],
      [字段名2]
    )
    
     
    通过以上两种方式就解决了联合主键的问题。

    --------------------- 本文来自 牟鹏 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/for12/article/details/49300843?utm_source=copy

    展开全文
  • 主键

    2014-12-18 09:18:23
    每个表只能有个主键。 若要设置的主键,请在设计视图中打开。选择要使用的字段,然后在功能区上单击“主键”。 什么是好的主键? 一个好的候选主键具有以下几个特征: 1、唯一标识每一行 2、从不为空或为 ...
    添加或更改表的主键:主键是具有整个表中唯一值的一个字段或一组字段。键值可用于引用整条记录,因为每条记录都具有不同的键值。每个表只能有一个主键。

    若要设置表的主键,请在设计视图中打开表。选择要使用的字段,然后在功能区上单击“主键”。

    什么是好的主键?
    一个好的候选主键具有以下几个特征:

    1、唯一标识每一行

    2、从不为空或为 Null,即它始终包含一个值 

    3、所包含的值几乎不(理想情况下永不)改变


    如果无法识别好的键,则创建“自动编号”字段用作键。“自动编号”字段在首次保存每条记录时,会自动为自己生成一个值。因此,“自动编号”字段满足一个好的主键的所有三个特征。

    较差主键的示例:
    缺少一个或多个好的候选主键特征的任何字段对于主键都是糟糕的选择。下面是会让“联系人”表的主键成为较差主键的几个字段示例,以及成为糟糕选择的原因。

    复合键:将多个字段组合在一起作为主键使用

    在某些情况下,您想要使用表中的两个或多个字段作为主键。


    MySQL / SQL Server / Oracle / MS Access:

    ALTER TABLE Persons
    ADD PRIMARY KEY (Id_P)
    如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:

    ALTER TABLE Persons
    ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
    注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

    展开全文
  • Computer System Add comments 2010年5月6日更新: 只有真正懂得了这个道理的人, 才算真正理解了...在数据库设计中, 每一个表都应该有一个字段作为主键. 这个字段一般是自增整数字段, 或者某些数据库支持的自动
     
    
    

    2010年5月6日更新: 只有真正懂得了这个道理的人, 才算真正理解了关系数据库. 如何才算懂得了这个道理? – 即使你有一百个理由要用关联主键, 你也能找到这唯一的一个理由放弃, 改而使用单一字段做主键.

    ——

    在数据库设计中, 每一个表都应该有一个字段作为主键. 这个字段一般是自增整数字段, 或者某些数据库支持的自动产生不重复字符串的字段, 也可以是程序自己产生的唯一标识. 总之, 每一个数据库表都应该有一个单一的字段作为主键.

    使用单一的字段作为表的主键, 有许多优点. 最重要的一条是可以通过一个原子属性(如整数, 字符串)来标识一行记录. 一旦可以方便地标识一行记录, 那么数据的查询, 更新, 删除也都非常简单.

    如果一个表没有主键, 那么必须通过一行记录本身才能标识一行记录. 也就是, 你必须知道一行记录的每一个字段的值, 才能在 SQL 语句中操作这条记录.

    数据库表支持联合主键, 也就是使用表的至少2个字段作为主键. 使用联合主键的缺点和不使用主键的缺点有很大的相似性, 因为当联合主键所使用的字段越多, 联合主键的缺点就越来越趋近于不使用主键, 直到表的所有字段作为主键时, 和不使用主键几乎是完全相同的 – 除了前者不能存在重复行,

    作为主键的字段一般使用自增整数字段, 因为绝大多数关系型数据库管理系统都支持这种字段类型, 而且速度快, 占用空间少. 一个害怕使用自增整数字段作为主键的理由是自增整数会回绕从而导致重复. 但这种担心是没有必要的. 对于最普通的32位无符号整数, 其最大值是在 Mysql 中是 4294967295(43亿) , 如果数据库表以每秒1条的速度保存记录, 那么一天也只能 86400 条(约10万条)记录, 需要 49710 天(约136年)之后才能发生重复. 幸运的是, 绝大多数系统产生数据的速度比这个假设慢得多了. 如果系统产生数据的速度确实足够快速, 则可以使用 64 位的长整型整数.

    如果确实需要联合主键, 则可以使用 UNIQUE 索引来代替. 任何不得不使用联合主键的需求, 都是基于对关系数据库的错误理解而产生的. 并不是要用"单一主键"来覆盖"复合主键"的需求, 而是"在表设计中, 单一主键是必须的, 用联合唯一索引来覆盖’复合主键’的需求".

    一个例子:

    表1: 使用联合主键(只是作为反面例子出现, 它应该被联合唯一索引代替)

    table_a{
        field_a: PK;
        field_b: PK;
        field_…: PK
        field_c;
    }

    表2: 不使用联合主键

    table_b{
        id: PK;
        field_a: UNIQUE;
        field_b: UNIQUE;
        field_…: UNIQUE
        field_c;
    }

    * 联合主键导致数据操作复杂化

    这两种表定义都能反映相同的业务模型. 使用联合主键对保存数据的程序代码影响不大, 情况1通过联合主键保证不会产生重复数据, 但情况2通过联合唯一索引保存不会产生重复数据. 但对查找操作有不良影响, 同时影响到使用了查找功能的更新和删除操作. 考虑查找特定几条记录的情况:

    表1: 查找 (field_a, filed_b, …) = [(1, 2, ...), (1, 3, ...), (2, 4, ...), ...] 这几条记录.
    表2: 查找 id = [1, 2, 3, ...] 这几条记录.

    显然, 表2的描述更简洁, 从而使程序代码和 SQL 语句更简洁. 如果把所有的字段都作为主键, 那么表1就不存在查找特定几条记录的功能了, "因为已经知道, 所以不必再找". 这是一种最极端的联合主键的副作用, 联合主键的字段越多, 就越趋向于这种极端.

    * 联合主键不利于表示"关系"

    联合主键不利于表示"关系", 是因为它会造成不必要的冗余. 考虑有另外两个表, 需要分别关联 table_a 和 table_b:

    table_ac{
        id;
        table_a_field_a;
        table_b_field_b;
        …
    }

    table_bc{
        id;
        table_b_id;
    }

    显然, 不使用联合主键可以减少冗余. 如果使用所有字段作为联合主键, 将变成把 table_a 的数据保存两份, 一份在 table_a, 另一份包含在 table_ac. 个人认为, 联合主键是是关系数据库理论一种概念, 在实际中如果使用是"反关系数据库模型"的, 实际使用应该用联合唯一索引替代.

    展开全文
  • create table a( id varchar(20) not null primary key, name varchar(30) ); create table b( id varchar(20) not null primary key ); ...id varchar(20) not null primary key ...alter table b add constraint a_id ...
  • sql 关于一表个主键唯一性的约束

    万次阅读 2019-02-27 17:28:15
    1.对于一般的,我们只需设一个主键,防止重复,但是我们如果设置多个主键,是每个主键唯一性吗?还是多个主键组合起来具有唯一性 2.答案肯定是多个主键合起来具有唯一性,话说太多,现在上例子 3.例如,我建...
  • 在绿色工具里,可以对多个字段打上主键的标识“锁”,但这并不表示拥有了多个主键,而是说这几个字段共同构成了主键。当然,他们之间也是次序的。查看次序可以使用show index from table。会看到Key_Name中多...
  • 一个表只能有个主键,但可以多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引...
  • 用面向对象的思想来思考的话,联合主键里的复合主键(字段),可以把它看成一个整体,然后采用一个主键类来描述这个复合主键的字段。 这里面主要是一些类的主键是联合主键, 主键是两个属性构成的 ...
  • 外键:是关联另外一个表主键一个键,保证两个之间的关联性索引:加快搜索效率 为什么主键只有一个?因为主键起始从实现角度来看是一个 唯一 非空 聚类索引, 聚类索引在一个表中只有一个,所以主键只有一个。...
  • 天做管理工具,有一个操作很令人头痛. 当插入一条记录时,我们很多时候都想马当前插入的主键返回出来.作为另一个操作的条件.如果主键是自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事.可能对于...
  • PostgreSQL 查看结构、主键(多

    千次阅读 2018-10-11 15:17:16
    在网上查阅的资料都只能查出一张一个主键(我的数据库有些是多个主键维护的),最后还是把不同的解决方法组合起来,解决了既能查看结构,也能查看多个主键。下面是SQL语句: SELECT  A.ordinal_position, ...
  • 什么是外键,什么是主键表

    千次阅读 2017-03-17 17:04:42
    1属性:typeid(主键...1是主键表1的主键字段在2中做外键、而1自己却没有外键2是外键表有一个依赖1typeid的字段、作为外键、取值必须是其依赖主键表表1中主键字段的值 ---------------------------
  • MySQL为什么需要一个主键(自增长)

    千次阅读 2016-06-07 08:41:11
    MySQL为什么需要一个主键(自增长)
  • 数据库的几个概念:主键,外键,索引,唯一索引

    万次阅读 多人点赞 2010-05-04 16:23:00
    主键: 主键是数据的唯一索引,比如学生表里学号和姓名,姓名可能重名的,但学号确是唯一的,你要从学生中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int...
  • 发现mysql一个表可以有几个唯一索引

    千次阅读 2018-04-26 09:07:44
    mysql一个表可以多个唯一索引。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,...
  • MySql-聚集索引-为什么必须有主键

    千次阅读 2017-11-02 17:17:39
    天跟搞C++游戏服务器一同事联动实现一个业务,看到他创建默认没有主键,于是我建议他添加,同事铮铮词说,业务根本用不着,多一个字段多浪费,我瞬间无语,于是跟他解说为什么必须添加?针对MySQL5.6版本中...
  • 数据库的主键表和外键

    千次阅读 2013-03-24 11:06:33
    想写这个是因为自己刚好在尝试建一个数据库,而数据库的各个之间的关系不是很清楚,没有形成一个整体的关系,所以就尝试着将数据库形成一个整理的关系,我 敢说很多跟我一样的同学原来做课程设计,肯定就是随便...
  • 1、数据库的每张表只能有一个主键,不可能个主键。 2、所谓的一张个主键,我们称之为联合主键。  注:联合主键:就是用多个字段一起作为一张的主键。 3、主键的主键的作用是保证数据的...
  • 最近学习一点数据库的基本知识,被一个问题困惑了许久:主键是唯一的索引,那么为何一个表可以创建多个主键呢? 其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在中创建了一个ID字段,自动增长,并设为...
  • sql server 主键

    千次阅读 2011-07-06 11:05:20
    我们在建立数据库的时候,需要为每张指定一个主键,所谓主键就是能够唯一标识中某一行的属性或属性组,一个表只能有个主键,但可以多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新...
  • 现在一个表的联合主键16个,需要添加一个联合主键,但是sql server最多只能16个主键,怎么能实现17个键的需求?
  • mysql 数据主键(primary key)的操作

    万次阅读 2015-08-17 11:37:52
    4、每个都应该有一个主键,并且每个表只能有一个主键。 在创建主键时,我们可以在创建的同时创建主键,当然有时出于疏忽,建好后才发现没有创建主键,这时可以补上。 下面是在MYSQL控制台
  • 键值类型 键值类型 英文 普通索引 ...主键 ...一个表中可以多个INDEX字段 字段的值允许重复,切可以赋NULL值 经常把做查询条件的字段设置为INDEX字段 INDEX字段的KEY标志是MUL primary key...
  • MySQL中索引、主键和唯一性的区别

    千次阅读 2017-07-26 11:23:33
    PRIMARY 主键: 就是 唯一 且 不能为空。 INDEX 索引: 普通的 UNIQUE 唯一索引: 不允许重复。...在一张只能定义一个主键索引,使用关键字 PRIMARY KEY 来创建。 2.索引(INDEX ):
  • 问题描述:在使用hibernate反向工具的时候,生成的...通常情况下,使用hibernate反向工具的时候,系统并不会提示你几个表主键,而是直接将无主键的对应对应生成两个class文件(分别是xxx.class和xxxid.class 

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,577
精华内容 41,430
关键字:

一个表只能有几个主键