所以我试图用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))
在创建子类别时,它显示此查询错误:
子类别表中没有两个自动递增的列,只有'subCatId'是。应该做什么?
答案 0 :(得分:2)
仅适用于MyISAM存储引擎。仅一个数字 允许使用auto_increment值。每个auto_increment必须具有 关联列以定义其他auto_increment的唯一性 同一张表中的值。
注意: 不这样做,根本没有第二个自动递增的列。您是否真的需要第二个自动递增的值?做什么的?一种 您要解决的实际问题的描述会有所帮助 其他人可以帮助您更好。我想你只是在这里告诉你你是如何尝试的 解决问题,而不是解决实际问题。
答案 1 :(得分:1)
您似乎正在使用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
。
答案 2 :(得分:1)
这就是MySQL所说的
每个表只能有一个AUTO_INCREMENT列,它必须是 索引,并且不能具有DEFAULT值。 AUTO_INCREMENT列 仅当它只包含正值时,它才能正常工作。插入一个 负数被视为插入了很大的正数。 这样做是为了避免数字“换行”时出现精度问题。 从正面到负面,并确保您不会意外 得到一个包含0的AUTO_INCREMENT列。
因此,根据您的要求,您可以选择以下选项。
listen = /run/php/php7.2-fpm.sock
设为subCatId
Primary Key
答案 3 :(得分:1)
你有
Constraint pk_category
PRIMARY KEY(catId)
相反,只是说
PRIMARY KEY(catId)