[SQL ] 如何產生不重覆的准考證號碼?

看板Database作者 (Clemond)時間13年前 (2012/04/28 04:24), 編輯推噓5(508)
留言13則, 6人參與, 最新討論串1/3 (看更多)
小弟用PHP及MySQL寫一個考試線上報名系統,考生於報名頁面填寫完後,系統會即時 產生准考證號碼.由於不同科別的考生要領到不同代碼開頭的准考證號碼,例如, 考國文的考生領到像Ch001,Ch002的准考證號而考英文的領到Eng001,Eng002的准考證號. 所以在MySQL欄位規劃,准考證號碼的欄位無法單純只用auto_increment來產生不重覆 的准考證號碼.我的做法是,先找出資料表中該科目前最後一個准考證號碼是幾號? 然後把該號碼加1再insert或update. 現在問題來了,要如何避免數千名不同科別的考生同時上線報名,因為陰錯陽差關係, 同科別的考生同時按下確定鍵而得到相同的的准考證號碼?雖然說機率很小,但果真 發生,那就問題大條了...還請各路高手指導,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 182.235.57.200

04/28 12:27, , 1F
記得可以鎖住table不准別人寫入,這是一種方法,好像叫做交
04/28 12:27, 1F

04/28 12:28, , 2F
易模式之類的。
04/28 12:28, 2F

04/28 12:28, , 3F
Sequence
04/28 12:28, 3F

04/28 13:42, , 4F
unique index (subject, col with auto_increment )
04/28 13:42, 4F

04/28 17:47, , 5F
乾脆多個table紀錄各科總人數? 原本table再加上上面的
04/28 17:47, 5F

04/28 17:47, , 6F
unique
04/28 17:47, 6F

04/28 18:36, , 7F
sequence?unique index?看來我要去做功課了,感恩!
04/28 18:36, 7F

04/28 21:16, , 8F
科別和號碼分開存放?
04/28 21:16, 8F

04/29 07:47, , 9F
我已將准考證號欄位設成unique index.但用auto_increment
04/29 07:47, 9F

04/29 07:49, , 10F
沒意義,因為不同類別的考生要領到不同代碼開頭的准考證號.
04/29 07:49, 10F

04/29 13:00, , 11F
用auto_incerment是讓你不用在做累加的動作, insert完抓
04/29 13:00, 11F

04/29 13:01, , 12F
subj+auto 就是 serial, 不會重複作業又簡單
04/29 13:01, 12F

04/29 16:55, , 13F
查了官方手冊後,我找到方法了,我自回一篇跟大伙分享.
04/29 16:55, 13F
文章代碼(AID): #1Fcm2AtG (Database)
文章代碼(AID): #1Fcm2AtG (Database)