Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 添加不是主键SQL的自动增量列_Mysql_Sql - Fatal编程技术网

Mysql 添加不是主键SQL的自动增量列

Mysql 添加不是主键SQL的自动增量列,mysql,sql,Mysql,Sql,我有一个记录磁盘上文件的表。我将文件路径设置为主键,因为这是唯一的数据块。我想添加一个自动递增但不是主键的新列。这能做到吗?我想要这个列,这样我就可以用id而不是一个长文件路径字符串来访问数据 ALTER TABLE `Media` ADD `ID` INT NOT NULL AUTO_INCREMENT #1075 - Incorrect table definition; there can be only one auto column and it must be defined a

我有一个记录磁盘上文件的表。我将文件路径设置为主键,因为这是唯一的数据块。我想添加一个自动递增但不是主键的新列。这能做到吗?我想要这个列,这样我就可以用id而不是一个长文件路径字符串来访问数据

ALTER TABLE `Media`  ADD `ID` INT NOT NULL AUTO_INCREMENT

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

更改表结构,使文件路径声明为
唯一
,而不是
。然后添加一个自动递增的主键

ALTER TABLE `Media` DROP PRIMARY KEY, 
  ADD UNIQUE KEY (`FilePath`), 
  ADD `ID` INT AUTO_INCREMENT FIRST, 
  ADD PRIMARY KEY (`ID`);

使用整数主键而不是字符串有很多优点。例如,辅助索引将使用主键访问该行,因此拥有完整的文件路径只会使索引比需要的大。

更改表结构,以便将文件路径声明为
唯一
,而不是
。然后添加一个自动递增的主键

ALTER TABLE `Media` DROP PRIMARY KEY, 
  ADD UNIQUE KEY (`FilePath`), 
  ADD `ID` INT AUTO_INCREMENT FIRST, 
  ADD PRIMARY KEY (`ID`);

使用整数主键而不是字符串有很多优点。例如,辅助索引将使用主键访问该行,因此拥有完整的文件路径只会使索引比需要的大。

您必须像这样插入行:

SET @ID = 0;

INSERT INTO Media  (ID,  SomeColumn) VALUES  (@ID := @ID + 1, 'Some Text');

必须按如下方式插入行:

SET @ID = 0;

INSERT INTO Media  (ID,  SomeColumn) VALUES  (@ID := @ID + 1, 'Some Text');

正如错误所述,同一个表上不能有两个自动增量列。您可以更改查询以提供增量id,尽管没有任何自动增量列。有一个主键,但没有我想要的ID列。您也可以删除主键,添加自动增量列,然后在文件路径上创建一个唯一索引。正如错误所述,同一个表上不能有两个自动增量列。您可以更改查询以提供增量id,尽管没有任何自动增量列。有一个主键,但没有我想要的ID列。您也可以删除主键,添加自动增量列,然后在文件路径上创建唯一索引。这正是我想要的。我同意上面的评论,即删除当前pk并使文件路径唯一。我现在正处于压力之下,所以我需要让它工作起来。把它做好比做两次要花更少的时间。这正是我想要的。我同意上面的评论,即删除当前pk并使文件路径唯一。我现在正处于压力之下,所以我只需要让它工作起来。把它做好比做两次要花更少的时间。被否决了。它没有解决这个问题,要求获得一个id并添加一个id是一个坏主意。在繁忙的应用程序中,可能会出现重复的应用程序。被否决。它没有解决这个问题,要求获得一个id并添加一个id是一个坏主意。在繁忙的应用程序中,可能会出现重复的应用程序。希望您不介意,我添加了语法来执行您描述的更改。@BillKarwin。非常感谢。希望您不介意,我添加了语法来完成您描述的更改。@BillKarwin。非常感谢你。