[英]Change Column to Auto_Increment
我今天早些时候问了这个问题,但不确定我是否清楚。
我有一个MySQL栏,里面有序编号为1-56。 这些数字是由我的PHP脚本而不是由auto_increment生成的。
我想做的是在PHP脚本设置正确的数字后使此列自动递增。 PHP脚本与jQuery界面配合使用,允许我使用jQuery的UI插件对项目列表进行重新排序。
一旦确定了要输入的顺序,我希望将列设置为自动递增,这样,如果我要插入一个新条目,它将识别出该列中已经存在的最高编号,并且将其自己的ID号设置为比现有ID号高一个。
有人对如何处理这种情况有任何建议吗?
我建议您使用auto_increment创建表。 您可以为auto_inc列指定一个值,而mysql将使用它,而下一个为auto_inc列指定NULL或0值的插入将神奇地获得$ highest +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
不,停下来 这不是auto_increment的重点。 如果您不打算按ID对它们进行排序,那么就不要对它们进行auto_increment排序,只需在表的末尾添加一列进行排序即可,并享受它赋予您的灵活性。 似乎您正在尝试将两套不同的信息打包到一栏中,尽管该线程中所有好心的人都在告诉您如何着手射击自己,但这实际上只会使您陷入困境。
您可以使用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
可能导致错误的结果。
您可以将其切换到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个查询。
在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;
在此模式中,所有<5001的ID均保留供系统使用。 因此,您的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个特殊/系统行。
ALTER TABLE <table name> <column name> NOT NULL AUTO_INCREMENT
更多信息: InnoDB中的AUTO_INCREMENT处理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.