2010-03-15 29 views
1

我的主要关键是user_id这是auto incremant UNSIGNED ZERO FILL,我想显示user_id在页面上没有前导零(意味着1而不是0000000001).. 我们怎么能做到这一点在PHP或在mysql 还有一个问题...显示无符号zerofill自动增量值没有前导零

如果我删除最后一条记录(let user_id = 21),并且该表的id最高,那么我们可以将自动增量值调整为21而不是该表的22。

回答

2

在PHP中,没有前导零显示:

echo (int) $val; 

要设置AUTO_INCREMENT值(这是不好的做法,你应该让MySQL的处理主键为您服务!):

mysql> CREATE TABLE test(id INTEGER AUTO_INCREMENT, data TEXT, PRIMARY KEY id(id)); 
Query OK, 0 rows affected (0.05 sec) 

mysql> INSERT INTO test VALUES (1,'23'),(2,'32'),(3,'3232'); 
Query OK, 3 rows affected (0.00 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

mysql> SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'test'; 
+----------------+ 
| AUTO_INCREMENT | 
+----------------+ 
|    4 | 
+----------------+ 
1 row in set (0.00 sec) 

mysql> SELECT MAX(id) FROM test; 
+---------+ 
| max(id) | 
+---------+ 
|  3 | 
+---------+ 

1 row in set (0.00 sec) 

然后从测试中删除,检查auto_increment是否超过PHP中的max(id),如果不是:

mysql> ALTER TABLE test AUTO_INCREMENT=3; 
Query OK, 3 rows affected (0.05 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

由于你有3条记录,汽车公司是4,删除1所以2记录,汽车公司应该是下一个值,所以它设置为3.

如上所述,这是不好的做法,你可能会最终混乱数据如果在执行这些auto_inc查询时未锁定表 - 牺牲主键顺序的性能似乎不明智!

+0

在上面的查询'SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA ='test'AND TABLE_NAME ='test';' 是信息_schema是我的数据库名? – diEcho

+0

表架构和表名之间有什么区别?我写这两个时间相同的表名 – diEcho

+0

架构是DB,名称是TABLE - information_schema是由MySQL自己生成的动态元数据本身 – Andy