検索
ホームページデータベースmysql チュートリアルMySQL でいくつかの実用的な SQL ステートメントを共有する

MySQL でいくつかの実用的な SQL ステートメントを共有する

SQL を記述するときは、プログラム ロジックを大幅に簡素化するために SQL ステートメントの記述スキルを使用することがよくあります。プログラムとデータベース間のやり取りの数を減らすことは、データベースの高可用性にとって有益であり、また、あなたの SQL スキルが同僚に目立つようになります。

#実践 SQL

1. 挿入または置換

新しいものを挿入する場合は、レコード (INSERT) ですが、レコードがすでに存在する場合は、最初に元のレコードを削除してから、新しいレコードを挿入します。

シナリオ例: このテーブルには、各顧客の最新のトランザクション注文情報が保存されます。単一のユーザー データが繰り返し入力されないようにする必要があり、データベースとの対話を最小限に抑えて実行効率が最も高くなります。 、データベースの高可用性をサポートします。

現時点では、「REPLACE INTO」ステートメントを使用できるため、最初にクエリを実行してから、削除してから挿入するかどうかを決定する必要がありません。

  • 「REPLACE INTO」ステートメントは、一意のインデックスまたは主キーに基づいて一意性 (存在するかどうか) を判断します。

  • 「REPLACE INTO」ステートメントは、一意のインデックスまたは主キーに基づいて一意性 (存在するかどうか) を判断します。

  • 「REPLACE INTO」ステートメントは、一意のインデックスまたは主キーに基づいて一意性 (存在するかどうか) を判断します。

注: 次の SQL に示すように、ユーザー名フィールドに一意のインデックス (Unique) を確立する必要があり、transId 設定を増やすことができます。

-- 20点充值
REPLACE INTO last_transaction (transId,username,amount,trans_time,remark) 
   VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', '会员充值');
 
-- 21点买皮肤
REPLACE INTO last_transaction (transId,username,amount,trans_time,remark) 
   VALUES (null, 'chenhaha', 100, '2020-06-11 21:00:00', '购买盲僧至高之拳皮肤');

username='chenhaha' のレコードが存在しない場合、REPLACE ステートメントは新しいレコードを挿入します (最初の再チャージ)。それ以外の場合は、username='chenhaha' の現在のレコードが削除され、その後新しいレコードが挿入されます。

id ​​には特定の値を指定しないでください。ビジネスに特別なニーズがない限り、SQL の実行に影響します。

2. 挿入または更新

新しいレコードを挿入する (INSERT) 場合、レコードがすでに存在する場合は、この時点でレコードを更新します。 「INSERT INTO ... ON DUPLICATE KEY UPDATE ...」ステートメントを使用できます:

シナリオ例: このテーブルには、ユーザーの過去のリチャージ金額が保存されます。ユーザーが初めてリチャージする場合、新しいユーザーがリチャージする場合 過去のリチャージ金額が蓄積される場合、単一ユーザーのデータが繰り返し入力されないようにする必要があります。

現時点では、「INSERT INTO ... ON DUPLICATE KEY UPDATE ...」ステートメントを使用できます。

注: 上記と同様、「INSERT INTO ... ON DUPLICATE KEY UPDATE ...」ステートメントは、一意のインデックスまたは主キーに基づいて一意性 (存在するかどうか) を判断します。次の SQL に示すように、ユーザー名フィールドに一意のインデックス (Unique) を確立する必要があり、transId 設定を増やすことができます。

-- 用户陈哈哈充值了30元买会员
INSERT INTO total_transaction (t_transId,username,total_amount,last_transTime,last_remark) 
   VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', '充会员') 
   ON DUPLICATE KEY UPDATE  total_amount=total_amount + 30, last_transTime='2020-06-11 20:00:20', last_remark ='充会员';
 
-- 用户陈哈哈充值了100元买瞎子至高之拳皮肤
INSERT INTO total_transaction (t_transId,username,total_amount,last_transTime,last_remark) 
   VALUES (null, 'chenhaha', 100, '2020-06-11 20:00:20', '购买盲僧至高之拳皮肤') 
   ON DUPLICATE KEY UPDATE total_amount=total_amount + 100, last_transTime='2020-06-11 21:00:00', last_remark ='购买盲僧至高之拳皮肤';
username='chenhaha' のレコードが存在しない場合、INSERT ステートメントは新しいレコードを挿入します。それ以外の場合は、username='chenhaha' の現在のレコードが更新され、更新されたフィールドは UPDATE で指定されます。

3. 挿入または無視

新しいレコードを挿入 (INSERT) する場合、レコードがすでに存在する場合は、それを無視して何もしません。 、 INSERT IGNORE INTO... ステートメントを使用できます。 多くのシナリオがあるため、例は示しません。

注: 上記と同様、「INSERT IGNORE INTO...」ステートメントは、一意性 (存在するかどうか) を決定する一意のインデックスまたは主キー、および一意のインデックス (Unique) に基づいています。ユーザー名フィールドで確立する必要があります。transId 設定は単独で増加できます。

-- 用户首次添加
INSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time) 
   VALUES (null, 'chenhaha', '男', 12, 0, '2020-06-11 20:00:20');
 
-- 二次添加,直接忽略
INSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time) 
   VALUES (null, 'chenhaha', '男', 12, 0, '2020-06-11 21:00:20');
username='chenhaha' のレコードが存在しない場合、INSERT ステートメントは新しいレコードを挿入します。存在しない場合、操作は実行されません。

4. SQL における if-else 判定ステートメント

ご存知のとおり、if-else 判定は SQL ステートメントのどこでも役に立ちます。 THEN ... ELSE ... END" ステートメントは、さまざまなタイプの追加、削除、変更、クエリ ステートメントで使用できます。

シナリオを教えてください: 女性の日の大きな特典、2020 年に登録された新規ユーザー、すべての成人女性アカウントには 10 元の赤い封筒が与えられ、その他のユーザーには 5 元の赤い封筒が与えられます。自動的に充電されます。

例は次のとおりです:

-- 送红包语句
UPDATE users_info u 
    SET u.balance = CASE WHEN u.sex ='女' and u.age > 18 THEN u.balance + 10 
                         ELSE u.balance + 5 end 
                         WHERE u.create_time >= '2020-01-01'

* シナリオ 2: 学生の大学入学試験のスコア表があり、成績をリストする必要があります。スコア 650 以上がキーです。大学、600 ~ 650 は本、500 - 600 のスコアは 2 冊の本を意味し、400 ~ 500 のスコアは 3 冊の本を意味し、大学のスコアが 400 未満である;

元のテスト データは次のとおりです。

MySQL でいくつかの実用的な SQL ステートメントを共有する##クエリ ステートメント:

SELECT *,case when total_score >= 650  THEN '重点大学' 
              when total_score >= 600 and total_score <650 THEN &#39;一本&#39;
              when total_score >= 500 and total_score <600 THEN &#39;二本&#39;
              when total_score >= 400 and total_score <500 THEN &#39;三本&#39;        
              else &#39;大专&#39; end as status_student 
              from student_score;

MySQL でいくつかの実用的な SQL ステートメントを共有する

5. データ スナップショットまたはバックアップを指定します

テーブルのスナップショットを取得したい場合は、コピーを作成します。現在のテーブルから新しいテーブルにデータを転送するには、CREATE TABLE と SELECT を組み合わせることができます。新しく作成されたテーブル構造は、SELECT で使用されるテーブル構造とまったく同じです。

6. クエリ結果セットを書き込む

クエリ結果セットをテーブルに書き込む必要がある場合は、INSERT と SELECT を組み合わせて結果セットを直接挿入できます。指定されたテーブルに対する SELECT ステートメントの。 たとえば、統計テーブルを作成して各クラスの平均スコアを記録します:

-- 对class_id=1(一班)的记录进行快照,并存储为新表students_of_class1:
CREATE TABLE students_of_class1 SELECT * FROM student WHERE class_id=1;

次に、1 つのステートメントを使用して各クラスの平均スコアを書き込むことができます:

INSERT INTO statistics (class_id, average) SELECT class_id, AVG(score) FROM students GROUP BY class_id;

确保INSERT语句的列和SELECT语句的列能一一对应,就可以在statistics表中直接保存查询的结果:

SELECT * FROM statistics;
+----+----------+--------------+
| id | class_id | average      |
+----+----------+--------------+
|  1 |        1 |        475.5 |
|  2 |        2 | 473.33333333 |
|  3 |        3 | 488.66666666 |
+----+----------+--------------+
3 rows in set (0.00 sec)

7.强制使用指定索引

在查询的时候,数据库系统会自动分析查询语句,并选择一个最合适的索引。但是很多时候,数据库系统的查询优化器并不一定总是能使用最优索引。如果我们知道如何选择索引,可以使用FORCE INDEX强制查询使用指定的索引。例如:

SELECT * FROM students FORCE INDEX (idx_class_id) WHERE class_id = 1 ORDER BY id DESC;

指定索引的前提是索引idx_class_id必须存在。

心得体会:

MySQL路漫漫,其修远兮。永远不要眼高手低,一起加油,希望本文能对你有所帮助。

推荐教程: 《mysql教程

以上がMySQL でいくつかの実用的な SQL ステートメントを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQLの場所:データベースとプログラミングMySQLの場所:データベースとプログラミングApr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQL:中小企業から大企業までMySQL:中小企業から大企業までApr 13, 2025 am 12:17 AM

MySQLは、中小企業に適しています。 1)中小企業は、顧客情報の保存など、基本的なデータ管理にMySQLを使用できます。 2)大企業はMySQLを使用して、大規模なデータと複雑なビジネスロジックを処理して、クエリのパフォーマンスとトランザクション処理を最適化できます。

Phantomの読み取りとは何ですか?Innodbはどのようにそれらを防ぐ(次のキーロック)?Phantomの読み取りとは何ですか?Innodbはどのようにそれらを防ぐ(次のキーロック)?Apr 13, 2025 am 12:16 AM

INNODBは、次のキーロックメカニズムを通じてファントムの読み取りを効果的に防止します。 1)Next-KeyLockingは、Row LockとGap Lockを組み合わせてレコードとギャップをロックして、新しいレコードが挿入されないようにします。 2)実際のアプリケーションでは、クエリを最適化して分離レベルを調整することにより、ロック競争を削減し、並行性パフォーマンスを改善できます。

mysql:プログラミング言語ではありませんが...mysql:プログラミング言語ではありませんが...Apr 13, 2025 am 12:03 AM

MySQLはプログラミング言語ではありませんが、そのクエリ言語SQLにはプログラミング言語の特性があります。1。SQLは条件付き判断、ループ、可変操作をサポートします。 2。ストアドプロシージャ、トリガー、機能を通じて、ユーザーはデータベースで複雑な論理操作を実行できます。

MySQL:世界で最も人気のあるデータベースの紹介MySQL:世界で最も人気のあるデータベースの紹介Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLの重要性:データストレージと管理MySQLの重要性:データストレージと管理Apr 12, 2025 am 12:18 AM

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

なぜMySQLを使用するのですか?利点と利点なぜMySQLを使用するのですか?利点と利点Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

InnoDBロックメカニズム(共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロック)を説明します。InnoDBロックメカニズム(共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロック)を説明します。Apr 12, 2025 am 12:16 AM

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター