2011-01-10 72 views
0

我有这是主要的ID。它有自动增量。默认值在MySQL表中ID

当过我尝试进入例如像一个默认值:000 - 它不会启动该号码,但来自0,1,2,3等计数......

我怎样才能让000 ?

或者在我的情况下,我真的希望它的发票 - 说2011-000,并开始计数可以吗?

任何想法??

回答

0
ALTER TABLE tablename AUTO_INCREMENT = 1 
1

要使列包含000,您需要将其设置为zerofill。所以,用你的专栏的zerofill选项来改变你的表格。

你可以阅读更多关于ZEROFILL,

http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

而且,ajreal建议,您将需要物理为零更新列。

+0

我认为是50%正确的(ZEROFILL是正确的) – ajreal 2011-01-10 05:28:44

0

为什么你需要在0000和0001之间打扰?

PS - http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_no_auto_value_on_zero

NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。通常,通过向其中插入NULL或0来为列生成下一个序列号。 NO_AUTO_VALUE_ON_ZERO将此行为抑制为0,以便只有NULL才会生成下一个序列号。

如果0已存储在表的AUTO_INCREMENT列中,此模式可能很有用。 (顺便说一句,存储0不是推荐的做法。)例如,如果您使用mysqldump转储表并重新加载它,MySQL通常会在遇到0值时生成新的序列号,从而导致内容不同于那个被倾倒的人。重新加载转储文件之前启用NO_AUTO_VALUE_ON_ZERO可解决此问题。 mysqldump现在会在其输出中自动包含一个使NO_AUTO_VALUE_ON_ZERO启用的语句,以避免此问题。

希望下面的意义没有改变NO_AUTO_VALUE_ON_ZERO ...

 
mysql> create table invoice (years int(4) unsigned, 
seq int(4) unsigned zerofill not null auto_increment, 
primary key(years, seq)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> insert into invoice values (2011, 0); 
Query OK, 1 row affected (0.00 sec) 

mysql> update invoice set seq=0; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> alter table invoice auto_increment=0; 
Query OK, 1 row affected (0.00 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> insert into invoice values (2011, 0); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from invoice; 
+-------+------+ 
| years | seq | 
+-------+------+ 
| 2011 | 0000 | 
| 2011 | 0001 | 
+-------+------+ 
2 rows in set (0.00 sec) 

mysql> insert into invoice values (2011, 0), (2011, 0); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Duplicates: 0 Warnings: 0 

mysql> select * from invoice; 
+-------+------+ 
| years | seq | 
+-------+------+ 
| 2011 | 0000 | 
| 2011 | 0001 | 
| 2011 | 0002 | 
| 2011 | 0003 | 
+-------+------+ 
4 rows in set (0.00 sec)