MySQL で重複しない携帯電話番号テーブルをバッチ生成する方法のサンプルコード

MySQL で重複しない携帯電話番号テーブルをバッチ生成する方法のサンプルコード

序文

多くの MySQL テスト シナリオでは、テスト用に一部のテスト データを手動で生成する必要があります。この記事では、ユーザー名、携帯電話番号、生年月日などのフィールドを生成できる MySQL の大規模テーブル ストレージを構築する手順について説明します。重複する携帯電話番号を除外して、実際のシナリオをシミュレートすることもできます。

1. スクリプトを生成する

組み立て手順:

次のストアド プロシージャは、ユーザー名、携帯電話番号、生年月日などのフィールドを含む大きなテーブルをバッチ生成するために使用されます。

このストアド プロシージャは uid を主キーとして使用するため、少数の重複した携帯電話番号が生成されます。重複をフィルタリングする SQL スクリプトは後で提供されます。

一度に一意の携帯電話番号を生成する場合は、次のスクリプトを変更して uid を削除し、mobile 列を主キーとして使用することを検討してください。

big_tableが存在する場合はテーブルを削除します。

prc_gen_user が存在する場合はプロシージャを削除します。

テーブル `big_table` を作成します (
 `uid` int(11) NOT NULL AUTO_INCREMENT,
 `mobile` char(11) デフォルト NULL,
 `passwd` varchar(50) デフォルト NULL,
 `name` varchar(50) デフォルト NULL,
 `sex` tinyint デフォルト NULL,
 `birthday` 日時 デフォルト NULL、
 `updated_time` 日時 デフォルト NULL、
 主キー (`uid`)
)ENGINE=InnoDB デフォルト文字セット=utf8;

プロシージャprc_gen_user(l_cnt int)を作成します。
始める
 x INT DEFAULT 0 を宣言します。
 p char(11) を宣言します。

 x < l_cnt の場合
 する
 x = x + 1 を設定します。
 設定p =
  連結('1',
   部分文字列(キャスト(3 + (rand() * 10) % 7 AS char(50)), 1, 1),
   右(左(トリム(キャスト(rand() AS char(50))), 11), 9));

 big_tableにINSERT(モバイル、
    パスワード、
    名前、
    セックス、
    誕生日、
    更新日時
  値 (
   p、
   md5(天井(rand() * 1000000))、
   連結(
   部分文字列(
    'Zhao Qiansun li Zhou Zheng Wang Feng Chen Zhu Wei Jiang Chen Han Yang Zhu Qin He Lu Shi Zhang Kong Cao Yan Hua Jin Jian Eng Bao Shi Tang Fei Lian Cen Xue Lei he ni tang yin luo hao wu an chang le yu yu shi fu pi qi yu yu yuan bu gu meng ping huang Zhu Dong Liang Du Ruan Lan Xi Ji Ma Qiang Lu Lou Wei Jiang Tong Yan Guo heng Lin Diao Zhon Zuo Shi Cui Ji Niu Gong '、
    フロア(1 + 190 * ランド())、
    1)、
   部分文字列(
    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
    フロア(1 + 400 * ランド())、
    1)、
   部分文字列(
    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
    フロア(1 + 400 * ランド())、
    1))、
   天井(rand() * 10) % 2,
   日付(
   今()
   - 間隔 (20 + 天井(rand() * 100) % 40) 年)、
   連結('2018-',
    1 + 天井(rand() * 100) % 12,
    '-'、
    1 + 天井(rand() * 100) % 28))
 重複キー更新の場合 updated_time = now();
 終了しながら;
終わり

2. データ入力

prc_gen_user(1000)を呼び出します。
クエリは正常、1 行が影響を受けました (1.38 秒)

big_tableからcount(*)を選択します。
+----------+
| カウント(*) |
+----------+
| 1000 |
+----------+
セット内の 1 行 (0.00 秒)
「Leshami」著者、「http://blog.csdn.net/leshami」ブログを選択します。
+---------+------------------------------+
| 著者 | ブログ |
+---------+------------------------------+
| レシャミ | http://blog.csdn.net/leshami |
+---------+------------------------------+

3. 重複するSQL文のフィルタリング

big_tableから削除
WHERE mobile IN (SELECT mobile
   (u1.mobileから選択)
    big_table u1 から
    u1.mobileによるグループ
    カウント(*) > 1) a)
 AND uid NOT IN (SELECT uid
   FROM (SELECT min(u2.uid) AS uid
    big_table u2 から
    u2.mobileによるグループ
    count(*) > 1) b); を満たす

IV. その他

この記事では、ユーザーデータ(名前/携帯電話番号/誕生日/パスワード)のMySQLバッチ作成を実装する次のコードを参照します。

batchGenerateUsers が存在する場合は削除プロシージャを実行します。


区切り文字 $$
CREATE PROCEDURE batchGenerateUsers()
始める
DECLARE x INT デフォルト 0;
    p char(11) を宣言します。
x < 10000 の場合
x=x+1 を設定します。
        p=concat('1', cast(3+(rand()*10)%7 as char(1)), right(left(trim(cast(rand() as char (20))), 11),9));を設定します。
my_users(mobile, passwd, name, sex, birthday, updated_time) に挿入します。
値(p,
md5(天井(rand()*1000000))、
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
天井(rand()*10)%2、
日付(現在()-間隔(20+上限(rand()*100)%40)年)、
連結('2015-', 1+天井(rand()*100)%12,'-',1+天井(rand()*100)%28))
重複キーの更新について
更新日時=現在();
終了しながら;
終了 $$


#batchGenerateUsers() を呼び出します。

適切に修正してください。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • 大きな MySQL テーブルに列を追加する方法
  • MySQLで大きなテーブルを正常に削除する方法の詳細な説明
  • MySQLの大規模テーブル最適化ソリューションについての簡単な説明
  • 大規模な MySQL テーブル内の繰り返しフィールドに対する高効率クエリ方法
  • 大きなテーブルを削除する際の MySQL パフォーマンス問題の解決策
  • MySQL の大きなテーブルで大量のデータを一括削除する方法

<<:  Linux でテキストから改行文字を削除する方法

>>:  Vue3とVue2の利点のまとめ

推薦する

水平スクロールバーを実装する2つの方法の例

序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...

MySQLにおけるトランザクションの永続性実装原理の詳細な説明

序文データベース トランザクションに関して言えば、トランザクションの ACID 特性、分離レベル、解...

Zabbix と bat スクリプトを組み合わせて複数のアプリケーションの状態を監視する方法

シナリオシミュレーション:国内企業の中には、重要な業務をサポートするために特定のウィンドウ プログラ...

React Router で履歴リダイレクトを使用する方法

react-routerでは、コンポーネント内のジャンプは<Link>で使用できます。し...

vue フロントエンド HbuliderEslint リアルタイム検証 自動修復設定

目次HBuilderX での ESLint プラグインのインストールカスタム eslint-js ル...

mysql の存在する例と存在しない例の詳細な説明

mysql の存在する例と存在しない例の詳細な説明テーブルA |列1 | 列1 | 列3 |テーブル...

MySQL データベースは SQL ステートメントを知っている必要があります (拡張バージョン)

拡張版です。質問とSQL文は以下の通りです。ユーザー テーブルを作成し、id、name、gender...

純粋な CSS を使用してユーザーが Web ページのコンテンツをコピーするのを防ぐ方法

序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...

HTML タグの表示モード (ブロックレベル タグ、インライン タグ、インライン ブロック タグ) に関する簡単な説明

今日の講義では、HTML におけるタグの表示モードについてお話ししましたが、これはブロックレベルタグ...

CSS フロントエンドページレンダリング最適化属性 will-change の具体的な使用法

序文スクロールやサイズ変更などのスクロール イベントがトリガーされると、トリガーの頻度が非常に高くな...

CSSはグラデーションを巧みに利用して高度な背景光アニメーションを実現します

成し遂げるこの効果は CSS を使用して完全に再現することは困難です。 CSS でシミュレートされた...

Win10でのMySQL5.7.17無料インストール版の基本設定チュートリアルについて(画像とテキスト付き)

データベース アプリケーションは、アプリケーション システムに不可欠な部分です。リレーショナル デー...

MYSQL SERVER のログファイルを縮小する方法

トランザクション ログには、関連するデータベースに対する操作が記録され、データベースの回復に関連する...

Flexboxレイアウトの最もシンプルなフォーム実装

フレキシブル レイアウト (Flexbox) はますます人気が高まっており、CSS レイアウトの記述...