我今天早些时候提出这个问题,但不确定我是多么清楚。
我有一个填充有序号码1-56的MySQL列。这些数字是由我的PHP脚本生成的,而不是由auto_increment生成的。
我想做的是在PHP脚本设置正确的数字后使此列auto_incrementing。 PHP脚本与jQuery接口协同工作,允许我使用jQuery的UI插件重新排序项目列表。
一旦我确定了我希望条目的顺序,我希望将列设置为自动增量,这样如果我要插入一个新条目,它将识别已存在的最高数字该列并将其自己的ID号设置为比已存在的ID高一个。
有没有人对如何处理这种情况有任何建议?
答案 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