実験+理論:MySQLデータベースの追加、削除、変更、クエリ、およびデータベースユーザー認証-非常に詳細で、初心者に適しています!!!

1つは、データベースの基本操作

1.1、MySQLデータベースへのアクセス

1.1.1、MySQLサーバーにログイン

最初にMySQLサーバーにログインします。インストール後の初期化プロセスの後、MySQLデータベースのデフォルトの管理者ルートにログインします。ローカルMySQLデータベースにrootユーザーとしてログインし、次の操作を実行します。

[root@localhost ~]# mysql -u root -p   ##用root用户登录
Enter password:   ##输入密码
mysql>      ## 进来了

1.1.2、MySQL操作ステートメントにアクセスする

mysql> show databases;   ## 查看数据库信息
+--------------------+
| Database           |
+--------------------+
| information_schema |              |
| mysql              |
| performance_schema |
| root               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

1.1.3、「mysql>」オペレーティング環境を終了します

「mysql>」オペレーティング環境で、exit、quit、または\ tを実行してmysql>コマンドツールを終了し、元のシェル環境に戻ります。

mysql> exit
Bye
[root@localhost ~]# 

1.2、MySQLデータベースを使用

1.2.1、データベース構造を表示する

1.2.1.1、現在のサーバーに含まれているライブラリを表示する

SHOW DATABASEステートメント:現在のMySQLサーバーに含まれているライブラリを表示するために使用されます。MySQLサーバーを初期化すると、sys、mysql、information_schema、およびperformance_schema(mysqlライブラリにはユーザー認証に関連するテーブルが含まれます)の4つのライブラリがデフォルトで確立されます。

mysql> show databases;   ## 查看数据库信息
+--------------------+
| Database           |
+--------------------+
| information_schema |              |
| mysql              |
| performance_schema |
| root               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

1.2.1.2、現在使用されているライブラリに含まれているテーブルを表示する

SHOW TABLESステートメント:現在のライブラリに含まれているテーブルを表示するために使用されます。この操作の前に、USEステートメントを使用して、使用するライブラリに切り替える必要があります。例:次の操作を実行して、mysqlライブラリに含まれるすべてのテーブルを表示します。

mysql> use mysql   ##切换到这个库
Database changed
mysql> show tables;  ##查看当前库中包含的表
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
........  ##以下省略 ..........
| users                     |
+---------------------------+
32 rows in set (0.00 sec)

MySQLデータベースファイルは/ usr / local / mysql / dataディレクトリに格納され、各データベースはデータテーブルファイルを格納するためのサブディレクトリに対応しています。各データは3つのファイルに対応し、サフィックスは「.frm」、「myd」、および「.myi」です。もちろん、opt、csm、csv、ibdで終わるものがいくつかあります。

1.2.1.3、テーブルの構造を見る

DESCRIBEステートメント:テーブルの構造、つまりテーブルを構成するフィールド(列)の情報を表示するために使用されます。「ライブラリ名。テーブル名」をパラメータとして作成する必要があります。指定したパラメータのみを指定する場合は、USEステートメントを使用して、指定したターゲットライブラリに切り替える必要があります。
次の操作を実行して、mysqlライブラリのuserテーブルの構造を表示します。これは、「DESCRIBE mysql.user;」ステートメントを直接実行するのと同じ効果があります。

mysql> use mysql
Database changed
mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)   ## 中间省略

1.2.2、DDLデータ定義言語

12.2.1、新しいライブラリを作成する

CREATE DAREBASEステートメント:新しいライブラリを作成するために使用します。データベース名をパラメーターとして指定する必要があります。
例:次の操作を実行して、abcという名前のライブラリを作成します。

mysql> create database abc;  ## 创建新的库
Query OK, 1 row affected (0.00 sec)

新しく作成されたデータベースは時空間的であり、テーブルは含まれていません。新しく作成されたライブラリと同じ名前のフォルダが/ usr / local / mysql / dataディレクトリに自動的に作成されます

12.2.2、新しいテーブルを作成する

CREATE TABLEステートメント:現在のライブラリに新しいテーブルを作成するために使用します。データテーブル名をパラメーターとして指定し、テーブルで使用するフィールドを定義する必要があります。

mysql> use abc;  ## 跳转到abc库
mysql> create table abc (user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT '',PRIMARY KEY(user_name)); 
Query OK, 0 rows affected (0.00 sec)
mysql> describe abc;  ## 查看刚才创建的表
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name   | char(16) | NO   | PRI | NULL    |       |
| user_passwd | char(48) | YES  |     |         |       |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)

上記の表で、「ユーザー名」は16文字以下の文字列で空にすることはできません。
「パスワード」は48文字以下の文字列(レコードの挿入時にMySQL関数の暗号化を使用)、デフォルト値は空白ですストリング。
PRIMARYステートメントは、主キーフィールドの名前を設定します。

12.2.3、データベースを削除する

DROP DATABASEステートメント:指定されたライブラリーを削除するために使用されます。パラメーターとしてライブラリー名を指定する必要があります。例:次の操作を実行して、abcという名前のライブラリを削除します。

mysql> drop database abc; ##删除 abc 数据库
Query OK, 1 row affected (0.00 sec)
mysql> show database;  ## 查看库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| TX                 |
| mysql              |
| performance_schema |
| root               |
| zbc                |
+--------------------+
6 rows in set (0.00 sec)

12.2.4、データテーブルの削除

DROP TABLEステートメント:ライブラリ内のテーブルを削除するために使用する場合は、「ライブラリ名。テーブル名」をパラメーターとして指定する必要があります。テーブル名パラメーターのみを指定する場合は、USEステートメントを実行してターゲットデータベースに切り替える必要があります。例:次の操作を実行して、zbcという名前のデータテーブルを削除します。

mysql> drop table mysql.zbc;
Query OK, 0 rows affected (0.00 sec)

1.2.3、DMLデータ操作言語、DQLデータクエリステートメント

1.2.3.1、データレコードの挿入

INSERT INTOステートメント:新しいデータレコードをテーブルに挿入するために使用されます。

mysql> create database kk;
Query OK, 1 row affected (0.00 sec)  ## 创建库 kk
mysql> create table KK (user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT '',PRIMARY KEY(user_name)); 
Query OK, 0 rows affected (0.00 sec)   ## 创建 表 KK
mysql> insert into  KK(user_name,user_passwd)values('lisi',PASSWORD('123456'));
Query OK, 1 row affected, 1 warning (0.00 sec)  ## 在表中插入记录,按指定插入
mysql> insert into KK values('wangwu',PASSWORD('456789'));
Query OK, 1 row affected, 1 warning (0.00 sec)  ## 在表中插入记录,按顺序插入
mysql> insert into KK(user_name,user_passwd) values('zhao','123456');  ## 不加 PASSWORD(),就是明文
Query OK, 1 row affected (0.00 sec)

1.2.3.2、クエリデータレコード

すべてのフィールドを表す場合、ワイルドカード文字*を使用できます。すべてのデータレコードを表示する場合は、where句を省略できます。例:次の操作を実行すると、テーブル内のすべてのレコードが表示されますが、PASSWORD()が追加されているため、パスワード文字列は暗号化されているため、実際のパスワードの内容は直接表示されません

mysql> select * from kk.KK;  ## 查询 库kk中的表KK,所有内容
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

ここに画像の説明を挿入
レコードを検索するために特定の条件が必要な場合は、where句が不可欠です。例:lisiのレコードを検索し、ユーザー名とパスワードフィールドの情報を表示すると、次の操作を実行できます

mysql> select * from kk.KK where user_name='lisi';
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

1.2.3.3、データレコードの変更

UPDATEステートメント:テーブル内のデータレコードを変更および更新するために使用されます。
文の形式は次のとおりです
。UPDATEは、SETフィールド名1 =フィールド値1 [、フィールド名2 =フィールド値2] WHERE条件式
が次の操作を実行して、KKテーブルのユーザー名「lisi」のレコードを変更し、パスワード文字列を変更することを示します。 null値に設定します。レコードの内容を確認して、lisiユーザーのパスワード文字列値を空白にする

mysql> update kk.KK set user_passwd='' where user_name='lisi';
mysql> select * from kk.KK;  ## 修改完后进行验证
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| lisi      |                                           |
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

1.2.3.4、データレコードの削除

DELETEステートメント:テーブル内の指定されたデータレコードを削除するために使用されます。

ステートメントの形式は次のとおりです。DELETEFROMはWHERE条件式を示します

次の操作を実行して、KKテーブル内の「lisi」という名前のユーザーのデータレコードを削除します。レコードの内容を確認し、ユーザー「lisi」のデータレコードが消えたことを確認します

mysql> delete from kk.KK where user_name='lisi';
Query OK, 1 row affected (0.00 sec)  ## 删除用户名为lisi的记录
mysql> select * from kk.KK;  ## 查询一下KK表中lisi记录是否删除
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)

2、DCLデータ制御ステートメント

2.1、ユーザー権限を設定する

  • DCLステートメントはユーザー権限を設定します(ユーザーが存在しない場合は、新しいユーザーを作成します)

データベース名に権限リストを付与します。テーブル名TOユーザー名@ソースアドレス[IDENTIFIEDBY'password ']

mysql> grant select on kk.* to 'xiaoqi'@'localhost' identified by '123456'; 
 ## 给xiaoqi用户授权可以查看kk库里面表,用户不存在时,则新建用户,并写入密码123456
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;  ## 刷新
Query OK, 0 rows affected (0.00 sec)
mysql> exit  ## 退出当前用户
Bye
[root@localhost ~]# mysql -u xiaoqi -p  ##用xiaoqi用户登录数据库
Enter password: 
mysql> select * from kk.KK;   
## 验证授权访问操作,查看kk库里面的KK表,验证成功!
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> drop database kk;  
## 验证非授权访问操作,没有给xiaoqi用户授权删除库的权力,所以无法删除!
ERROR 1044 (42000): Access denied for user 'xiaoqi'@'localhost' to database 'kk'

ユーザー(または新しいユーザー)にすべてのアクセス許可を取得する場合は、次の操作を実行できます

## 这边我们把之前的 select 改成 all,这样此用户就可获得对kk库的所有权限!
mysql> grant all on kk.* to 'xiaoqi'@'localhost' identified by '123456'; 

2.2。ユーザー権限を表示する

username @ sourceアドレスのGRANTSを表示します。

mysql>  show grants for xiaoqi@localhost;
+------------------------------------------------+
| Grants for xiaoqi@localhost                    |
+------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoqi'@'localhost'     |
| GRANT SELECT ON "kk".* TO 'xiaoqi'@'localhost' |
+------------------------------------------------+
2 rows in set (0.00 sec)

2.3、ユーザー権限を取り消す

REMOVE許可リストONデータベース名。テーブル名FROMユーザー名@ソースアドレス
ユーザー許可取り消すには、取り消されるrootの最高の権限でログインする必要があります!

mysql> revoke select on kk.* from xiaoqi@localhost;  ## 撤销授权用户的权限
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for xiaoqi@localhost;  ## 查看被撤销授权用户的权限
+--------------------------------------------+
| Grants for xiaoqi@localhost                |
+--------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoqi'@'localhost' |
+--------------------------------------------+
1 row in set (0.01 sec)

おすすめ

転載: blog.csdn.net/m0_46563938/article/details/108488022