主键

注意事项

在表数据迁移到HUBBLE过程中,如果目标表有主键,一定要在建表过程中维护主键后进行迁移,防止整条语句当成主键。 建表时候必须在create table语句中指定主键,如果建表不指定主键的话,hubble数据库在建表时候自带rowid默认作为主键,之后无法通过alter语句建立主键。

定义

表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。

目的

主键的一个目的就是确定数据的唯一性,它跟唯一约束的区别就是,唯一约束可以有一个NULL值,但是主键不能有NULL值,再说联合主键。

示例

单一主键:单个字段作为主键。

示例1:给一个字段建立主键,客户号cust_no唯一

> create table  cust_info(
    cust_no   string primary key,
    cust_name varchar(30) not null,
    cust_card_no  varchar(18),  
    cust_phoneno  DECIMAL(15)
 );

复合主键:2个及其以上字段保证数据唯一。

示例2:多个字段建立复合主键,通过身份证号和姓名联合保证数据唯一,这是由于实际数据中姓名可以重复,但姓名与身份证的组合不会重复,能确定唯一值。

> create table  cust_info_bak(
    cust_name varchar(30) not null,
    cust_card_no  varchar(18),  
    cust_phoneno  DECIMAL(15),
    primary key(cust_card_no,cust_name)   
);

联合主键:用2个字段(或者多个字段)来确定一条记录;这2个字段都不是唯一的,2个字段可以分别重复。 一个简单的例子

> create table  paper(
     A   varchar(50)   not   null   primary      key,  
     B   char(10)      not   null   constraint   unique_author_id   unique     
);

字段A跟字段B组成联合主键

字段A跟字段B的数据可以完全相同,联合就在于A跟B形成的联合主键是唯一的。

下例字段A数据是a,字段数据也是a,联合主键其实是aa,这个aa是唯一值,绝对不充许再出现aa这个唯一值。(这就是多对多关系)

字段A数据 字段B数据

a      a

b      b

A与B的联合主键值最多也就是

aa

ab

ba

bb