MySQL操作ライブラリ

1. データベースを作成する

1. データベースの作成方法

create database database1;

画像-20230716160242203

オプションを使って作成する

create database if not exists database1;
  • 存在しない場合(存在しない場合)、データベースdatabase1を作成します。

画像-20230716162145611

2. データベース作成時のエンコーディングの問題

データを扱うデータベースの作成にはコーディングが必要です。データベースを作成する場合、次の 2 つのエンコード セットがあります。

  1. データベース コード セット: 将来データを保存するためのデータベースのコード セット。
  2. データベース検証セット: データベースをサポートし、フィールド比較に使用されるエンコーディングは、基本的にデータベース内のデータを読み取るために使用されるエンコーディング形式です。

したがって、データベースがデータに対してどのような操作を実行する場合でも、データベースの操作とエンコードが一貫していることを確認する必要があります。

システムがデフォルトでサポートしている文字セットとチェックサムを表示します。

show variables like 'character_set_database';

画像-20230716163250563

show variables like 'collation_database';

画像-20230716163406782

接続、データベース、およびサーバーの検証セットを表示します。

show variables like 'collation_%';

画像-20230716163700707

ほとんどの場合、データベースへの接続、データベース自体、データベースのサーバーはすべて utf8 です。my.cnf の初期設定では、統一のためにすべてのデフォルトの文字セットを utf8 として設定しましたが、設定されていない場合、エンコーディングが異なるためにデータが正しく解析されない可能性があります。

データベース内のすべての文字セットを表示する

show charset;

画像-20230716163933162

比較表を見ると、データベースは utf8 文字セットを選択します。

データベースでサポートされている文字セット検証ルールを表示する

show collation;

3. データベースを作成するエンコーディングを指定します

文字セットと検証ルールを指定せずにデータベースを作成すると、システムはデフォルトの文字セット utf8 を使用し、検証ルール utf8_general_ci を使用します。

ふたつのやり方:

create database d2 charset=utf8; #指定编码格式utf8

画像-20230716200505946

create database d3 set utf8; #指定编码格式utf8

画像-20230716200815758

コードセットの文字セットも同時に設定されます。

create database d4 charset=utf8 collate utf8_general_ci; #既指明编码,又指明校验规则

文字セットテーブルと検証テーブルに基づいて、異なるエンコードと検証ルールを使用してデータベースを作成します

画像-20230716201340291

4. データベースに対する検証ルールの影響を検証する

大文字と小文字を区別しません

utf8_general_ci [大文字と小文字を区別しない] を使用して検証ルールを含むデータベースを作成します。

create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));

画像-20230717204517443

大文字と小文字が区別されないため、「a」が指定されている場合、utf8_general_ci チェック ルールは「A」と「a」を一緒にチェックします。

画像-20230717204907443

大文字と小文字を区別

utf8_ bin [大文字と小文字を区別する] を使用して検証ルールを含むデータベースを作成する

create database test2 collate utf8_bin;
use test2;
create table if not exists person(name varchar(20));

画像-20230717205550620

したがって、検証ルールによっては、判明する結果も異なる場合があります。

検証ルールに応じて、並べ替え順序は異なります: (小さいものから大きいもの)

画像-20230717205936435

したがって、大文字と小文字を無視すると、大文字と小文字の区別は行われません。

2. データベースとファイルシステムの関係

データベースを作成します: create database db_name; 本質は、/var/lib/mysql にディレクトリを作成することです。

データベースを削除します:drop database db_name; 本質は、/var/lib/mysql 内のディレクトリを削除することです。

したがって、/var/lib/mysql にディレクトリを作成すると、対応するデータベースがデータベース レベルで生成されます。

画像-20230716161418944

同様に、mysql ディレクトリ内のディレクトリを削除すると、データベース レベルで対応するデータベースも削除されます。

もちろん、対応するデータベースを生成するためにファイル システム レベルでディレクトリを作成することはまったく不合理です。したがって、mysql8.0 ではこの機能が無効になっていますが、mysql5.6 ではこの機能がサポートされています。

3. データベースを操作する

1. データベースを確認する

show databases;

画像-20230716155403820

どのデータベースにあるのかを確認したい場合は、次のコマンドを実行できます。

select database();

画像-20230719130308084

2. データベースを削除します

drop database db_name;

削除を実行した後の結果:

  • 対応するデータベースがデータベース内に存在しない
  • 対応するデータベース フォルダーが削除され、カスケード削除され、その中のすべてのデータ テーブルが削除されます。

注: データベースを勝手に削除しないでください。

3. データベースを変更する

  • データベースの変更とは、主にデータベースの文字セットと検証ルールを変更することを指します。
alter database test2 charset=gbk collate gbk_Chinese_ci;

画像-20230719130801155

4. データベースのバックアップとリカバリ

1. データベースのバックアップ

 mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

-B: データベースを選択するオプションを表します。

画像-20230719135036092

test1 データベース内のデータだけでなく、履歴に作成されたコマンドも test1.sql に保存されます。

画像-20230719135143891

この時点で、データベース test1 のバックアップ操作が完了します。

2. データベースの回復

次に、test1 データベースを削除します。

画像-20230719135825570

このように、/var/lib/mysql のパス下には、test1 ディレクトリが存在してはなりません。

pwd コマンドを使用すると、test1.sql が配置されているパスがわかります。

画像-20230719140336913

次に、次のコマンドを使用してコマンドを復元します。

mysql> source /root/MySQL/test1.sql;

画像-20230719140542138

この時点で、test1 に対応するデータベースとその内容を表示できます。

画像-20230719141029717

予防

バックアップがデータベース全体ではなく、テーブルの 1 つである場合はどうすればよいですか?

mysqldump -u root -p 数据库名 表名1 表名2 > 路径/mytest.sql

複数のデータベースを同時にバックアップする

mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

データベースのバックアップ時に -B パラメータが含まれていない場合、データベースを復元するときは、最初に空のデータベースを作成し、次にそのデータベースを使用し、次にソースを使用して復元する必要があります。

5. 接続状態を確認する

データベース使用時にフリーズが発生した場合は、データベースにアクセスしているのは自分だけではない可能性があるため、次のコマンドでユーザー数と名前IDを確認できます。

show processlist;

画像-20230719143408395

これにより、現在 MySQL に接続しているユーザーがわかります。ユーザーが通常のログインではないことが判明した場合は、データベースが侵入されている可能性が非常に高くなります。

おすすめ

転載: blog.csdn.net/NEFUT/article/details/131808465