Php 将列更改为自动增量

Php 将列更改为自动增量,php,jquery,sql,mysql,Php,Jquery,Sql,Mysql,今天早些时候我问了这个问题,但不确定我有多清楚 我有一个MySQL列,其中填充了有序数字1-56。这些数字是由我的PHP脚本生成的,而不是通过自动增量生成的 我想做的是在PHP脚本设置正确的数字后,使此列自动递增。PHP脚本与jQuery接口协同工作,该接口允许我使用jQuery的UI插件对项目列表进行重新排序 一旦我决定了条目的顺序,我希望将列设置为自动递增,这样,如果我要插入一个新条目,它将识别列中已经存在的最高编号,并将自己的id编号设置为比已经存在的编号高一个 有人对如何处理这种情况有什

今天早些时候我问了这个问题,但不确定我有多清楚

我有一个MySQL列,其中填充了有序数字1-56。这些数字是由我的PHP脚本生成的,而不是通过自动增量生成的

我想做的是在PHP脚本设置正确的数字后,使此列自动递增。PHP脚本与jQuery接口协同工作,该接口允许我使用jQuery的UI插件对项目列表进行重新排序

一旦我决定了条目的顺序,我希望将列设置为自动递增,这样,如果我要插入一个新条目,它将识别列中已经存在的最高编号,并将自己的id编号设置为比已经存在的编号高一个


有人对如何处理这种情况有什么建议吗?

您可以通过使用mysql控制台界面或(最简单的)使用phpmyadmin通过php发出的查询来改变这一点

ALTER TABLE table_name CHANGE old_column_name new_column_name column_definition;
ALTER TABLE table_name AUTO_INCREMENT = highest_current_index + 1
列定义:

old_column_definition AUTO_INCREMENT 
更多信息:

编辑
始终使用
mysql\u insert\u id
或抽象层的适当函数来获取最后创建的id,因为
last\u insert\u id
可能会导致错误的结果。

您可以使用mysql控制台界面或(最简单的)使用phpmyadmin通过php发出查询来更改这一点

ALTER TABLE table_name CHANGE old_column_name new_column_name column_definition;
ALTER TABLE table_name AUTO_INCREMENT = highest_current_index + 1
列定义:

old_column_definition AUTO_INCREMENT 
更多信息:

编辑
始终使用
mysql\u insert\u id
或抽象层的适当函数来获取最后创建的id,因为
last\u insert\u id
可能会导致错误的结果。

您可以将其切换到mysql的自动增量实现,但需要3次查询:

a)
ALTER TABLE
将自动增量添加到相关字段中

b)
选择MAX(id)+1
以了解需要将id设置为什么

c)
ALTER TABLE AUTO_INCREMENT=来自(b)的结果


MySQL认为更改
自动增量值是一个表级操作,因此您不能在(a)中执行,也不允许在(c)中执行
MAX(id)
,因此需要3次查询。

您可以将其切换到MySQL的自动增量实现,但需要3次查询:

a)
ALTER TABLE
将自动增量添加到相关字段中

b)
选择MAX(id)+1
以了解需要将id设置为什么

c)
ALTER TABLE AUTO_INCREMENT=来自(b)的结果


MySQL将更改
AUTO_INCREMENT
值视为表级操作,因此您不能在(a)中执行,也不允许在(c)中执行
MAX(id)
,因此需要进行3次查询。

在MySQL中,您可以为AUTO_INCREMENT字段设置自定义值。MySQL随后将为新行使用最高的自动增量列值,本质上是
MAX(id)+1
。这意味着您可以有效地保留一系列ID供自定义使用。例如:

CREATE TABLE mytable (
 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 col1 VARCHAR(256)
); 
ALTER TABLE mytable AUTO_INCREMENT = 5001;
在此架构中,所有小于5001的ID都保留供系统使用。因此,您的PHP脚本可以自动生成值:

for ($i=1; $i<=56; $i++)
 mysql_query("INSERT INTO mytable SET id = $i, col1= 'whatevers'");

保留这样的范围是关键——以防将来需要超过56个特殊/系统行

在MySQL中,您可以为自动增量字段设置自定义值。MySQL随后将为新行使用最高的自动增量列值,本质上是
MAX(id)+1
。这意味着您可以有效地保留一系列ID供自定义使用。例如:

CREATE TABLE mytable (
 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 col1 VARCHAR(256)
); 
ALTER TABLE mytable AUTO_INCREMENT = 5001;
ALTER TABLE <table name> <column name> NOT NULL AUTO_INCREMENT
在此架构中,所有小于5001的ID都保留供系统使用。因此,您的PHP脚本可以自动生成值:

for ($i=1; $i<=56; $i++)
 mysql_query("INSERT INTO mytable SET id = $i, col1= 'whatevers'");
保留这样的范围是关键——以防将来需要超过56个特殊/系统行

ALTER TABLE NOT NULL自动增量
ALTER TABLE <table name> <column name> NOT NULL AUTO_INCREMENT
更多信息:

更改表格非空自动增量
更多信息:


我建议创建表时,自动增量已经就绪。您可以为auto_inc列指定一个值,mysql将使用它,但下一次为auto_inc列指定NULL或0值的插入操作将神奇地获得分配给它的$highest+1

例如:

mysql>创建表foobar(i int auto_increment主键)

mysql>插入foobar值(10)、(25)

mysql>插入foobar值(null)

mysql>从foobar中选择*


#返回10,25,26

我建议创建表时,自动增量已经就绪。您可以为auto_inc列指定一个值,mysql将使用它,但下一次为auto_inc列指定NULL或0值的插入操作将神奇地获得分配给它的$highest+1

例如:

mysql>创建表foobar(i int auto_increment主键)

mysql>插入foobar值(10)、(25)

mysql>插入foobar值(null)

mysql>从foobar中选择*


#返回10,25,26

否,停止。这不是自动增量的要点。如果您不想让它们按id排序,那么就不要让它们自动递增,只需在表的末尾添加一列进行排序,并享受它给您带来的额外灵活性。看起来你想把两组不同的信息放在一个专栏里,而这只会让你感到难堪,尽管这篇文章里所有善意的人都在告诉你如何去开枪打自己的脚

不,停下来。这不是自动增量的要点。如果您不想让它们按id排序,那么就不要让它们自动递增,只需在表的末尾添加一列进行排序,并享受它给您带来的额外灵活性。看起来你想把两组不同的信息放在一个专栏里,而这只会让你很难受,尽管这篇文章里所有善意的人都在告诉你怎么做