我的id是主要的。它有自动增量。
当我尝试输入默认值时,例如:000 - 它不会从该数字开始计数,而是从0,1,2,3等开始......
我怎么能成为000?
或者在我的情况下,我真的想要一张发票 - 比如2011-000并开始计算可以吗?
任何想法??
答案 0 :(得分:1)
要使列包含000,您需要将其设为zerofill
。因此,请使用zerofill
选项更改您的表格。
您可以阅读有关zerofill的更多信息,
http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
另外,正如ajreal建议的那样,您需要将列物理更新为零。
答案 1 :(得分:0)
ALTER TABLE tablename AUTO_INCREMENT = 1
答案 2 :(得分: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)