Dark Horse mysql チュートリアル ノート (mysql8 チュートリアル) の基本 - データベース関連の概念、mysql のインストールとアンインストール、データ モデル、SQL の一般的な構文と分類 (DDL、DML、DQL、DCL)

参考記事1:https://www.bilibili.com/video/BV1Kr4y1i7ru/

参考文章2:https://dhc.pythonanywhere.com/article/public/1/

ここに画像の説明を挿入します

記事ディレクトリ

基本

データベース関連の概念

(データベース Database (DB)、データベース管理システム Database Management System (DBMS)、構造化照会言語 SQL (Structured Query Language))

ここに画像の説明を挿入します

主流のリレーショナル データベース管理システム (SQL 統一言語標準)

ここに画像の説明を挿入します

mysqlのインストールとアンインストール

インストール

ここに画像の説明を挿入します

Windows に mysql コミュニティ バージョン 8.0.26 をインストールするチュートリアル

Windows でのインストール方法の参考ビデオ: https://www.bilibili.com/video/BV1Kr4y1i7ru?p=3

私は Linux を使用していますが、Ubuntu20.04 に mysql サービスをインストールする方法を紹介します。

  1. まず、ターミナル ウィンドウを開きます。

  2. パッケージ リストを更新して、最新のソフトウェア バージョンを確実に入手してください。これは、次のコマンドを実行することで実現できます。

    sudo apt update
    
  3. MySQL サーバーをインストールするには、次のコマンドを実行します。

    sudo apt install mysql-server
    
  4. インストールが完了すると、MySQL サービスが自動的に開始されます。次のコマンドを使用して、MySQL が実行されていることを確認できます。

    sudo systemctl status mysql
    

    ここに画像の説明を挿入します

  5. MySQL の初期インストールでは、MySQL のセキュリティを向上させるために mysql_secure_installation スクリプトを実行する必要があります。次のコマンドを実行します。

    sudo mysql_secure_installation
    

    このスクリプトは、root ユーザーのパスワードの設定、匿名ユーザーの削除、root リモート ログインの無効化、およびテスト データベースの削除をガイドします。

    これは設定しません。とにかくデバッグ用です。設定が多すぎると効率に影響します。

アンインストール

Ubuntu 20.04 で MySQL を完全にアンインストールするには、次の手順に従います。

  1. まず、実行中の MySQL サービスを停止する必要があります。ターミナルを開き、次のコマンドを入力します。

    sudo systemctl stop mysql
    
  2. 次に、apt を使用して MySQL をアンインストールします。次のコマンドを入力します。

    sudo apt-get remove --purge mysql-server mysql-client mysql-common
    sudo apt-get autoremove
    sudo apt-get autoclean
    
  3. 最後に、関連するすべてのファイルと構成が確実に削除されるように、データ ディレクトリを手動で削除できます。デフォルトでは、このディレクトリは通常 /var/lib/mysql です。ただし、正しい場所を確認するにはシステムをチェックする必要があります。削除する前に、その中のデータが不要であることを確認してください。このディレクトリは、次のコマンドを使用して削除できます。

    sudo rm -rf /var/lib/mysql
    

注: これにより、すべての MySQL データベースと関連データが完全に削除されるため、この操作を実行する前に重要なデータを必ずバックアップしてください。

データ・モデル

ここに画像の説明を挿入します

リレーショナル データベース RDBMS (リレーショナル モデルに基づき、相互接続された複数の 2 次元テーブルで構成されるデータベース)

ここに画像の説明を挿入します

同様に、テーブル構造を介して格納されていないデータベースは と呼ばれます非关系型数据库

SQL の一般的な構文と分類

普遍文法

特定の SQL ステートメントを学習する前に、まず SQL 言語の一般的な構文を理解しましょう。

  1. SQL ステートメントは、単一行で書くことも、複数行でセミコロンで終わることもできます。
  2. SQL ステートメントでは、スペース/インデントを使用してステートメントの可読性を高めることができます。
  3. MySQL データベースの SQL ステートメントでは大文字と小文字が区別されないため、キーワードには大文字を使用することをお勧めします。
  4. コメント:
    単一行コメント:--コメント内容または#コメント内容
    複数行コメント:/*コメント内容*/

DDL (データ定義言語): データベース オブジェクト (データベース、テーブル、フィールド) を定義するために使用されるデータ定義言語

データベース操作
  • まずデータベースにログインします。
    mysql -u root -p
    
    ここに画像の説明を挿入します
すべてのデータベースをクエリする: データベースを表示

SHOW DATABASES;

  • 例:

    show databases;
    

    ここに画像の説明を挿入します

現在のデータベースをクエリします: select

SELECT DATABASE();

  • 例:

    select database();
    

    ここに画像の説明を挿入します

データベースの作成: 作成

CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];

  • 例:

    create database itcast;
    

    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

  • すでに存在する名前でデータベースを作成することはできません:
    ここに画像の説明を挿入します

  • if not existsデータベースが存在する場合にデータベースが作成されず、エラーが報告されないように、判定オプションを追加できます。

    create database if not exists itcast;
    

    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

  • 作成時にデフォルトの文字セットを指定します (4 バイトを使用する utf8mb4 を使用することをお勧めします。utf8 は 3 バイトのみを使用します)。

    create database if not exists itcast3 dafault charset utf8mb4;
    

    ここに画像の説明を挿入します

    データベースを作成する場合、utf8mb4文字セットを選択する主な理由は次のとおりです。

    1. Unicode の完全サポート: utf8mb4(UTF-8 マルチバイト 4) は、MySQL で UTF-8 文字を表すために使用される文字セットです。以前の実装とは対照的にutf8、4 バイト長の Unicode 文字を完全にサポートします。これは、標準の Unicode 文字を格納できることを意味します。元のutf8実装では最大 3 バイトの長さの文字のみがサポートされており、絵文字や一部の特殊な中国語などの一部の特殊文字は処理できません。

    2. データ セキュリティutf8: 4 バイト長の文字を適切に処理できないため、そのような文字を挿入しようとするとデータが切り捨てられ、損失が発生する可能性がありますを使用すると、utf8mb4この状況を回避し、データの整合性を確保できます。

    3. 将来の互換性: より多くの新しい Unicode 文字や Emoji 絵文字が登場するにつれて、utf8mb4将来の互換性が保証されます。

    したがって、データベースですべての種類の Unicode 文字を確実に処理できるようにするために、データベースの作成時に文字セットを使用することを一般的にお勧めしますutf8mb4

注: 文字セットは主に、CHAR、VARCHAR、TEXT などのテキスト型データの保存と処理に影響します。一般に、整数、浮動小数点型、日付と時刻型などの非文字列データ型の保存と処理には影響しません。

データベースの削除: ドロップ

DROP DATABASE [ IF EXISTS ] 数据库名;

  • drop database itcast;
    

    ここに画像の説明を挿入します

データベースを使用する: 使用する

USE 数据库名;

  • use myDatabase;
    

    ここに画像の説明を挿入します

  • select を使用して、現在使用しているデータベースをクエリできます。
    ここに画像の説明を挿入します

予防
  • UTF8 文字セットの長さは 3 バイトで、一部の記号は 4 バイトを占有するため、utf8mb4 文字セットを使用することをお勧めします。
テーブル操作
mysqlのデータ型
数値型

ここに画像の説明を挿入します

  • 例:
    年齢:age tinyint unsigned
    分数: はscore double(4,1)有効数字 4 桁 (100.0) までを意味し、その後 1 は小数点以下 1 桁であることを意味します。
文字列型

ここに画像の説明を挿入します
固定長文字列のパフォーマンスは向上しますが、可変長文字列のパフォーマンスは低下します。

  • 例:
    ユーザー名:username varchar(50)
    性別:gender char(1)
日時型

ここに画像の説明を挿入します

  • 例:
    誕生日:birthday date
現在のデータベース内のすべてのテーブルをクエリします: show tables

SHOW TABLES;

  • show tables;
    

    ここに画像の説明を挿入します

クエリテーブルの構造: desc

DESC 表名;

  • desc tb_user;
    

    ここに画像の説明を挿入します

指定したテーブルのテーブル作成文をクエリ: show create table (作成時のコメントを含むテーブルの詳細情報を表示可能)

SHOW CREATE TABLE 表名;

  • show create table tb_user;
    

    ここに画像の説明を挿入します

    上記のコードはtb_userテーブル作成ステートメントを示しています。このステートメントには、テーブルの名前、フィールド定義、ストレージ エンジン、文字セットなどの情報が含まれています。

    具体的な説明は以下の通りです。

    • CREATE TABLE tb_user:tb_userという名前のテーブルを作成します。

    • 4 つのフィールドの定義は次のとおりです。

      • idint DEFAULT NULL COMMENT 'number':idという名前のフィールドを作成します。データ型は整数 (int)、デフォルト値は NULL、コメントは 'number' です。
      • namevarchar(50) DEFAULT NULL COMMENT 'Name':nameという名前のフィールドを作成します。データ型は可変長文字列 (varchar)、最大長は 50 文字、デフォルト値は NULL、コメントは 'Name' です。
      • ageint DEFAULT NULL COMMENT 'age':ageという名前のフィールドを作成します。データ型は整数 (int)、デフォルト値は NULL、コメントは 'age' です。
      • gendervarchar(1) DEFAULT NULL COMMENT 'Gender':genderという名前のフィールドを作成します。データ型は可変長文字列 (varchar)、最大長は 1 文字、デフォルト値は NULL、コメントは 'Gender' です。
    • ENGINE=InnoDB: 指定されたテーブルのストレージ エンジンは InnoDB です。MySQL はさまざまなストレージ エンジンをサポートしています。各ストレージ エンジンには独自の利点と特性があります。InnoDB は最も一般的に使用されており、トランザクション処理と行レベルのロックをサポートしています。

    • DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci: 指定されたテーブルのデフォルトの文字セットは utf8mb4 で、照合順序は utf8mb4_0900_ai_ci です。文字セットはテーブル内のテキスト データの保存方法と処理方法を決定し、照合順序は文字の比較方法を決定します。

    • COMMENT='用户表': テーブルに「ユーザー テーブル」であることを示すコメントを追加します。

テーブルの作成: テーブルの作成
CREATE TABLE 表名(
	字段1 字段1类型 [COMMENT 字段1注释],
	字段2 字段2类型 [COMMENT 字段2注释],
	字段3 字段3类型 [COMMENT 字段3注释],
	...
	字段n 字段n类型 [COMMENT 字段n注释]
)[ COMMENT 表注释 ];

注: 最後のフィールドの後にはカンマはありません

  • 例1
    ここに画像の説明を挿入します

    create table tb_user(
    	id int comment '编号',
    	name varchar(50) comment '姓名',
    	age int comment '年龄',
    	gender varchar(1) comment '性别'
    	) comment '用户表';
    

    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8

  • 例 2
    : 次の要件を備えた従業員情報テーブルを設計します。

    1. 数値 (純粋な数値)
    2. 社員ID(文字列型、10桁以内)
    3. 社員名(文字列型、10文字以内)
    4. 性別(男性/女性、漢字を格納)
    5. 年齢 (人間の通常の年齢、負の数を保存することは不可能)
    6. ID番号(第2世代ID番号は18桁で、IDカードにはXなどの文字が入っています)
    7. 加入時期(年、月、日の値のみを取得します)

    対応するテーブル作成ステートメントは次のとおりです。
    ここに画像の説明を挿入します

create table emp (
    id int comment '编号',
    workno varchar(10) comment '工号',
    name varchar(10) comment '姓名',
    gender char(1) comment '性别',
    age tinyint unsigned comment '年龄',
    idcard char(18) comment '身份证号',
    entrydate date comment '入职时间'
) comment '员工表';

これをターミナルに貼り付けて追加します。

root@ubuntu:~#
root@ubuntu:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.34-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myDatabase         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql>
mysql>
mysql> use myDatabase;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| myDatabase |
+------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| tb_user              |
+----------------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> create table emp (
    ->     id int comment '编号',
    ->     workno varchar(10) comment '工号',
    ->     name varchar(10) comment '姓名',
    ->     gender char(1) comment '性别',
    ->     age tinyint unsigned comment '年龄',
    ->     idcard char(18) comment '身份证号',
    ->     entrydate date comment '入职时间'
    -> ) comment '员工表';
Query OK, 0 rows affected (0.10 sec)

mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| emp                  |
| tb_user              |
+----------------------+
2 rows in set (0.01 sec)

mysql>
mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql>

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8

フィールドを追加: ALTER TABLE ttt ADD fff ttt COMMENT 'xxx';MySQL のフィールドは、テーブルの作成時に作成することも、テーブルの作成後に個別に追加することもできます。

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';

  • 例: 電子メールフィールドをテーブルに追加
# 列出所有数据库
show databases;
# 切换到指定数据库
use myDatabase;
# 查看当前使用的数据库
select database();
# 列出当前数据库所有表
show tables;
# 查看指定表结构
desc tb_user;
# 为指定表增加指定字段
alter table tb_user add email varchar(255);
# 查看指定表结构
desc tb_user;

ここに画像の説明を挿入します

フィールドのデータ型の変更 ( ALTER TABLE 表名 MODIFY) (主に列のデータ型の変更やデフォルト値の変更などに使用されます。既存の列の属性を変更する場合にのみ使用でき、列の名前は変更できません)

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

フィールド名とフィールドのデータ型を変更します ( ALTER TABLE 表名 CHANGE) (列のデータ型を変更したり、デフォルト値を変更したりできるだけでなく、列の名前も変更できます)

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

  • 例: emp テーブルのニックネーム フィールドをユーザー名に変更し、タイプを varchar(30) にします。
    ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
フィールドを削除 ( ALTER TABLE 表名 DROP 字段名;)

ALTER TABLE 表名 DROP 字段名;

例:
ここに画像の説明を挿入します
ここに画像の説明を挿入します

テーブル名の変更 ( ALTER TABLE 表名 RENAME TO 新表名)

ALTER TABLE 表名 RENAME TO 新表名

  • 例:
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
テーブルの削除 ( DROP TABLE [IF EXISTS] 表名;)

DROP TABLE [IF EXISTS] 表名;

  • 例:
    ここに画像の説明を挿入します
テーブルを削除して再作成します ( TRUNCATE TABLE 表名) (テーブル データをクリーンアップするために使用できます)

TRUNCATE TABLE 表名;

  • 例:
    ここに画像の説明を挿入します

DML (データ操作言語):表中データベース データの追加、削除、変更に使用されるデータ操作言語

データの追加INSERT
フィールドを指定します。INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

  • 例:
    従業員テーブルのすべてのフィールドにデータを追加します。
insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');
  • DataGrip を使用します:
    テーブルを右クリック --> 新規 --> クエリ コンソール:
    ここに画像の説明を挿入します
    上記の SQL ステートメントをテーブルに貼り付け、すべての SQL ステートメントを選択します (そうしないと、ソフトウェアはどの文を実行するかを認識できません)。次に、[実行:
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    クエリ]をクリックします。テーブル データを表示するには、テーブルをダブルクリックします。select * from xxx表クエリ テーブル データを表示または実行でき
    ここに画像の説明を挿入します
    ます。

    select * from emp;
    

    ここに画像の説明を挿入します

すべてのフィールド:INSERT INTO 表名 VALUES (值1, 值2, ...);

INSERT INTO 表名 VALUES (值1, 值2, ...);

  • 例:
insert into emp values(3,'3','Itcast','男',10,'12345','2000-01-01');

ここに画像の説明を挿入します

データをバッチで追加する

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

  • 例:

    insert into emp values(4,'4','Itcast','男',10,'123456789012345681','2000-01-01'),(5,'5','Itcast','男',10,'123456789012345682','2000-01-01');
    
    

    ここに画像の説明を挿入します

データの異なるバー (行) を区切るためにカンマが使用されていることに注意してください,

予防
  • 文字列および日付型のデータは引用符で囲む必要があります
  • 挿入されるデータのサイズは、フィールドの指定された範囲内である必要があります。
データの更新 (データの変更):UPDATE
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];(注: where 条件がない場合、テーブル全体のデータが変更されます)

UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];

  • 例:
    UPDATE emp SET name = 'Jack' WHERE id = 1;
    ここに画像の説明を挿入します
(特定のデータ) を削除します:DELETE
DELETE FROM 表名 [ WHERE 条件 ];(where条件を指定しない場合、テーブルデータ全体が削除されます)

DELETE FROM 表名 [ WHERE 条件 ];

  • 例1

    DELETE FROM emp WHERE name = 'Jack';
    

    ここに画像の説明を挿入します

  • 例 2

    DELETE FROM emp WHERE name = 'Jack';
    

    上記のステートメントはテーブル データ全体を削除します。
    ここに画像の説明を挿入します

DQL (データ クエリ言語): データベース内のテーブルのレコードをクエリするために使用されるデータ クエリ言語

  • 文法:

    SELECT
    	字段列表
    FROM
    	表名字段
    WHERE
    	条件列表
    GROUP BY
    	分组字段列表
    HAVING
    	分组后的条件列表
    ORDER BY
    	排序字段列表
    LIMIT
    	分页参数
    
  • データ準備
    テーブルの構造:

    create table emp (
        id int comment '编号',
        workno varchar(10) comment '工号',
        name varchar(10) comment '姓名',
        gender char(1) comment '性别',
        age tinyint unsigned comment '年龄',
        idcard char(18) comment '身份证号',
        workaddress varchar(50) comment '工作地址',
        entrydate date comment '入职时间'
    ) comment '员工表';
    

    テーブルデータ:

    INSERT INTO emp (id, workno, name, gender, age, idcard,workaddress, entrydate)
    VALUES 
    (1,'1','柳岩','女',20,'123456789012345678' ,'北京','2000-01-01'),
    (2,'2','张无忌','男',18,'123456789012345670' ,'北京' ,'2005-09-01'),
    (3,'3','韦一笑','男',38,'123456789712345670' ,'上海' ,'2005-08-01'),
    (4,'4','赵敏','女',18,'123456757123845670' ,'北京' ,'2009-12-01'),
    (5,'5','小昭','女',16,'123456769012345678' ,'上海' ,'2007-07-01'),
    (6,'6','杨道','男',28,'12345678931234567X' ,'北京' ,'2006-01-01'),
    (7,'7','范瑶','男',40,'123456789212345670' ,'北京' ,'2005-05-01'),
    (8,'8','黛绮丝','女',38,'123456157123645670' ,'天津' ,'2015-05-01'),
    (9,'9','范凉凉','女',45,'123156789012345678' ,'北京' ,'2010-04-01'),
    (10,'10','陈友谅','男',53,'123456789012345670' ,'上海' ,'2011-01-01'),
    (11,'11','张士诚','男',55,'123567897123465670' ,'江苏' ,'2015-05-01'),
    (12,'12','常遇春','男',32,'123446757152345670' ,'北京' ,'2004-02-01'),
    (13,'13','张三丰','男',88,'123656789012345678' ,'江苏' ,'2020-11-01'),
    (14,'14','灭绝','女',65,'123456719012345670' ,'西安' ,'2019-05-01'),
    (15,'15','胡青牛','男',70,'12345674971234567X' ,'西安' ,'2018-04-01'),
    (16,'16','周芷若','女',18,null ,'北京' ,'2012-06-01');
    
    

ここに画像の説明を挿入します

基本的なクエリ
指定された (単一または複数の) フィールドをクエリします。SELECT 字段1, 字段2, 字段3, ... FROM 表名;

SELECT 字段1, 字段2, 字段3, ... FROM 表名;


  • 次の指定されたフィールドをクエリします。

    select name,workno,age from emp;
    

    ここに画像の説明を挿入します

すべてのフィールドをクエリします: SELECT * FROM 表名;(開発中は直接書き込まないことをお勧めします*)
  • 例:
    SELECT * FROM emp;
    
    ここに画像の説明を挿入します
エイリアスの設定:SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;またはSELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

  • 例:

    SELECT workaddress as '工作地址' FROM emp;
    

    または:

    SELECT workaddress '工作地址' FROM emp;
    

    ここに画像の説明を挿入します

重複したレコードを削除します。SELECT DISTINCT 字段列表 FROM 表名;

SELECT DISTINCT 字段列表 FROM 表名;

  • 例:

    select distinct workaddress from emp;
    

    ここに画像の説明を挿入します

Escape:ESCAPEキーワードはエスケープ文字を定義します

SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
/以降は_ワイルドカードとして機能しません

SQL クエリでは、LIKE 演算子を使用して列内のパターンを検索します。このうち、パーセント記号 (%) とアンダースコア (_) は特殊文字です。パーセント記号はゼロ文字を含む任意の数の文字を表し、アンダースコアは単一の任意の文字を表します。

場合によっては、これらの特殊文字を含むデータを検索する必要があるかもしれません。これらの特殊文字を通常の文字として認識するには、ESCAPE キーワードを使用する必要があります。これは、LIKE パターンでパーセント記号またはアンダースコアを検索できるようにするエスケープ文字を定義します。

あなたが示した例では、ESCAPE '/'スラッシュ ( ) が/エスケープ文字として宣言されています。次に、WHERE 句では、name LIKE '/_张三'「Zhang San」で始まり、先頭に任意の文字が付くすべての名前を検索することを意味します。したがって、/_张三一致は「1 3」、「a 3」などになります。

一般に、ESCAPE '/'このクエリでは、後続のアンダースコアが LIKE モードで正しく解析できるように、スラッシュ ( /) をエスケープ文字として扱うことを明示的に指定することが追加されます。

条件付きクエリ:WHEREキーワード
文法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件演算子
比較演算子 関数
> 以上
>= 以上
< 未満
<= 以下
= 等しい
<> または != 等しくない
…と…の間 一定の範囲内(最小値、最大値を含む)
で(…) 複数選択後のリスト内の値
「いいね!」プレースホルダー あいまい一致 (_ は単一の文字に一致し、% は任意の数の文字に一致します)
無効である 無効である
論理演算子
論理演算子 関数
および または && そして (複数の条件が同時に満たされる)
または または || または (複数の条件のいずれか 1 つが true)
そうでない、または! いいえ、いいえ
# 查找年龄等于20的员工信息
select * from emp where age = 20;

# 查找年龄等于20的员工信息
select * from emp where age < 20;

# 查找身份证号为null的员工信息
select * from emp where idcard is null;

# 查找身份证号不是null的员工信息
select * from emp where idcard is not null;

# 查找年龄不等于88的员工信息
select * from emp where age != 88;
select * from emp where age <> 88;

# 查询年龄在15到20岁之间的员工信息
select * from emp where age > 15 and age < 20;
select * from emp where age > 15 && age < 20;
# 注意between为闭区间
select * from emp where age between 15 and 20;

# 查询性别为女且年龄小于25岁的员工
select * from emp where gender = '女' and age < 25;
select * from emp where age in(18,19,40);

# 查询姓名为两个字的员工信息
select * from emp where name like '__';

# 查询身份证号最后一位为X的员工信息
select * from emp where emp.idcard like '%X';
select * from emp where emp.idcard like '_________________X';

ここに画像の説明を挿入します

集計クエリ (集計関数) (count、max、min、avg、sum) (データの列を全体として扱い、垂直方向の計算を実行します)
一般的な集計関数
関数 関数
カウント 総数
最大 最大値
最小値
平均 平均値
文法

SELECT 聚合函数(字段列表) FROM 表名;

注: すべての null 値は、集計関数の計算には関与しません。
-- 统计企业员工数量(注意:不会统计字段值为null的行,所以不要把可能为null的字段来用于统计)
SELECT count(*) FROM emp;
SELECT count(id) FROM emp;

-- 统计员工的平均年龄
SELECT avg(age) FROM emp;

-- 统计员工的最大年龄
SELECT max(age) FROM emp;

-- 统计员工的最小年龄
SELECT min(age) FROM emp;

-- 统计西安地区的年龄之和
SELECT sum(age) FROM emp where workaddress = '西安';

グループクエリ:GROUP BYキーワード、HAVINGキーワード (ASキーワードでエイリアスを設定可能)
文法

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];

どこにあるかと持っているの違い
  • where はグループ化の前にフィルタリングを行い、where 条件が満たされない場合はグループ化は実行されず、have はグループ化後に結果をフィルタリングするという実行タイミングが異なります。
  • 判定条件が異なり、集計関数は判定できないが、ある場合は判定できる。
-- 根据性别分组,统计男性和女性数量(只显示分组数量,不显示哪个是男哪个是女)
select count(*) from emp group by gender;

-- 根据性别分组,统计男性和女性数量(会显示哪个是男,哪个是女)
select gender, count(*) from emp group by gender;

-- 根据性别分组,统计男性和女性的平均年龄
select gender, avg(age) from emp group by gender;


-- 统计根据工作地址分组的人数
select workaddress, count(*) from emp group by workaddress;

-- 统计年龄小于45,根据工作地址分组的人数
select workaddress, count(*) from emp where age < 45 group by workaddress;

-- 统计年龄小于45,根据工作地址分组的人数,输出员工数量大于等于3的组(可设置别名as,as关键字可省略)
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;
select workaddress, count(*) as address_count from emp where age < 45 group by workaddress having address_count >= 3;
予防
  • 実行順序: ここで > 集計関数 > を持つ
  • グループ化後、クエリされるフィールドは通常、集計関数とグループ化フィールドであり、他のフィールドをクエリしても意味がありません。
ソートクエリ: ORDER BY キーワード、ASC: 昇順 (デフォルト)、DESC: 降順
文法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

並べ替え
  • ASC: 昇順 (デフォルト)
  • DESC: 降順
-- 根据年龄升序排序
SELECT * FROM emp ORDER BY age ASC;
SELECT * FROM emp ORDER BY age;

-- 根据入职时间降序排序
SELECT * FROM emp ORDER BY entrydate desc ;

-- 两字段排序,根据年龄升序排序,入职时间降序排序
SELECT * FROM emp ORDER BY age ASC, entrydate DESC;
予防

複数フィールドの並べ替えの場合、最初のフィールドの値が同じ場合にのみ、2 番目のフィールドが並べ替えられます。

ページネーション クエリ: LIMIT キーワード
文法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

-- 查询第一页数据,展示10条
SELECT * FROM emp LIMIT 0, 10;
-- 查询第一页时,索引可省略
SELECT * FROM emp LIMIT 10;

-- 查询第二页
SELECT * FROM emp LIMIT 10, 10;
予防
  • 開始インデックスは 0 から始まります。開始インデックス = (クエリ ページ番号 - 1) * 各ページに表示されるレコード数
  • ページング クエリはデータベースの方言です。データベースが異なれば実装も異なります。MySQL は LIMIT です。
  • データの最初のページをクエリする場合は、開始インデックスを省略して、単に LIMIT 10 と省略することができます。
DQL クエリ ステートメントの概要演習

ここに画像の説明を挿入します
ここに画像の説明を挿入します

5 番目の質問は曖昧である可能性があることに注意してください。

これには次の 2 つの解釈が考えられます。

1. emp テーブルの性別が男性、年齢が 20 ~ 40 歳の最初の 5 人の従業員の情報をクエリします。クエリの結果を年齢の昇順に並べ替えます。年齢が同じ場合は、次のように並べ替えます。参加時間の昇順です。
2. 1. empテーブルの性別が男性、年齢が20~40歳(20~40歳も含む)であることを問い合わせ、年齢の昇順にソート、年齢が同じ場合は加入時間の昇順にソート最初の 5 人の従業員の情報を取得します。

最初の理解として、「性別が男性、年齢が 20 ~ 40 歳 (両端を含む) である emp テーブルの最初の 5 人の従業員の情報をクエリします。クエリ結果を年齢の昇順に並べ替えます。年齢がSQL の制限のため、最初の 5 項目を直接取得して並べ替えることはできませんが、次のようにサブクエリを通じて実現できます。

SELECT *
FROM (
    SELECT *
    FROM emp
    WHERE sex = '男' AND age BETWEEN 20 AND 40
    LIMIT 5
) AS subquery
ORDER BY age ASC, join_time ASC;

2 番目の理解については、「emp テーブルの性別を男性としてクエリし、年齢は 20 歳から 40 歳の間 (20 歳と 40 歳を含む)。年齢で昇順に並べ替えます。年齢が同じ場合は結合して並べ替えます。」最初の 5 人の従業員の情報を取得するために時間を昇順で取得します。」これは、問題は、最初に並べ替えてから最初の 5 つのレコードを取得することです。対応する SQL ステートメントは次のとおりです。

SELECT *
FROM emp
WHERE sex = '男' AND age BETWEEN 20 AND 40
ORDER BY age ASC, join_time ASC
LIMIT 5;
DQLステートメントの書き込み順序と実行順序

ここに画像の説明を挿入します

DQL書く順番:SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
DQL の実行シーケンス:FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
例: DQL の実行順序を検証する
-- 查询年龄大于15的员工的姓名、年龄,并根据年龄进行升序排序
select name,age from emp where age > 15 order by age asc ;
-- 验证执行顺序
select e.name e_name,e.age e_age from emp e where e.age > 15 order by e_age asc ;

DCL (データ制御言語): データベース ユーザーの管理とデータベース アクセス許可の制御に使用されるデータ制御言語

ユーザーを管理する
ユーザーに問い合わせる
USE mysql;
SELECT * FROM user;

ここに画像の説明を挿入します
localhost と root の意味は、この root はローカル マシン経由でのみデータベースにアクセスでき、リモートからはデータベースにアクセスできないということです。

ユーザーを作成

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

ユーザーのパスワードを変更する

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

ユーザーを削除する

DROP USER '用户名'@'主机名';

-- 创建用户arnoldtest1,只能在当前主机localhost访问,密码123456

# create user 'arnoldtest1'@'localhost' identified by 'Reaishenghuo';
-- 提示:[2023-10-02 02:07:26] [HY000][1819] Your password does not satisfy the current policy requirements
-- 用:SHOW VARIABLES LIKE 'validate_password%';查看当前密码规则
SHOW VARIABLES LIKE 'validate_password%';
# validate_password.changed_characters_percentage,0
# validate_password.check_user_name,ON
# validate_password.dictionary_file,""
# validate_password.length,8
# validate_password.mixed_case_count,1
# validate_password.number_count,1
# validate_password.policy,MEDIUM
# validate_password.special_char_count,1
CREATE USER 'arnoldTest1'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';

-- 创建用户arnoldTest1,能在任意主机访问
create user 'arnoldTest1'@'%' identified by 'Reai#2023shenghuo';

-- 修改密码
alter user 'arnoldTest1'@'localhost' identified with mysql_native_password by 'Reai#2024shenghuo';

-- 删除用户
drop user 'arnoldTest1'@'localhost';
drop user 'arnoldTest1'@'%';
予防
  • ホスト名には % をワイルドカードとして使用できます。この時点で作成されたアカウントは、どのホストからでもデータベースにアクセスできます。
  • このタイプのSQL開発者は比較的少数の操作を行い、主に次DBA(Database Administrator数据库管理员)を使用します。
権限制御
共通の権限
権限 説明する
すべて、すべての特権 すべての権限
選択する クエリデータ
入れる データの挿入
アップデート データを変更する
消去 データを削除する
変更 テーブルの変更
落とす データベース/テーブル/ビューの削除
作成する データベース/テーブルの作成

その他の権限については、権限リストをご覧ください。

クエリ権限:SHOW GRANTS FOR

SHOW GRANTS FOR '用户名'@'主机名';

権限の付与:GRANT キーワード

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

権限の取り消し:REVOKEキーワード

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

予防
  • カンマで区切られた複数の権限
  • 認可する場合、データベース名とテーブル名を*ワイルドカードで使用して、すべてを表すことができます。

-- 创建用户
CREATE USER 'arnoldTest'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';

-- 查询权限
SHOW GRANTS FOR 'arnoldTest'@'localhost';

-- 授予权限(授予'arnoldTest'@'localhost'用户对myDatabase所有表的所有权限)
grant all on myDatabase.* to 'arnoldTest'@'localhost' ;

-- 撤销权限
revoke all on myDatabase.* from 'arnoldTest'@'localhost' ;

-- 删除用户
drop user 'arnoldTest'@'localhost';


アクセス許可を付与または取り消すときに、なぜ古いプロンプトが表示されるのかわかりません。

myDatabase> grant all on myDatabase.* to 'arnoldTest'@'localhost'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
myDatabase> revoke all on myDatabase.* from 'arnoldTest'@'localhost'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'

不可解な問題については、後で話しましょう。

おすすめ

転載: blog.csdn.net/Dontla/article/details/133438086