我有一个ID字段,它是我的主键,只是一个int字段。
我的行数少于 300 ,但现在每次有人注册时,ID auto auto inc的输入真的很高,如 11800089,11800090等...... 是否有一种方法可以让它回来,以便它可以按照(310,311,312)的顺序。
谢谢!
答案 0 :(得分:49)
ALTER TABLE tbl AUTO_INCREMENT=310;
请注意,您不想重复ID。如果数字很高,他们会以某种方式得到这种方式。请确保您没有较低ID号的关联数据。
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
答案 1 :(得分:3)
可能有一种更快捷的方法,但这就是我要做的,以确保我重新创建ID;
如果您使用的是MySQL或其他SQL服务器,则需要:
TRUNCATE
或'清空'表格id
列重新设为auto_increment
这将破坏现有行的ID,因此如果这些是重要的,那么它就不是一个可行的选择。
答案 2 :(得分:1)
猜测您使用的是mysql,因为您正在使用PHP。您可以使用类似
的语句重置auto_increment alter table mytable autoincrement=301;
但要小心 - 因为当auto inc值重叠时会出现问题
答案 3 :(得分:1)
表的自动增量计数器可以(重新)设置两种方式:
通过执行查询,就像已经解释的其他人一样:
//make shipping fields not required in checkout
add_filter( 'woocommerce_shipping_fields', 'wc_npr_filter_shipping_fields', 10, 1 );
function wc_npr_filter_shipping_fields( $address_fields ) {
$address_fields['shipping_first_name']['required'] = false;
$address_fields['shipping_last_name']['required'] = false;
$address_fields['shipping_address_1']['required'] = false;
$address_fields['shipping_city']['required'] = false;
$address_fields['shipping_postcode']['required'] = false;
return $address_fields;
}
使用Workbench或其他可视化数据库设计工具。我将在Workbench中展示它是如何完成的 - 但它在其他工具中也不应该有太大的不同。右键单击所需的表格,然后从上下文菜单中选择ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
。在底部,您可以看到更改表格的所有可用选项。选择Alter table
,您将获得此表单:
然后在字段Options
中设置所需的值,如图所示。
这基本上将执行第一个选项中显示的查询。
答案 4 :(得分:0)
我相信mysql会对id执行select max并将下一个选中。尝试将表的ID更新为所需的序列。你将遇到的问题是,如果它们被链接,你应该在fk的更新上放置一个Cascade。 我想到的一个问题是:
UPDATE Table SET id=(SELECT max(id)+1 FROM TAble WHERE id<700)
少于你拥有的11800090以及300 WHERE id&gt; 0附近的东西;
我相信如果你没有放置一个地方的话,那就是mysql投诉
答案 5 :(得分:0)
我正在玩一个类似的问题并找到了这个解决方案:
SET @newID=0;
UPDATE `test` SET ID=(@newID:=@newID+1) ORDER BY ID;
SET @c = (SELECT COUNT(ID) FROM `test`);
SET @s = CONCAT("ALTER TABLE `test` AUTO_INCREMENT = ",@c);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我希望能帮助处于类似情况的人!