2

テーブルに avarchar(8)と anの 2 つの列がありintます。

をしたいauto-incrementのですint columnが、値を にコピーしたいのですが、varchar(8) column長さが 8 文字になるまで 0 で埋めます。たとえば、int columnが にインクリメントされた3場合、varchar(8)列には が含まれます'00000003'

私の 2 つの質問は、重複したくないためにvarchar(8)列に到達するとどうなるかということです。'99999999'

MySQLでこれを行うにはどうすればよいですか?

値が から の間である場合、不足する00000000まで99999999にいくつの値を持つことができますか?

これは、ランダムな 8 文字の文字列を作成し、MySQL で重複をチェックするための代替アプローチです。これはより良いアプローチであり、より多くの値を許可すると思いました。

4

2 に答える 2

5

フォーマットされた列は id 列に依存しており、id 列から派生できるため、テーブルの設計は3NFに違反しています。

派生列を含むビューを作成するか ( sqlfiddleの this を参照):

CREATE VIEW myview AS
SELECT *, substring(cast(100000000 + id AS CHAR(9)), 2) AS formatted_id
FROM mytable

または、 で自動インクリメントを開始する10000000と、常に 8 桁の長さになります。

ALTER TABLE mytable AUTO_INCREMENT = 10000000;
于 2013-05-09T15:04:20.913 に答える
1

シンプルです。列が一意の場合、値が既に存在することを示す例外がスローされます。ただし、一意でない場合は99999999、値が切り捨てられたというエラー メッセージが表示されます。

代替手段、使用しないのはなぜINT AUTO_INCREMENTですか?または、日付/時刻の組み合わせによるカスタム ID。

YYMMDD-00000

これにより、1 日あたり最大 99999 レコードが記録されます。翌日にはリセットされます。

于 2013-05-09T15:01:41.340 に答える