2011-01-10 108 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)