所以我尝试用phpmyadmin制作以下两个表。
create table category (
catId int identity(1,1),
catName varchar(20),
Constraint pk_category
PRIMARY KEY(catId))
create table subcategory (
subCatId INT IDENTITY(1,1),
catId INT,
subCatName VARCHAR(20),
CONSTRAINT pk_subcategory
PRIMARY KEY(catId,subCatId),
CONSTRAINT fk_subcat_cat
FOREIGN KEY(catID)
REFERENCES category(catId))
创建子类别时,显示以下查询错误:
1075-表格定义不正确;只能有一个auto列,并且必须将其定义为键
子类别表中没有两个自动递增的列,只有"subCatId"是。该怎么办?
它仅适用于MyISAM存储引擎只有一个数字允许使用auto_increment值。每个auto_increment必须具有关联列以定义来自其他auto_increment的唯一性值。
此参考链接可能会为您提供更多信息。
注意:不要这样做,根本没有第二个自动递增的列。你真的需要第二个自动递增的值吗?为何A.描述你试图解决的实际问题会有所帮助其他人会更好地帮助你。我想你只是在这里告诉了你是如何尝试的以解决问题,而不是实际问题是什么。
这是MySQL对的状态
每个表只能有一个AUTO_INCREMENT列,它必须索引,并且不能具有DEFAULT值。AUTO_INCREMENT列只有当它只包含正值时才能正常工作。插入负数被认为是插入一个非常大的正数。这样做是为了避免数字从从积极到消极,同时确保你不会意外获取一个包含0的AUTO_INCREMENT列。
因此,根据您的要求,您有以下选择。
- 将
subCatId
设为Primary Key
- 或者将列设为
Unique
您似乎在使用SQL Server语法,但在MySQL上运行。使用正确的语法,它应该可以工作:
CREATE TABLE category (
catId INT NOT NULL AUTO_INCREMENT,
catName VARCHAR(20),
PRIMARY KEY (catId)
)
CREATE TABLE subcategory (
subCatId INT NOT NULL AUTO_INCREMENT,
catId INT,
subCatName VARCHAR(20),
FOREIGN KEY (catId) REFERENCES category (catId),
PRIMARY KEY (subCatId)
);
SQL Server中的IDENTITY
与MySQL中的AUTO_INCREMENT
大致对应。
您有
Constraint pk_category
PRIMARY KEY(catId)
相反,只需说
PRIMARY KEY(catId)