PHP 板


LINE

看板 PHP  RSS
※ 引述《koizumisyou (不小的挑戰)》之銘言: : 我的需求為用戶端送出一個表單時 : 編號為 920904001,若重複,則取該欄位最大值+1 : 9為固定號碼,2為西元年最後一碼,0904為日期,001是流水編 : 為了不重複,參考網路作法 : 1、變數C預設值是當天的001 : 2、假設經比對 變數 total不等於0,也就是裡頭已經有該編號 : 3、那麼就取最大值+1 : 我的問題是 : 問題1:為什麼多人使用時還是會重複編號?? : 問題1-1:重複的編號我觀察結果發現,重複的編號都是我自己輸入資料編號的最大值,不是整個資料庫的 : 問題2:整個網頁重新整理以後就好了 大部份 LaPass 大大 都講完了 :Q 會有這個狀況簡單來說,就是程式在執行上無法作到資源獨占這件事, 不單是 DB,只要是任何有資源取用 / 異動的地方永遠都會有這個問題。 你可以把這個檔案 copy 一次, 在其中一個檔案裡的 insert 前 sleep 個 60 秒然後兩隻一起送出看看, 撞 key 是非常容易的 XD ## 要能確保資源獨占,一是極小化(或著該說是極快化)程式的存取, 讓在自己從存取到異動的過程裡不會遇到別人,實際上這種很難有保障 以你的例子而言,是可以嘗試把東西轉成一道 sql 餵進去,像這樣: $A = date("md") ;//變數A:9開頭加上帶零的月、日 $B = substr(date('Y'),3,1);//變數B:取西元年第3個字元後1碼 $C = Sprintf("9$B$A%s",'001') ; //變數B前加9,變數A後加001 // 以上你原本的 code 我不動 $D = "9$B$A"; // 我需要這個 :P mysql_select_db($database_AdvList, $AdvList); $sql = " INSERT INTO `advlist` (`advID`) ". " SELECT IF(`advID`<'$C', '$C',". " CONCAT('$D', LPAD(RIGHT(`advID`, 3)+1, 3, '0')))". " FROM `advlist` ORDER BY `advID` DESC LIMIT 1"; // 用 INSERT SELECT 來做, // 如果拿到的最後一筆 advID 比今天的第一筆要小,就給值今天第一筆 // 如果最後一筆大於 / 等於今天的第一筆,則取末三位+1,再補零塞回去 當然這無法在 mysql 自己都很慢的時候還保證不撞 key… ## 資源獨占另一種就是 lock,只要能確定「在我使用的期間,別人不可以動」, 那麼就能作到確保資源獨占, mysql 本身有 lock table 的語法 http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html 如果你要比較高的保障,用 lock 一定是最有效的, 但是在大量瞬間多人寫入的時候會有較長的 waiting(因 DB lock 頁面開不起來) 或著我建議…這種不是很重要的序列編碼,應該是由 auto increment 來處理掉, 然後看是要另外開一個 field / table 負責存每天第一筆的差值(其實也不需要) 還是怎樣的… XD --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.161.193.130







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP