[MySQL] データベースとテーブル構造の追加、削除、確認、変更


Linux を学習するためにクラウド サーバーやその他のクラウド製品が必要な学生は、 / --> Tencent Cloud <-- / --> Alibaba Cloud <-- / --> Huawei Cloud <-- / 公式 Web サイトに移動できます。軽量のクラウド サーバーは次のとおりです。年間 112 元の低コストで、新規ユーザーは最初の注文で超低割引を受けることができます。


 目次

1. 図書館運営

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

2. データベースで使用されるエンコーディング

2.1 エンコードセットと検証セットを問い合わせる

2.2 データベースの文字セットとチェックセットを表示する

2.3 文字セットとチェックセットを指定するデータベースを作成する

2.4 異なる検証セットでフィルタリングされたデータは異なる結果になります。

3. データベースを表示する

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

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

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

6.1 データベース全体をバックアップする

6.2 データベース全体を復元する

6.3 1 つのテーブルのみまたは複数のデータベースをバックアップする

7. データベース接続ステータスを確認する

2. テーブル操作

1. テーブルの作成

2. 表を見る

2.1 ビューテーブル

2.2 テーブル作成時の詳細情報の表示

3. テーブルの修正

3.1 テーブルにデータを挿入する

3.2 テーブルに新しいフィールドを追加する

3.3 テーブル名の変更

3.4 テーブル内の列の列名を変更する

3.5 テーブル内の列のデータ型を変更する

4. テーブルの削除

4.1 テーブル内の列を削除する

4.2 テーブルの削除


1. 図書館運営

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

#创建数据库————本质是在/var/lib/mysql中创建一个目录
mysql> create database database1;
Query OK, 1 row affected (0.01 sec)
#进入数据库
mysql> use test1;
Database changed
#创建表
mysql> create table if not exists person(name varchar(20));
Query OK, 0 rows affected (0.34 sec)

2. データベースで使用されるエンコーディング

データベースを作成する場合、次の 2 つのエンコード セットがあります。

1. データベースエンコーディングセット: データベースストレージデータのエンコーディングセット。

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

2.1 エンコードセットと検証セットを問い合わせる

#查询当前MySQL的编码集
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)
#查询当前MySQL的校验集
mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.01 sec)

2.2 データベースの文字セットとチェックセットを表示する

#查看数据库支持的所有字符集
show charset;
#查看数据库支持的所有校验集
show collation;
#在数据库目录下查看d1数据库的字符集和校验集
[root@VM-4-11-centos mysql]# cat d2/db.opt
default-character-set=utf8
default-collation=utf8_general_ci

2.3 文字セットとチェックセットを指定するデータベースを作成する

#创建数据库时指定字符集
mysql> create database d2 charset=utf8;
Query OK, 1 row affected (0.00 sec)

mysql> create database d3 character set utf8;
Query OK, 1 row affected (0.00 sec)

#创建数据库时指定字符集和校验集
mysql> create database d4 charset=utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

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

2.4 異なる検証セットでフィルタリングされたデータは異なる結果になります。

#创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(10));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
#进行查询
mysql> use test1;
mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
| A    |
+------+
2 rows in set (0.01 sec)
#创建一个数据库,校验规则使用utf8_ bin[区分大小写]
create database test2 collate utf8_bin;
use test2
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
#进行查询
mysql> use test2;
mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
+------+
2 rows in set (0.01 sec)

異なる検証セットを選択すると、データベースによってフィルタリングされた結果も異なります。

3. データベースを表示する

#查看数据库
mysql> show databases;
#进入数据库
mysql> use test1;
Database changed
#查看当前数据库中的所有表
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| person          |
+-----------------+
1 row in set (0.00 sec)
#查看自己当前处于哪个表
mysql> select database();
+------------+
| database() |
+------------+
| test1      |
+------------+
1 row in set (0.01 sec)
#查看数据库当初的创建指令
mysql> show create database test2;
+----------+---------------------------------------------------------------------------------+
| Database | Create Database                                                                 |
+----------+---------------------------------------------------------------------------------+
| test2    | CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ |
+----------+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)

1. MySQL ではキーワードを大文字にすることを推奨していますが、必須ではありません。

2. データベース名のバッククォート `` は、使用されているデータベース名がキーワードにならないようにするためのものです。

3. /*!40100default.... */ これはコメントではなく、現在の mysql バージョンがバージョン 4.01 より大きいことを意味するので、この文を実行します。

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

#修改数据库的字符集和校验集
mysql> alter database test1 charset=gbk collate gbk_chinese_ci;
Query OK, 1 row affected (0.01 sec)

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

#删除数据库————本质是在/var/lib/mysql中删除一个目录
#不建议直接删除数据库,建议备份后删除
mysql> drop database database1;
Query OK, 0 rows affected (0.01 sec)

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

6.1 データベース全体をバックアップする

#未启动MySQL客户端使用,备份的是对该数据库的有效操作
mysqldump -P3306 -uroot -p -B test1 > test.sql

これは、データベースから SQL ファイルにデータをエクスポートするために使用される MySQL コマンドです。具体的には、このコマンドは、test1 という名前のデータベース内のすべてのデータを test.sql という名前のファイルにエクスポートします。

このコマンドの各パラメータの意味は次のとおりです。

  • -P3306: MySQL サーバーのポート番号を 3306 として指定します。
  • -uroot: root ユーザー名を使用して MySQL サーバーに接続します。
  • -p: MySQL サーバーに接続するためのパスワードの入力をユーザーに求めます。
  • -B test1: エクスポートするデータベースの名前を test1 として指定します。
  • > test.sql: エクスポートされたデータを test.sql という名前のファイルに出力します。

このコマンドを実行する前に、データベース内のデータをエクスポートするための十分な権限があることを確認する必要があることに注意してください。さらに、複数のデータベースをエクスポートする場合は、-B パラメータの後にスペースで区切って複数のデータベース名を指定できます。

6.2 データベース全体を復元する

mysql> source /root/MySQL/test.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

回復プロセスでは、すべてのバックアップ コマンドが再実行されます。

6.3 1 つのテーブルのみまたは複数のデータベースをバックアップする

#仅备份几张张表
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
#同时备份多个数据库
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

注: バックアップは、MySQL クライアントではなく、シェル コマンド ラインから実行されます。-B パラメータを指定せずにデータベースをバックアップする場合、データベースを復元するときは、最初に空のデータベースを作成し、次にそのデータベースを使用し、次にソースを使用して復元する必要があります。

7. データベース接続ステータスを確認する

mysql> show processlist;
+----+------+-----------+-------+---------+------+----------+------------------+
| Id | User | Host      | db    | Command | Time | State    | Info             |
+----+------+-----------+-------+---------+------+----------+------------------+
| 40 | root | localhost | test1 | Query   |    0 | starting | show processlist |
+----+------+-----------+-------+---------+------+----------+------------------+
1 row in set (0.01 sec)

2. テーブル操作

1. テーブルの作成

mysql> create table if not exists use1(
    -> id int,
    -> name varchar(20) comment '用户名',
    -> birthday date comment '用户生日'
    -> )character set utf8 collate utf8_general_ci engine MyIsam;
Query OK, 0 rows affected (0.02 sec)

mysql> create table if not exists use2(
    -> name varchar(20) comment '用户名',
    -> passwword char(32) comment '用户密码',
    -> birthday date comment '用户生日'
    -> )charset=utf8 collate=utf8_general_ci engine=InnoDB;
Query OK, 0 rows affected (0.15 sec)

ストレージ エンジンが異なれば、テーブルの作成に異なるファイルが使用されます。

ユーザー テーブル ストレージ エンジンは MyISAM で、データ ディレクトリには次の 3 つの異なるファイルがあります。

users.frm: テーブル構造

users.MYD: テーブルデータ

users.MYI: テーブルインデックス

2. 表を見る

2.1 ビューテーブル

#查看当前处于哪个数据库
mysql> select database();
+------------+
| database() |
+------------+
| use_db     |
+------------+
1 row in set (0.01 sec)
#查看数据库中存在的表
mysql> show tables;
+------------------+
| Tables_in_use_db |
+------------------+
| use1             |
| use2             |
+------------------+
2 rows in set (0.00 sec)
#查看表的属性
mysql> desc use1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| name     | varchar(20) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

2.2 テーブル作成時の詳細情報の表示

#查看创建表时的详细信息
mysql> show create table use1;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| use1  | CREATE TABLE `use1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `birthday` date DEFAULT NULL COMMENT '用户生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8        |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

#加上\G选项精简信息
mysql> show create table use1 \G
*************************** 1. row ***************************
       Table: use1
Create Table: CREATE TABLE `use1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `birthday` date DEFAULT NULL COMMENT '用户生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

3. テーブルの修正

3.1 テーブルにデータを挿入する

#在表中插入数据
mysql> insert into user values (1,'张三','2000-10-1');
Query OK, 1 row affected (0.00 sec)
mysql> insert into user values (2,'李四','1978-10-1');
Query OK, 1 row affected (0.01 sec)

#查看表内容
mysql> select* from user;
+------+--------+------------+
| id   | name   | birthday   |
+------+--------+------------+
|    1 | 张三   | 2000-10-01 |
|    2 | 李四   | 1978-10-01 |
+------+--------+------------+
2 rows in set (0.03 sec)
mysql> insert into t3 (id,online) values (123,1);
Query OK, 1 row affected (0.03 sec)

3.2 テーブルに新しいフィールドを追加する

#在表中插入字段,新增字段位于birthday之后
mysql> alter table user add image_path varchar(128) comment '用户头像路径' after birthday;
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0
#打印表
mysql> select* from user;
+------+--------+------------+------------+
| id   | name   | birthday   | image_path |
+------+--------+------------+------------+
|    1 | 张三   | 2000-10-01 | NULL       |
|    2 | 李四   | 1978-10-01 | NULL       |
+------+--------+------------+------------+
2 rows in set (0.00 sec)

3.3 テーブル名の変更

#修改表名为user
mysql> alter table use1 rename to user;
Query OK, 0 rows affected (0.01 sec)

3.4 テーブル内の列の列名を変更する

#查一下创建表的SQL
mysql> show create table user\G;
*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(60) DEFAULT NULL,
  `birthday` date DEFAULT NULL COMMENT '用户生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

#修改name列名为xingming。注意新字段需要完整定义
mysql> alter table user change name xingming varchar(60) DEFAULT NULL;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

3.5 テーブル内の列のデータ型を変更する

#将name字段的属性由varchar(20)修改为varchar(60)
#但是这样修改将会丢失COMMENT '用户姓名'字段
mysql> alter table user modify name varchar(60);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

#9列为原先创建表时的语句,10列为修改后的语句。
#COMMENT '用户姓名'将丢失,所以修改表中某一列的属性时,将创建时的SQL复制过来再进行修改
`name` varchar(20) DEFAULT NULL COMMENT '用户姓名',
`name` varchar(60) DEFAULT NULL,

テーブル内の列のデータ型を変更すると、上書き変更になります。テーブル作成時に設定したフィールドが失われないように、元のテーブルの作成情報をコピーしてから変更してください。

4. テーブルの削除

4.1 テーブル内の列を削除する

#删除user
mysql> alter table user drop image_path;
Query OK, 2 rows affected (0.05 sec)
Records: 2  Duplicates: 0  Warnings: 0

削除後は該当列のデータも削除されますので、削除時にはご注意ください。

4.2 テーブルの削除

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

おすすめ

転載: blog.csdn.net/gfdxx/article/details/131160432