我是第一个表名" 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`);
你知道吗?
答案 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);