你好,我有一个表,其中有一个主键,名称为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)
);
答案 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
是我的模式名称,您可以使用自己的模式名称,如果您的模式是默认模式,甚至可以跳过它。