将列更改为Auto_Increment

时间:2010-02-19 01:08:25

标签: php jquery sql mysql

我今天早些时候提出这个问题,但不确定我是多么清楚。

我有一个填充有序号码1-56的MySQL列。这些数字是由我的PHP脚本生成的,而不是由auto_increment生成的。

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

一旦我确定了我希望条目的顺序,我希望将列设置为自动增量,这样如果我要插入一个新条目,它将识别已存在的最高数字该列并将其自己的ID号设置为比已存在的ID高一个。

有没有人对如何处理这种情况有任何建议?

6 个答案:

答案 0 :(得分:2)

我建议使用auto_increment创建表格。你可以为auto_inc列指定一个值,mysql将使用它,并且仍然为auto_inc列指定NULL或0值的下一个插入将神奇地获得分配给它的最高+ 1。

示例:

mysql> create table foobar (i int auto_increment primary key);

mysql> insert into foobar values (10),(25);

mysql> insert into foobar values (null);

mysql> select * from foobar;

# returns 10,25,26

答案 1 :(得分:1)

不,停下来。这不是auto_increment的重点。如果您不打算通过id对它们进行排序,那么不要将它们设置为auto_increment,只需在表的末尾添加一列进行排序,并享受它为您提供的额外灵活性。看起来你正试图将两组不同的信息打包成一列,尽管这个线程中的所有善意的人都告诉你如何在脚下射击自己,但它真的只会咬你的屁股。

答案 2 :(得分:0)

您可以使用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

column_definiton:

old_column_definition AUTO_INCREMENT 

更多信息:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

http://dev.mysql.com/doc/refman/5.1/en/create-table.html

修改 始终使用mysql_insert_id或抽象层的适当功能来获取上次创建的ID,因为LAST_INSERT_ID可能会导致错误的结果。

答案 3 :(得分:0)

你可以将它切换到MySQL的auto_increment实现,但它需要3个查询才能完成:

a)ALTER TABLE将auto_increment添加到相关字段

b)SELECT MAX(id) + 1找出将ID设置为

所需的内容

c)ALTER TABLE table AUTO_INCREMENT =result from (b)

MySQL考虑将AUTO_INCREMENT值更改为表级操作,因此您无法在(a)中执行此操作,并且它不允许您在(c)中执行MAX(id),所以3个查询。

答案 4 :(得分:0)

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

CREATE TABLE mytable (
 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 col1 VARCHAR(256)
); 
ALTER TABLE mytable AUTO_INCREMENT = 5001;

在此架构中,所有ids< 5001保留供您的系统使用。因此,您的PHP脚本可以自动生成值:

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

新条目将使用非保留范围,方法是不指定id或将其设置为null:

INSERT INTO mytable SET id = NULL, col1 = 'whatevers2';
-- The id of the new row will be 5001

保留这样的范围是关键 - 如果将来需要超过56个特殊/系统行。

答案 5 :(得分:0)

ALTER TABLE <table name> <column name> NOT NULL AUTO_INCREMENT

更多信息: AUTO_INCREMENT Handling in InnoDB

Server SQL Modes