mysql表id中的默认值

时间:2011-01-10 05:11:06

标签: mysql database invoice

我的id是主要的。它有自动增量。

当我尝试输入默认值时,例如:000 - 它不会从该数字开始计数,而是从0,1,2,3等开始......

我怎么能成为000?

或者在我的情况下,我真的想要一张发票 - 比如2011-000并开始计算可以吗?

任何想法??

3 个答案:

答案 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)