1. ホーム
  2. mysql

肝試し3万語❤️最もハードコアな丨Mysql知識体系、コマンドのフルセット【おすすめコレクション】❤️|電子書籍ストア「BookLive!

2022-02-11 23:20:38

???? 著者のホームページです。 トマトはありません

???? あらすじは? CSDNブログエキスパート ? CSDNブロガー、情報技術シンクタンク公開作家 ✌履歴書テンプレート、PPTテンプレート、学習教材、面接問題集、技術支援 [... ついてきてください、すべてあなたのためです]。

????  ようこそ クドい?ブックマーク ⭐メッセージ  ????   

???? でカタログ化されたハードコアな記事を1年分まとめたもの。 https://t.1yb.co/zHJ


ディレクトリ

1. MySQLデータベースの紹介

データベースとは

役割

共通データベース

mysqlデータベースを知る

2. MySQLのインストール

MacシステムでのMySQLのインストール

Homebrew for Mac を使って mysql をインストールする。

WindowsでのMySQL 5.7.17のインストール

 3. 基本的なmysqlのコマンドを知る、操作する

mysqlにログインするには、ターミナルで次のコマンドを入力します。

現在の mysql にあるすべてのライブラリを表示する

操作が必要なライブラリを選択し、ライブラリを開く

テーブルのデータを表示する

ライブラリとテーブルの概念と関係

独自のライブラリを作成するには?

すべてのライブラリを表示

テーブルを作成するためのシンタックス

データの追加

4. MySQLの基本操作

使用方法 :

SQL ( Structure query language ) 構造化問い合わせ言語

SQL文のショートカットキー

1. コマンドラインからMySQLに接続する

2. データベース操作

3. データテーブルの操作

4. データ操作 追加、削除、チェック

MySQLを終了する

5. MySQL のデータ型

I.MySQLのデータ型

1. 文字列データ型

2. 値の種類

3. 日付と時刻の種類

4. バイナリデータ型

2. テーブルフィールドの制約

III. MySQL の演算子

IV. 主キー

6. MySQL データベースとデータテーブルの操作

データベース操作

1. データベースの作成

2. すべてのライブラリを表示

3. ライブラリを開く/ライブラリに移動する/ライブラリを選択する

4. ライブラリの削除

データテーブルの操作

1. テーブルの作成

2. テーブル構造の変更

3. テーブル名の変更

4. テーブルのセルフインクリメントの値を変更する

5. テーブルエンジンの変更

6. テーブルの削除

 7. Mysql データベーステーブルエンジンと文字セット

1. クライアントからのリクエストを処理するサーバー

2. ストレージエンジン

3. MyISAM と InnoDB のテーブルエンジンの違い

1)トランザクションのサポート

2) ストレージ構造

3) テーブルロックの違い

4) テーブルの主キー

5) テーブルの具体的な行数

6) CURD操作

7) 外部キー

8) クエリーの効率化

9) MyISAMとInnoDBそれぞれのアプリケーションシナリオ

4. 文字セットと文字化けについて学ぶ

文字セットの紹介

5. MySQLにおけるutf8とutf8mb4

キャラクタセットビューイング

8. MySQL データ操作 DML

データの追加

データの修正

データの削除

9. MySQL データクエリ SQL

基本的なクエリ

WHERE 条件付きクエリ

同類項

グループBYのグループ化

節を持つ

ソート順

データのページングを制限する

10. Mysqlデータベースのインポート、エクスポート、および認証

データエクスポート

1. データベースデータエクスポート

2. データベース内のテーブルをエクスポートする

データのインポート

エクスポートされたSQLファイルのデータをmysqlデータベースにインポートします。

エクスポートされたテーブルのSQLをデータベースにインポートする

パーミッションの管理

ユーザーを作成するための構文フォーマットです。

ユーザーの削除


1. MySQLデータベース入門

データベースとは

データベースとは、データをデータ構造に従って整理、保存、管理する倉庫のことです。専門的なデータベースは、データの作成、アクセス、管理、検索に特化したソフトウェアで、ファイルの読み書きを行って自分でデータを管理するよりも簡単、迅速、かつ安全にデータを管理することができます。

機能概要

  • データの永続的な保存
  • データの保存と照会が容易で、高速、安全、かつ利便性が高い

  • 同時アクセスに対応可能

  • 権限管理のための、より安全なアクセスメカニズム

一般的なデータベース

データベースには大きく分けて2種類あり、1つはリレーショナルデータベースです。もう一つは、非リレーショナルデータベースと呼ばれるカテゴリーです。

  • リレーショナルデータベース MySQL、Oracle、PostgreSQL、SQLserver 。
  • 非リレーショナルデータベース。Redisインメモリデータベース、MongoDBドキュメントデータベース。

mysqlデータベースを知る

  • MySQL は最も一般的なリレーショナルデータベース管理システムです。
  • mysqlのインストール データベースに関するいくつかの概念
  • データベース データベース データ テーブル テーブル データ フィールド
  • 行番号
  • 列数

2. MySQLのインストール

Mac お使いのシステムにインストールする MySQL

使用方法 マック Macで ホームブリュー 進捗状況 マイスル のインストール

1. mysqlのダウンロードとインストール

brew install [email protected]

   以下の画面が表示されれば、ダウンロードとインストールが正常に行われたことになります。

2. mysqlの起動 mysql.server start

3. 3.mysqlをシャットダウンする mysql.server stop

4. mysqlにログインする mysql -u root -p

MySQL 5.7.17のWindowsへのインストール

1. MySQLのウェブサイトhttp://dev.mysql.com/downloads/mysql/ からZIPインストーラーをダウンロードする(2番目:Windows (x86, 64-)

ビット)、ZIPアーカイブ)。

2. ダウンロード後、解凍し、インストールしたいディレクトリに置く。

例:D: \MySQL5.7mysql-5.7.17-winx64

3. 3. my.ini設定ファイルを新規に作成します。元のmy-default.ini設定ファイルは単なるテンプレートなので、中身を変更しないでください。my.iniの中身は以下の通りです。

[mysql] default-character-set=utf8 です。

[mysqld] port = 3306 basedir=D:\MySQL5.7mysql-5.7.17-winx64 datadir=D:\MySQL5.7mysql-5.7.17- winx64/data max_connections=200 character- set-server=utf8 default-storage-engine=INNODB explicit_defaults_for_timestamp=true

4. インストールパスの下に、新しい空のデータフォルダを作成します。

5. 5. 管理者としてcmdを実行し、binディレクトリに移動し、mysqld --initialize-insecure --user=mysqlコマンドを実行します。このコマンドは実行しないでください。

  インストール完了後、サービスが開始されない。

6. 管理者用コマンドウィンドウのbinディレクトリで、mysqld installコマンドを実行し、サービスをインストールします。完了すると、インストールが成功したことを示すプロンプトが表示されます。

7. 管理者用cmdウィンドウのbinディレクトリにあるまま、net start mysqlコマンドを実行してMySQLサービスを起動する。

8. 8. 環境変数に "D:\MySQL5.7mysql-5.7.17-winx64bin" を追加するよう修正します。

9. 通常のcmdウィンドウでbinディレクトリに移動し、mysql -u root -p コマンドをデフォルトでパスワード無しで実行し、Enterします。

 3. 基本的なmysqlのコマンドを知り、操作する

ライブラリとテーブルの概念と関係を認識する mysqlの基本コマンド:ログイン、ライブラリ表示、ライブラリ選択、テーブル表示、ライブラリ作成、テーブル作成、データ追加、データ問い合わせ。

mysqlにログインするには、ターミナルで以下のコマンドを入力してログインします。

mysql -u root -p

    MacBook-Pro:~ yc$ mysql -u root -p

Enter password:

Welcome to the MySQL monitor. commands end with ; or \g.

Your MySQL connection id is 4

Server version: 5.7.28 Homebrew

Copyright (c) 2000, 2019, 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.

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 のすべてのライブラリを表示する

ライブラリ==>データベース==> フォルダのように、ライブラリは内部に多くのテーブルを格納することができます)

データベースを表示します。

+--------------------+

| データベース

+--------------------+

| information_schema

| mysql

| パフォーマンススキーマ

| sys

+--------------------+

4行セット (0.00秒)

作業したいライブラリを選択し、開く

use mysql; 現在のライブラリにあるすべてのデータテーブルを表示します。

テーブルを表示します。

+---------------------------+

| Tables_in_mysql

テーブルのデータを表示する

# ユーザーテーブルの全データの全フィールドを表示する select * from user;

# ユーザーテーブルの全てのデータのホストとユーザーのフィールドカラムを表示します select host,user from user;

+ -----------+---------------+

| ホスト|ユーザー

+-----------+---------------+

| ローカルホスト | mysql.session|。

| localhost | mysql.sys |...

| ローカルホスト | ルート

+-----------+---------------+

ライブラリとテーブルの概念と関係

ライブラリはフォルダのようなもので、1つのライブラリには多くのテーブルを持つことができます。テーブルはエクセル・シートのファイルのようなものです。各テーブルには、たくさんのデータを保存することができます。

mysqlには多くの異なるライブラリがあり、ライブラリには多くの異なるテーブルがあり、テーブルには多くの異なるカラム(フィールド)があり、テーブルには構造に基づいて多くのデータが格納されています。

独自のライブラリを作成するにはどうすればよいですか?

データベースを作成する ライブラリ名 default charset=utf8; ライブラリを作成する

+---------------------------+

| columns_priv

| db

| エンジンコスト

....

| 時間帯名

| 時間帯の遷移

| タイムゾーン遷移タイプ

| ユーザー

+---------------------------+

セットで31行 (0.00秒)

create database tlxy default charset=utf8;

-- クエリ OK、影響を受ける行は 1 行 (0.01 秒)

すべてのライブラリを表示

データベースを表示します。

+--------------------+

| データベース

+--------------------+

| information_schema

| mysql

| パフォーマンススキーマ

| sys

| tlxy

+--------------------+

5列セット (0.00秒)

-- ライブラリに入るにはtlxyを使用します。

テーブルを作成するための構文

create table テーブル名( フィールド名 type フィールド制約, フィールド名 type フィールド制約, )engine=innodb デフォルト)

charset=utf8です。

-- create user table create table user()

    名前 varchar(20)。

    age int,

    性数(1)

) engine=innodb default charset=utf8;

-- クエリ OK、影響を受ける行数は 0 です (0.16 秒)

データの追加

-- ユーザーテーブルに名前、年齢、性別のデータを追加する。

insert into user(name,age,sex) values('admin',26,'Male'); -- クエリ OK, 1 row affected (0.00 sec)

insert into user(name,age,sex) values('Zhang San',22,'Female');

テーブルのデータを表示する

select * from user; +--------+------+------+ |name |age |sex | +--------+------+------+ |admin| 26|male | |zhang san | 22|female | +--------+------+ 2 rows in set (0.00 sec.)

4. MySQLの基本操作

使用方法

  • 方法1:コマンドラインからコマンドを入力する(コマンドの習得に役立つ)
  • 方法2:Navicatなどのグラフィカルインターフェースツールによる方法 (習得後に使用)
  • 方法3:プログラミング言語(python, php, java, go...)経由 mysqlコマンドの実行

SQL ( Structure query language ) 構造化問い合わせ言語

SQL言語は4つのパートに分かれています。DDL(定義)、DML(操作)、DQL(クエリ)、DCL(制御)

SQL文のショートカットキー

\Ÿ 書式付き出力(テキスト形式、縦表示) Ÿ サーバーサイドの情報を見る

\コマンド入力操作の終了

\Ÿ 現在のSQLコマンドラインモードを終了します。

\ヘルプを表示する

データベースを操作する手順

接続、ライブラリを開く、操作する、終了を閉じる

1. コマンドラインからMySQLに接続する

データベース構文の特徴

1) SQL文は改行可能であり、セミコロンで終了すること

2) コマンドは大文字と小文字を区別しない。キーワードや関数は大文字で書くことをお勧めします。

3) プロンプトが '>' の場合、'Enter' を入力する必要があります。

4)タイプミスの後の改行は変更できない、キャンセルするには୧⃛(๑⃙⃘◡̈๑⃙⃘)

2. データベース操作

  • データベースの表示 データベースを表示します。
  • データベースを作成する create database library name default charset=utf8;
  • データベースを削除する データベースライブラリ名を削除する
  • データベースを開くには、ライブラリ名を使用します。

3. データテーブルの操作

データベース管理システムでは、多くのライブラリが存在し、各データベースは複数のデータテーブルを含むことができます。

テーブルの表示 : テーブルを表示します。

テーブルの作成 : create table テーブル名 (フィールド名1型, フィールド名2型) engine=innodb default charset=utf8; create table テーブルが存在しない場合は作成し、存在する場合はこのコマンドを実行しないでください。

テーブル名(フィールド1タイプ、フィールド2タイプ)が存在しない場合、テーブルを作成します。

create table if not exists users(

id int not null primary key auto_increment, name varchar(4) not null,

age tinyint,

せいめいのこうもく

) engine=innodb default charset=utf8;

テーブルを削除する : drop table テーブル名です。

テーブルの構造 : desc テーブル名。

ビルド・タグラインを表示する 作成したテーブルのユーザーを表示します。

4. データ操作 追加・削除・チェック

挿入

テーブル名(field1,field2,field3) 値(value1,value2,value3)に挿入します。

テーブル名(フィールド1、フィールド2、フィールド3)に値を挿入(a値1、a値2、a値3)、(b値1、b値2、b値3); クエリ

テーブル名から * を選択します。

テーブル名からフィールド1,フィールド2,フィールド3を選択します。

select * from table name where field=some value;

修正

update テーブル名 set field=some value where condition;

update table name set field1=value1,field2=value2 where condition;

update table name set field=field+value where condition;

削除

delete from table name where field=some value;

IV. MySQL を終了する

exit; または quit。

5. MySQL データ型

I.MySQLのデータ型

データ型とは、カラムに格納できるデータの種類と、そのデータが実際にどのように格納されるかを定義する基本的なルールです。 データ型は、データカラムの列に格納できるデータを制限するものです。例えば、数値データ型のカラムは数値型のデータのみを受け入れることができます。テーブルを設計する際には、使用するデータ型に特別な注意を払う必要があります。間違ったデータ型を使用すると、アプリケーションの機能や性能に重大な影響を与える可能性があります。

データを格納する列を変更することは、些細なことではありません(変更するとデータが失われる可能性があります)。

データ型:整数、浮動小数点、文字列、日付、など。

1. 文字列データ型

最も一般的なデータ型は、文字列データ型です。名前、住所、電話番号、郵便番号などの文字列を格納する。どのような形式の文字列データ型を使用する場合でも、文字列の値は引用符で囲む必要があります。

固定長文字列:char

1. テーブル作成時に指定した長さの固定長文字列を受け付けます。固定長カラムは、指定された長さを超える文字数のデータを格納することはできません。

2. 長さを指定すると、データ用に一定の記憶領域が確保される char(7) 実際に挿入される文字数にかかわらず、7文字分の位置を占有する

可変長文字列 varchar

可変長文字列の格納 varchar(7) 実際に4文字を挿入する場合、4文字の位置を占めるだけですが、当然ながら挿入するデータの長さは7文字を超えることはできません。

注意事項

可変長のデータ型は柔軟性があるのに、なぜ固定長のデータ型を使用するのですか?回答:パフォーマンスのため、MySQL は固定長カラムを可変長カラムよりはるかに高速に処理します。

テキスト 可変長テキスト型ストレージ

2. 値の種類

MySQL はいくつかの数値データ型をサポートしており、それぞれが異なる範囲の値を保存します。サポートされる値の範囲が大きくなるほど、より多くのストレージスペースが必要となる

文字列とは異なり、値は引用符で囲むべきではありません。

 decimal(5, 2) は、値が全部で5ビットで、10進数が2ビットを占めることを意味します。 tinyint 1バイト(8ビット) 0~255 です。-128, 127 int 4バイト。-21 億、21 億。0〜42億 フロート

MySQL には通貨を格納するための特別なデータ型はなく、一般的には DECIMAL(8, 2) が使用されます。

符号付きまたは符号なし

すべての数値データ型(BITとBOOLEANを除く)は、符号付きまたは符号なしが可能です。

  • 符号付き数値列は、正または負の値を格納することができる
  • 符号なし数値カラムは、正の値のみを格納することができます。
  • デフォルトは符号付きですが、負の値を格納する必要がないことがわかっている場合は、UNSIGNED キーワードを使用できます。

注意事項

郵便番号が 01234 のような数値型として保存されている場合、文字列型を使用する必要があるのに、値 1234 を保存します。 電話番号を保存するために使用すべきものは何ですか?

3. 日付と時刻の型

MySQLは、日付と時刻の値を保存するために特別なデータ型を使用します。

 datetime 8 バイト 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

4. バイナリデータ型

バイナリデータ型は、画像、マルチメディア、ワープロ文書など、あらゆるデータ(バイナリ情報でも可)を格納できる。

II. テーブルのフィールド制約

  • unsigned 符号なし(数値型の場合は正の数、書かない場合は正の数と負の数の両方を意味する) フィールド型の後に括弧を付けて幅を制限する。
  • char(5). varchar(7) 文字型の後に制限を加える 文字列の長さを示す。
  • int(4) には意味がなく、デフォルトの符号なし int は int(11)、符号あり int(10) です。
  • int(4) unsigned zerofill は、int 型に先行するゼロが与えられている場合にのみ、その幅を設定する意味があります。
  • not nullはNULLにできません。データベースを操作する際にフィールドに入力されたデータがNULLの場合、エラーを報告します default set default
  • 主キー 主キーはNULLにはできず、一意である。通常、auto_incrementと組み合わせて使われる。 auto_increment 自己インクリメント属性として定義され、通常、主キーに使われ、値は自動的に1ずつ増加される。
  • ユニーク ユニークなインデックス(データは重複できない:ユーザー名)は、クエリーのスピードを上げることができるが、挿入や更新のスピードが遅くなる可能性がある

3. MySQL オペレータ

  • 算術演算子。+, -, *, /, %
  • 比較演算子。=、>、<、>=、<=、!
  • データベース固有の比較: in, not in, is null, is not null, like, between, and
  • 論理演算子:and, or, not
  • like:特殊記号 % と _ をサポート。

ここで、%は任意の数の文字、_は任意の一文字を意味します。

IV. 主キー

1. テーブルの各行は、それ自身を一意に識別するカラムを持つ必要があり、2つのレコードが重複しないこと、および2つの行が同じ主キー値を持たないことを記録するために使用されます。

2. 主キーは必ず定義すること 主キーは必ずしも必要ではありませんが、ほとんどのデータベース設計者は、後でデータ操作や管理を容易にするために、作成する各テーブルに主キーを持たせるようにすべきです。

必要条件

  • テーブルにレコードが挿入されたら、主キーは変更されないことが理想的です。
  • NULLは許されない
  • 変更の可能性がある主キーカラムの値は使用しないでください。

(例えば、プロバイダを特定するために名前を主キーにしている場合、そのプロバイダが合併して名前が変わると、この主キーを変更しなければなりません)。

  • 自己インクリメントの整数型。データを挿入する際、データベースは自動的に各レコードに自己増加型整数を割り当てるので、主キーの重複や主キーの事前生成の心配は全くありません。
  • 複数のカラムを共同主キーとして使用することもできますが、共同主キーは一般的には使用されません。複数のカラムを主キーとして使う場合、すべてのカラムの値の組み合わせは一意でなければならない

6. MySQLデータベースとデータテーブルの操作

データベース操作:データベースの作成、データベースの削除

データテーブル操作:データテーブルの作成、データテーブルの変更(テーブル構造)、データテーブルの削除

データベース操作

1. データベースの作成

   # mysqlデータベースをリンクした後、mysqlを入力すると、データを操作することができます。

# 1. ライブラリを作成する

データベースが存在しない場合は、tlxy default charset=utf8を作成します。

-- 1. データベース tlxy が存在しない場合、データベースを作成する(存在する場合は除く)

-- 2. tlxy データベースを作成し、文字セットを utf8 に設定します。

-- 3.特別な場合を除き、文字セットはutf8またはutf8mb4が必要です。

2. すべてのライブラリを表示

# 1. すべてのライブラリを表示する データベースを表示する。

3. ライブラリを開く/ライブラリに移動する/ライブラリを選択する

# use library name use tlxy

4. ライブラリの削除

ライブラリの削除はリスクが高いので、大胆にやる必要があります(ハハハ、大したもんだ、トマトに逃げられたか)。

# ライブラリを削除すると、ライブラリ内のデータはすべてディスクから削除されます。

データテーブルの操作

1. テーブルの作成

構文形式です。

create table テーブル名 (フィールド名, 型, [フィールド制約],...) ; インスタンス:

# 以下にユーザーのテーブルを作成します create table users(

-- IDフィールドを作成、正の整数、NULLなし、主キー、オートインクリメント

id int unsigned not null primary key auto_increment,

-- 名前を格納するフィールドを作成します。文字列型、最大長5文字、not null ユーザー名 varchar(5) not null。

-- パスワードを保存するためのフィールドを作成します。

password char(32) not null,

-- 年齢フィールドを作成、nullではない、デフォルトは20

  age tinyint not null デフォルト20

) engine=innodb default charset=utf8;

# View table structure desc users;

# View table build statements

create table usersを表示します。

テーブルを作成するための基本原則。

  • テーブルとフィールドの名前は、できるだけ命名規則に準拠し、理想的には「名前の意味がわかる」ようにする。
  • テーブル内のデータは一意にラベル付けされていること、すなわち主キーが定義されていること。例外なく、主キーは数値であり、自己インクリメントであること。
  • テーブルのフィールドに対応する型は合理的に設定され、合理的な長さに制限される
  • テーブルエンジンは innodb を使用することが推奨され、特別な場合を除いて utf8 または utf8mb4 文字エンコーディングが必要です。

2. テーブルの構造を変更する

構文形式:alter table テーブル名 action (変更するオプション)

フィールドの追加

# syntax:alter table テーブル名 add added field information - users テーブルに num フィールドを追加します。

alter table users add num int not null;

-- 指定されたフィールドの後にフィールドを追加する ユーザーテーブルの年齢の後に電子メールフィールドを追加する alter table users add email varchar(50) after age;

-- ユーザーテーブルの指定されたフィールドの後にフィールドを追加する 年齢フィールドの後に電話を追加する 変数テーブルユーザー追加電話char(11) not null 年齢後。

-- テーブルの一番上にフィールドを追加する

alter table users 最初に aa int を追加します。

フィールドの削除

   # delete field alter table table name drop 削除するフィールドの名前 alter table users drop aa;

フィールドを変更する

構文形式:alter table テーブル名変更|modify 変更されたフィールド情報変更。フィールド名を変更することができます。

を変更します。フィールド名を変更できません。

# テーブルの num フィールドの型を変更する場合は、テーブル名を変更せずに modify を使用します。

alter table users modify num tinyint not null default 12;

# modify table users change num field to int and field name to nn alter table users change num mm int;

# 注意:一般的に、特別な要件がない限り、テーブル構造を簡単に変更しないでください。

3. テーブル名の変更

# syntax:alter table 元のテーブル名を新しいテーブル名に変更する

4. テーブルのセルフインクリメント値を変更する

# 通常の場合、auto_increment はデフォルトで 1 から増加し続ける alter table users auto_increment = 1000;

5. テーブルエンジンの変更

# テーブルを定義する際には、テーブルエンジンを innodb にすることが推奨されます。

# テーブルのビルドステートメントを見て、現在のテーブルエンジンを取得します。

mysql> show create table usersG;

1.行 ******************************************************************************************************************************************************* 1.

       テーブル:ユーザー

テーブルを作成します。CREATE TABLE `users` (

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8

セットで1行 (0.00秒)

# 現在のテーブルの状態情報を直接表示する

mysql> show table status from tlxy where name = 'users' \; ******************* 1.行 ******************** 1.

           名前:ユーザー

         エンジン:InnoDB

# テーブルエンジン文の修正

alter table users engine = 'myisam';

6. テーブルを削除する

drop table テーブル名

 7. Mysql データベーステーブルエンジンと文字セット

1. クライアントリクエストのサーバー処理

実は、クライアントプロセスとサーバープロセスがどのような方法で通信していても、最終的に達成されるのは クライアントプロセスがサーバープロセスに

テキストの一部( MySQL ステートメント)を受け取ると、サーバープロセスはそれを処理し、テキスト片(処理結果)をクライアントプロセスに送信します。 その後、サーバプロセスはクライアントにテキストを送信する

クライアントプロセスが送ったリクエストをサーバープロセスがどのように処理し、最終的な処理結果を出しているのでしょうか。クライアントはサーバーに追加、削除、確認などあらゆる要求を送ることができ、私たち

ここでは、より複雑なクエリーリクエストを例にして、一般的な処理を図解しています。

クエリキャッシングは時にシステムのパフォーマンスを向上させますが、このキャッシュを維持するために、毎回クエリのスローダウンを経験しなければならないなどのオーバーヘッドが発生することもあります

クエリキャッシュは、そのクエリキャッシュに対応するメモリ領域を維持するために、クエリ要求が処理された後に更新する必要があります。MySQL 5.7.20 からは、そうではなく

クエリキャッシュは推奨されており、MySQL 8.0 で削除されました。

2. ストレージエンジン

MySQL サーバは、データの保存と抽出操作をストレージ エンジンと呼ばれるモジュールにカプセル化しています。テーブルがレコードの行と列で構成されていることは知っていますが、これは論理的な概念です。レコードが物理的にどのように表現されるか、データがテーブルからどのように読み込まれるか、そしてデータが特定の物理ストレージにどのように書き込まれるかは、すべてストレージエンジンが担当することです。MySQL は異なる機能を実現するために様々なストレージエンジンを提供しており、異なるストレージエンジンによって管理されるテーブルの特定のストレージ構造は、使用されるアクセスアルゴリズムと同様に異なる場合があります。

ストレージエンジンはかつてテーブルプロセッサーと呼ばれ、上位からの指示を受け、テーブルのデータを取り出したり書き込んだりする機能を担っていた。

管理上の利便性から、実際のデータ保存を伴わない接続管理、クエリキャッシュ、構文解析、およびクエリ最適化を MySQL サーバ機能に、データへの実際のアクセスをストレージエンジン機能に分割することが行われています。様々なストレージエンジンは、上位の MySQLserver 階層に統一された呼び出しインターフェース(ストレージエンジン API とも呼ばれる)を提供し、これには "Read first contents of index", "Read next contents of index", "Insert record" などの何十もの基礎関数が含まれています。

MySQLサーバーはクエリの最適化が終わると、生成された実行プランに従って、基盤となるストレージエンジンが提供するAPIを呼び出し、データをフェッチしてクライアントに返すだけです。

MySQL は非常に多様なストレージエンジンをサポートしています。

データアーカイブのためのARCHIVE(行を挿入した後、行を変更することはできません)

BLACKHOLEは書き込み操作を破棄し、読み込み操作は空のコンテンツを返す

CSVは、個々のデータ項目をカンマで区切ってデータを格納する

FEDERATED リモートテーブルへのアクセスに使用

InnoDBトランザクションストレージエンジン、外部キー対応

MEMORYインメモリテーブル

MERGE は、複数の MyISAM テーブルからなるテーブルの集合を管理するために使用します。

MyISAM の主要な非トランザクションストレージエンジンです。

NDB MySQLクラスタ専用ストレージエンジン

3. MyISAM イノDB テーブルエンジンの違い

1)  トランザクションのサポート

MyISAMはトランザクションをサポートしませんが、InnoDBはサポートします。

トランザクション:データベース内のデータにアクセスし、更新する実行単位。物質的な操作では、すべて実行されるか、まったく実行されないかのどちらかである

2)  ストレージの構造

MyISAM: 各MyISAMは、ディスク上に3つのファイルとして保存されます。

  • .frmファイルには、テーブル構造が保存されています。
  • .MYDファイルは、データを格納します。
  • .MYIファイルは、インデックスを格納します。

InnoDB:保存用のファイルは大きく分けて2種類あります。

  • .frmはテーブル構造を格納する
  • .ibdにはデータとインデックスが格納されます(複数の.ibdファイル、または個別のテーブルスペースファイルが存在する場合もあります)。

3)  テーブルロックの違い

マイサム : テーブルレベルロックのみサポート ユーザーがmyisamテーブルを操作する場合、select, update, delete, insertステートメントは自動的にテーブルをロックし、ロック適用後にテーブルが挿入同時性を満たせば、テーブルの末尾に新しいデータを挿入することが可能です。

イノDB : トランザクションと行レベルロックのサポートはinnodbの最大の特徴です .

行ロックは、マルチユーザーによる同時処理を行うための新たな能力を劇的に向上させます。しかし、InnoDBの行ロックは、主キーが使用されているWHEREに対してのみ有効で、主キー以外が使用されているWHEREはテーブル全体をロックする。

4)  テーブルの主キー

MyISAM: インデックスや主キーがなくてもテーブルを存在させることができ、インデックスは行を保持するすべてのアドレスとなります。 InnoDB: 主キーまたは非Nullユニークインデックスが設定されていない場合、6バイトの主キーが自動的に生成され(ユーザには見えません)、そのデータは主インデックスの一部となり、追加インデックスは主インデックスの値を保持します。

InnoDBは、主キーの範囲が非常に広く、MyISAMの2倍まであります。

5)  テーブルの正確な行数

MyISAM: テーブルの総行数を保持し、テーブルから select count() した場合、その値を直接取り出します。 InnoDB: テーブルの総行数を保持しない。

(トラバースのみ可能)、select count() from table を使用すると、テーブル全体をトラバースすることになり、かなり時間がかかりますが、wehre 条件を追加すると

myisamもinnodbも同じように処理します。

6) CURD 操作方法

MyISAM: SELECTを多く実行する場合は、MyISAMを選択するのがよいでしょう。 InnoDB: INSERTやUPDATEを多く行うデータであれば、パフォーマンス上、InnoDBテーブルを使用した方が良い。データの多いテーブルを消去する場合は、truncate tableコマンドを使用するのがよい。

7)  外部キー

MyISAM: 非対応 InnoDB: 対応

8)  クエリーの効率性

MyISAMは比較的シンプルなので、効率性の面ではInnoDBよりも優れており、小規模なアプリケーションであればMyISAMの利用を検討することができます。

InnoDBにはトランザクションサポート、ストアドプロシージャ、ビュー、行レベルロックなど、独自の優れた機能が多数あり、並行処理が多い場合はMyISAMよりもInnoDBの方がはるかに良いパフォーマンスが得られると思うので、MyISAMエンジンの代替として検討することをお勧めします。

また、どのテーブルも万能ではなく、適切な種類のテーブルを適切な業務に使用することで、MySQL のパフォーマンスの利点を最大限に発揮することができます。複雑なWebアプリケーションでない、クリティカルでないアプリケーションであれば、まだMyISAMを検討し続けることができますので、この場合はご自身の判断でお願いします。

9 ) マイサム イノDB 両者の利用シーン

MyISAMは非トランザクションのテーブルを管理します。高速なストレージと検索、および全文検索機能を提供します。もしアプリケーションが大量の SELECT クエリを実行する必要がある場合は、MyISAM を選択するのが良いでしょう。 InnoDBは、トランザクションアプリケーションに使用され、ACIDトランザクションサポートを含む多くの機能を備えています。アプリケーションが多数の INSERT または UPDATE 操作を実行する必要がある場合は、InnoDB を使用する方がよく、複数ユーザーによる同時操作のパフォーマンスが向上します。InnoDBは現在、デフォルトで使用されています。

4. 文字セットと文字化けについて学ぶ

文字セット入門

コンピュータにはバイナリデータしか保存できないことが分かっていますが、では文字列はどのように保存するのでしょうか?もちろん、文字とバイナリデータのマッピングを作成することで、文字列を保存することができます。

この関係を確立するためには、少なくとも2つのことを把握する必要があります。

1.どの文字をバイナリデータに対応させたいか?

つまり、文字の範囲を明確に定義してください。

2. どのようにマッピングされるのですか?

文字をバイナリデータに対応付けることをエンコード、バイナリデータを文字に対応付けることをデコードともいう。文字集合の概念を抽象化して、ある範囲の文字の符号化規則を記述します。

一般的な文字セットについて見てみましょう。

ASCII文字セット

スペース、句読点、数字、大文字、小文字、そして目に見えない文字も含め、全部で128文字が含まれています。全部で128文字しかないので、1バイトで符号化することが可能であり、いくつかの文字の符号化方法について見ていく。

  • L' -> 01001100 (16進数: 0x4C、10進数: 76)
  • 'M' -> 01001101 (16進数:0x4D、10進数:77)

ISO 8859-1文字セット

256文字セットは、ASCII文字セットに西ヨーロッパで一般的な128文字(ドイツ語、フランス語のアルファベットを含む)を拡張したもので、1バイトを使って符号化することも可能です。この文字セットは、latin1という別名でも知られています。

GB2312文字セット

中国語のほか、ラテン語のアルファベット、ギリシャ語のアルファベット、日本語のひらがな・カタカナ、ロシアのキリル文字が含まれる。中国語の文字は6763個、その他の文字記号は682個あります。この文字セットはASCII文字セットとも互換性があるので、エンコードの仕方に少し違和感がある。

  • ASCII文字セットの場合、1バイトでエンコードされます。
  • それ以外の場合は、2 バイトのエンコーディングが使用されます。

このように、文字を表現するために必要なバイト数が変わることがある符号化方式を可変長符号化方式と呼びます。例えば、'love u'という文字列の場合、以下のようになります。

love」は2バイトでエンコードされており、16進数で0xCED2、「u」は1バイトでエンコードされており、16進数で0x75なので、合計すると0xCED275となります。

ヒント:1バイトが1文字を表しているのか、文字の一部を表しているのか、どうやって見分けるのでしょうか?ASCII文字セットには128文字しか含まれておらず、0から127を使えばすべての文字を表すことができることを忘れないでください。

GBK文字セット

GBK文字セットは、含まれる文字の範囲がGB2312文字セットを拡張したに過ぎず、符号化についてはGB2312と互換性があります。

utf8文字セット

地球上で想像できるすべての文字を収集し、常に拡張しています。この文字セットはASCII文字セットと互換性があり、1〜4バイトで文字を符号化する可変長符号化方式を採用しており、例えばこんな感じです。

  • L' -> 01001100 (16進数: 0x4C)
  • 'ah' -> 1110010110010110001010 (hex: 0xE5958A)

ヒント 実は、正確に言うと、utf8はUnicode文字セットのための1つのエンコーディング方式に過ぎず、Unicode文字セットはutf8を使ってエンコードすることができるのです。

utf8は1〜4バイトで、utf16は2〜4バイトで、utf32は4バイトで1文字を符号化します。Unicodeとそのエンコード方式についてのより詳細な知識は、本書の対象ではありませんので、オンラインで調べてください。MySQL はキャラクタセットとエンコーディング スキームの概念を区別しないので、後で話すときは、utf8、utf16、および utf32 を 1 つのキャラクタセットとして扱います。

同じ文字でも、文字セットが異なれば、符号化方式も異なる場合があります。例えば、ASCII文字セットに全く含まれていない中国語の文字「我」に対して、utf8とgb2312文字セットは、以下のように中国語の文字「我」を符号化します。

  • utf8エンコーディングです。111001101000100010010001 (3バイト、16進数で0xE68891)
  • gb2312エンコーディングです。1100111011010010 (2バイト、16進数は0xCED2)

5.MySQLのutf8 utf8mb4

utf8文字セットは1〜4バイトで文字を表現すると前述しましたが、一般的な文字の中には1〜3バイトで表現できるものもあります。そしてMySQLでは、キャラクタセットが示すように、文字に使用されるバイトの最大長は、システムのストレージとパフォーマンスに何らかの影響を与えるので、MySQLを設計したおじさんは密かに2つの概念を定義したのでした。

  • utf8mb3: 文字を表現するのに1〜3バイトしか使わない、中性化されたutf8文字セットです。
  • utf8mb4: 本格的なutf8文字セットで、文字に1〜4バイトを使用します。

ひとつだけ強く意識していただきたいのは、utf8はMySQLにおけるutf8mb3の別名であり、その後MySQLでutf8と言及すると、1〜3バイトで文字を表現することになるので、何かの絵文字を格納するなど4バイトで文字を符号化する場合は、utf8mb4を使っていただきたい。

文字セットの見方

MySQL は非常に多くのキャラクタセットをサポートしており、現在 MySQL でサポートされているキャラクタセットを確認するには、次のステートメントを使用します。

charsetを表示します。

8.MySQLデータ操作DML

データに対するDML操作:データの追加、データの変更、データの削除

データの追加

フォーマット:テーブル名 [(フィールドのリスト)] 値(値のリスト...)に挿入する ;

--標準的な追加 (すべてのフィールドを指定し、すべての値を指定する)

mysql> insert into stu(id,name,age,sex,classid) values(1,'zhangsan',20,'m','lamp138')です。

クエリ OK、1 行が影響を受けました (0.13 秒)

--値を追加する部分フィールドを指定する

mysql> insert into stu(name,classid) value('lisi','lamp138');

クエリ OK、1 行が影響を受けました (0.11 秒)

-- フィールドを指定せずに値を追加する

mysql> insert into stu value(null,'wangwu',21,'w','lamp138');

クエリ OK、1 行が影響を受けました (0.22 秒)

-- 値を一括して追加する

mysql> insert into stu values.

-> (null,'zhaoliu',25,'w','lamp94'),

-> (null,'uu01',26,'m','lamp94'),

-> (null,'uu02',28,'w','lamp92'),

-> (null,'qq02',24,'m','lamp92'),

-> (null,'uu03',32,'m','lamp138'),

-> (null,'qq03',23,'w','lamp94'),

-> (null,'aa',19,'m','lamp138');

クエリ OK、7 行が影響を受けました (0.27 秒)

レコード 7 重複。0 警告 0

データ修正

書式:テーブル名を更新する set field1=value1,field2=value2,fieldn=valuen... where condition

-- id 11の年齢を35に、性別をmに変更する。

mysql> update stu set age=35,sex='m' where id=11;

クエリ OK、1 行が影響を受けました (0.16 秒)

行が一致しました。1 変更: 1 警告: 0

-- id値12と14のデータ値sexをm、classidをlamp92に変更

mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14 -- 以下と同等です。

mysql> update stu set sex='m',classid='lamp92' where id in(12,14);

クエリ OK、影響を受ける行は 2 行です (0.09 秒)

一致した行数: 2 変更された行数: 2 警告: 0

データ削除

書式:テーブル名[where条件]から削除

-- stu テーブルから id 値が 100 のデータを削除する。

mysql> delete from stu where id=100;

クエリOK、影響を受ける行は0行 (0.00 s)