我可以添加许多条件的主键

时间:2016-12-22 01:25:28

标签: mysql

我是第一个表名" mustahik_perorangan"和第二个名字" data_mustahik"

mustahik perorangan在另一个表中有4个主键和外键 喜欢这种情况

PRIMARY KEY (`mustahik_nik`,`ins_provinces_code`,`ins_cities_code`,`ins_institution_types_code`,`ins_institution_serial_no`),
 KEY `fk_reference_6` (`ins_provinces_code`,`ins_cities_code`,`ins_institution_types_code`,`ins_institution_serial_no`),
 CONSTRAINT `FK_ins_musper` FOREIGN KEY (`ins_provinces_code`, `ins_cities_code`, `ins_institution_types_code`, `ins_institution_serial_no`) REFERENCES `baznasgo_s_organization`.`institutions` (`provinces_code`, `cities_code`, `institution_types_code`, `institution_serial_no`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我希望将主要表添加到表mustahik_perorangan,所以mustahik perorangan有5个主键吗?

但我无法做到,因为它有条件......

ALTER TABLE mustahik_perorangan ADD idc INT UNSIGNED NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY (`idc`);

你知道吗?

2 个答案:

答案 0 :(得分:3)

一个表最多只能有一个一个主键约束。

主键约束可以包含多个列。我们将其称为复合键。

可以添加新列。

也可以在列上添加UNIQUE约束,并在列上指定AUTO_INCREMENT属性。

举个例子:

  ALTER TABLE mustahik_perorangan
    ADD idc INT UNSIGNED NOT NULL AUTO_INCREMENT
  , ADD UNIQUE KEY (`idc`)

现有的复合主键也可以是第六列。但我认为这不是你真正想要的。

作为如何将列添加到现有复合主键的演示,我将提供一个示例。

请注意,必须删除并重新添加主键。并且必须为AUTO_INCREMENT列添加UNIQUE键。

假设没有外键引用该表的主键。

  ALTER TABLE mustahik_perorangan
    DROP PRIMARY KEY
  , ADD idc INT UNSIGNED NOT NULL AUTO_INCREMENT
  , ADD UNIQUE KEY (`idc`)
  , ADD PRIMARY KEY
    (`mustahik_nik`
    ,`ins_provinces_code`
    ,`ins_cities_code`
    ,`ins_institution_types_code`
    ,`ins_institution_serial_no`
    ,`idc`
    )

如果有外键引用该表,则更改涉及更多。 (您是否希望在引用表中的外键中添加其他列?)

目前还不完全清楚你想要实现的目标。

答案 1 :(得分:0)

是的,您可以添加主键,但在您的情况下,您需要删除pk然后添加新的pk,否则引擎会在您尝试添加多个pk时解释,多个pk与复合pk不同,你可以添加复合pk,但不能添加多个pks

alter table xx drop primary key, add primary key(k1, k2, k3);