私は毎日何百ものデータを受け付けるPHPシステムを持っています。私はすべてのデータを格納するデータベースとしてMySQLを使用しています。一意のvarcharの自動増分が重複を引き起こす可能性があります
メインテーブルの1つで、それは 'tableData'と呼ばれ、すべてのメインデータが格納され、2つのプライマリキーがあります。第1の主キーは、自動インクリメント整数です。 2番目の主キーは、データが必要なときにこの形式(rep/yyyy/AIinteger、rep/2017/00021、rep/2017/00023、rep/2016/02345)のvarchar値を格納したsubmission_numです。
tableDataに提出するには、phpはsubmission_numの最大数を取得し、それを1つ増やして、新しいsubmission_numを使用して新しいデータをtableDataに挿入します。 (例えば、PHPが最大数としてrep/2017/00034を受け取った場合、整数部分を1だけ増やし、新しい申請件数はrep/2017/00035となります)、新しいデータを新しい申請と一緒に保存しますNUM)
PHPスクリプトのアルゴリズムは最大submission_num、
クエリを取得この
次のようになります。SUBSTR(submission_num、5,4)=「$ curYearたtableData FROM SELECT submission_numを'ORDER BY submission_num DESC LIMIT 0,1 1
この方法は、問題を起こした1
- ストアデータ
によって整数部分を増やします。 2人以上のユーザーが適切なタイミングで「送信」ボタンを押すと、彼らは同じsubmission numを生成し、重複したsubmission num(このsubmission numは一意である必要があります)を使用してデータベースに保存します。
PHPスクリプトのSelectクエリからテーブルを一時的にロックする方法はありますか?
btw、私はあなたに悪い知らせている場合は非常にごめんなさい。私は英語でかなり悪いです –
使用テーブルのタイプによっては、トランザクションまたはロックを使用します。いずれにしても、1つのテーブルに2つの自動インクリメントが必要な場合は、おそらくそのうちの1つだけが必要な場合、または2つ目のテーブルを作成する必要がある場合があります。 –