制作两列主键

时间:2014-05-04 05:53:12

标签: mysql

你好,我有一个表,其中有一个主键,名称为ImageID,我想创建另一列

也是主键,即PropertyID表示复合键

这里是代码,但它显示了我的错误“#1064 - 您的SQL语法出错了;请查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法'( PropertyID INT,ImageID INT主键(PropertyID,ImageID))'在行“

ImageID也是主键,但是带有varchar(15)规范。

Alter TABLE properties (
  PropertyID INT,
  ImageID INT,
  primary key (PropertyID, ImageID)
);

3 个答案:

答案 0 :(得分:1)

每个表只能有1个主键。您只能拥有一个主键,但主键中可以有多个列。

取自W3Schools:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)

这里唯一的主键是pk_PersonID,但是已经声明pk_PersonID由P_Id和LastName组成。

您可能正在寻找独特的索引。这意味着需要唯一的值并像索引一样运行,因为它可以加快查询速度。

答案 1 :(得分:0)

试试这个:

首先删除现有的主键

ALTER TABLE properties
DROP PRIMARY KEY;

然后添加复合键

ALTER TABLE properties
ADD PRIMARY KEY(imageID, propertyID);

答案 2 :(得分:0)

据我了解,您已经有一个包含一个键的表,如下所示:

CREATE TABLE `common`.`properties` (
  `PropertyID` VARCHAR(15) NOT NULL,
  `otherColumn` VARCHAR(45) NULL,
  PRIMARY KEY (`PropertyID`));

现在您要添加另一个PK列并将现有PK列的类型从char更改为INT。所以你需要这样做:

ALTER TABLE `common`.`properties` 
CHANGE COLUMN `PropertyID` `PropertyID` INT NOT NULL ,
ADD COLUMN `ImageID` INT NOT NULL AFTER `otherColumn`,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`PropertyID`, `ImageID`);

P.S。 common是我的模式名称,您可以使用自己的模式名称,如果您的模式是默认模式,甚至可以跳过它。