繁体   English   中英

将列更改为Auto_Increment

[英]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处理

服务器SQL模式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM