在表数据迁移到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