金鱼哥RHCA回忆录:RH358配置MariaDB SQL数据库--在MariaDB中使用SQL

举报
金鱼哥 发表于 2022/05/05 14:36:08 2022/05/05
【摘要】 第七章 配置MariaDB SQL数据库--在MariaDB中使用SQL

本章节介绍如何在MariaDB中使用SQL。在数据库操作中,是基础使用,必须学会。

🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥


1. 访问MariaDB数据库

mariadb包提供了命令mysql,它支持对mariadb数据库的交互式和非交互式访问。当交互地用于执行查找时,结果将以ASCII-table格式显示。当非交互式地使用时,结果将以制表符分隔的格式显示。

下面的例子演示了使用mysql命令连接MariaDB数据库服务器:

[root@host ~]# mysql -u root -h localhost -p

  • 选项指定此连接的用户名。

  • 连接的用户名。

  • 选项指定此连接的主机名。

  • 如果没有指定,默认值是localhost。

  • 此连接的主机名。

  • 选项提示输入用户的密码


连接数据库服务器

第一次安装时,MariaDB的默认设置提供了一个root用户帐户,允许不需要密码就可以访问。

[root@host ~]# mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.3.17-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>

MariaDB提示符需要交互式SQL语句,并在方括号中显示您所选择的当前数据库。一个数据库服务器可以包含多个数据库。这个初始提示显示当前没有选择任何数据库。

SHOW DATABASES; 语句列出此服务器上可用的数据库。

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)
MariaDB [(none)]>

mysql数据库是一个系统数据库,包含用于操作MariaDB的信息,包括数据库用户表和他们的访问权限。MariaDB也使用其他两个数据库来支持自己的操作。

可以使用USE语句选择一个数据库。例如,USE test; 设置mysql命令以便进一步的SQL命令操作测试test数据库,假设它存在。

SQL语句是不区分大小写的,但是数据库名称不是。通常的做法是将数据库的名称都设置为小写,并对SQL语句使用大写,以将语句的SQL语法与语句的目标或参数区分开来。

下面的语句将提示符更改为mysql数据库:

MariaDB [(none)]> USE mysql;
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
MariaDB [mysql]>

2. 创建新数据库

# 下面的CREATE DATABASE语句创建一个名为inventory的空数据库:
MariaDB [(none)]> CREATE DATABASE inventory;

# 创建数据库之后,下一步是连接到它并使用数据填充它
MariaDB [(none)]> USE inventory;
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
MariaDB [inventory]>

3. 使用SQL研究数据库的结构

如果您有一个现有的数据库,您可以使用SQL语句来调查它的数据。数据库由表组成,表代表一组信息。例如,您可以有一个表来表示web商店中的产品。

表由行和列组成。在给定的表中,每一行对应一个记录,每列对应该记录的一个属性。例如,产品表中的每一行可以代表一个商品,而每一列可以代表该商品的一个特征,例如价格或库存数量。

你可以使用SHOW TABLES语句来显示当前数据库中的表:

MariaDB [inventory]> SHOW TABLES;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| category |
| manufacturer |
| product |
+---------------------------+
3 rows in set (0.00 sec)

从表中读取数据

可以使用SELECT语句从表中选择记录。在下面的例子中,SELECT *表示选择所有属性,FROM指定从哪个表中选择。

MariaDB [inventory]> SELECT * FROM product;
+----+-------------------+---------+-------+-------------+-----------------+
| id | name | price | stock | id_category | id_manufacturer |
+----+-------------------+---------+-------+-------------+-----------------+
| 1 | ThinkServer TS140 | 539.88 | 20 | 2 | 4 |
| 2 | ThinkServer TS440 | 1736.00 | 10 | 2 | 4 |
| 3 | RT-AC68U | 219.99 | 10 | 1 | 3 |
| 4 | X110 64GB | 73.84 | 100 | 3 | 1 |
+----+-------------------+---------+-------+-------------+-----------------+
4 rows in set (0.00 sec)

MariaDB [inventory]> SELECT * FROM category;
+----+------------+
| id | name |
+----+------------+
| 1 | Networking |
| 2 | Servers |
| 3 | Ssd |
+----+------------+
3 rows in set (0.00 sec)

MariaDB [inventory]> SELECT * FROM manufacturer;
+----+----------+----------------+-------------------+
| id | name | seller | phone_number |
+----+----------+----------------+-------------------+
| 1 | SanDisk | John Miller | +1 (941) 555-8855 |
| 2 | Kingston | Mike Taylor | +1 (341) 555-9999 |
| 3 | Asus | Wilson Jackson | +1 (432) 555-8899 |
| 4 | Lenovo | Allen Scott | +1 (876) 555-4439 |
+----+----------+----------------+-------------------+
4 rows in set (0.00 sec)

# 可以指定只对表中的特定属性()。
MariaDB [inventory]> SELECT name,price,stock FROM product ;
+---------------------+--------+-------+
| name | price | stock |
+---------------------+--------+-------+
| ThinkServer TS140 | 539.88 | 20 |
| RT-AC68U | 219.99 | 10 |
| X110 64GB | 73.84 | 100 |
| SDSSDP-128G-G25 2.5 | 82.04 | 30 |
+---------------------+--------+-------+
4 rows in set (0.00 sec)

# 可以使用WHERE子句根据条件选择数据。
MariaDB [inventory]> SELECT * FROM product WHERE price > 100;
+----+-------------------+--------+-------+-------------+-----------------+
| id | name | price | stock | id_category | id_manufacturer |
+----+-------------------+--------+-------+-------------+-----------------+
| 2 | ThinkServer TS140 | 539.88 | 20 | 2 | 4 |
| 3 | RT-AC68U | 219.99 | 10 | 1 | 3 |
+----+-------------------+--------+-------+-------------+-----------------+
2 rows in set (0.00 sec)

常见的条件操作符

操作符 描述
= 等于
<> 不等于。注意:在某些版本的SQL中,这个操作符可以写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在包含范围之间
LIKE 搜索模式
IN 为列指定多个可能的值

修改数据库中的数据

SQL还可以用于修改存储在关系数据库中的数据。除了SELECT之外,常见的SQL语句还有INSERT、UPDATE、DELETE等。

这四个基本命令通常被称为CRUD操作。CRUD代表Create创建(INSERT)、Read读取(SELECT)、Update更新(Update)和Delete删除(Delete)。


向表中插入数据

要向表中插入数据,第一步是确定表中项目的格式。DESCRIBE语句提供了关于表数据必须如何结构化的信息。

这个产品表的输出显示:

  • 该表中有六列(属性)项。

  • Type列显示了该属性的数据必须采用的格式。例如,stock属性必须是一个不超过11位的整数。

  • Null列指示该属性是否为空。

  • Default列指示如果未指定该属性是否设置了默认值。

  • Key列显示属性id是主键。主键是表中一行的唯一标识符;任何其他行都不能具有该属性的相同值。该属性的Extra列被标记为auto_increment。这意味着,每当向表中插入新项时,该条目的属性值就会增加。这使得保持数字主键的唯一性变得更加容易。

使用INSERT INTO语句将新行插入到表中。下面的示例演示如何向product表添加新行

MariaDB [inventory]> INSERT INTO
-> product (name,price,stock,id_category,id_manufacturer)  # 表名后跟括号中的属性()名。
-> VALUES ('SDSSDP-128G-G25 2.5',82.04,30,3,1) ;       #值的插入顺序与属性和数据类型定义的顺序相同。
Query OK, 1 row affected (0.00 sec)

示例中没有显式包含id属性。这是有效的,因为它是一个设置了auto_increment的整数,所以MariaDB会自动为属性选择下一个值。


更新表中的行

UPDATE语句连同条件和目标值更新一条记录。
MariaDB [inventory]> UPDATE product    # 要更新的表名。
-> SET price=89.90, stock=60       # 指定属性的新值。
-> WHERE id = 5 ;        # 在命令执行上附加条件的子句。  要更新记录的条件。
Query OK, 1 row affected (0.01 sec)

警告:如果使用UPDATE而不使用WHERE子句,则更新表中的所有记录。


删除表中的数据

DELETE语句连同条件和目标值一起删除记录。
MariaDB [inventory]> DELETE FROM product WHERE id = 1 ;
Query OK, 1 row affected (0.01 sec)

警告:如果使用DELETE FROM而不使用WHERE子句,表中的所有记录都会被删除。


创建新表

若要创建新表,请使用create table。下面的示例从前面的示例创建产品表。

MariaDB [inventory]> CREATE TABLE product
-> ( id INT(11) NOT NULL AUTO_INCREMENT,
-> name VARCHAR(100) NOT NULL,
-> price DOUBLE NOT NULL,
-> stock INT(11) NOT NULL,
-> id_category INT(11) NOT NULL,
-> id_manufacturer INT(11) NOT NULL,
-> CONSTRAINT id_pk PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.068 sec)

删除表

要从数据库中删除一个表及其所有数据,可以使用DROP table语句。

MariaDB [inventory]> DROP TABLE product;
Query OK, 0 rows affected (0.006 sec)

警告:DROP TABLE从数据库中删除数据和表。小心使用。


删除数据库

DROP DATABASE语句删除数据库中的所有表并删除数据库。这会破坏数据库中的所有数据。只有在该数据库上拥有DROP特权的用户才能运行此语句。

这不会改变数据库上的用户权限。如果重新创建了具有该名称的数据库,则为旧数据库设置的用户特权仍然有效。

MariaDB [inventory]> DROP DATABASE inventory;
Query OK, 0 rows affected (0.006 sec)
MariaDB [(none)]>

如果数据库不存在,则语句返回错误。

警告:使用DROP DATABASE时要非常小心,因为它会删除整个数据库及其数据


4. 课本练习

[student@workstation ~]$ lab database-working start

[student@servera ~]$ mysql -u root -p
Enter password: redhat
Server version: 10.3.17-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| inventory          |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

MariaDB [(none)]> USE mysql;
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

MariaDB [mysql]> SHOW TABLES;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| column_stats              |
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| gtid_slave_pos            |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| index_stats               |
| innodb_index_stats        |
| innodb_table_stats        |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| roles_mapping             |
| servers                   |
| slow_log                  |
| table_stats               |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| transaction_registry      |
| user                      |
+---------------------------+
31 rows in set (0.001 sec)

MariaDB [mysql]> DESCRIBE user;
+------------------------+-----------------------------------+------+-----+----------+-------+
| Field                  | Type                              | Null | Key | Default  | Extra |
+------------------------+-----------------------------------+------+-----+----------+-------+
| Host                   | char(60)                          | NO   | PRI |          |       |
| User                   | char(80)                          | NO   | PRI |          |       |
| Password               | char(41)                          | NO   |     |          |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N        |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N        |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N        |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N        |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N        |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N        |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N        |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N        |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N        |       |
| File_priv              | enum('N','Y')                     | NO   |     | N        |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N        |       |
| References_priv        | enum('N','Y')                     | NO   |     | N        |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N        |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N        |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N        |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N        |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N        |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N        |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N        |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N        |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N        |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N        |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N        |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N        |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N        |       |
| Delete_history_priv    | enum('N','Y')                     | NO   |     | N        |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |          |       |
| ssl_cipher             | blob                              | NO   |     | NULL     |       |
| x509_issuer            | blob                              | NO   |     | NULL     |       |
| x509_subject           | blob                              | NO   |     | NULL     |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0        |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0        |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0        |       |
| max_user_connections   | int(11)                           | NO   |     | 0        |       |
| plugin                 | char(64)                          | NO   |     |          |       |
| authentication_string  | text                              | NO   |     | NULL     |       |
| password_expired       | enum('N','Y')                     | NO   |     | N        |       |
| is_role                | enum('N','Y')                     | NO   |     | N        |       |
| default_role           | char(80)                          | NO   |     |          |       |
| max_statement_time     | decimal(12,6)                     | NO   |     | 0.000000 |       |
+------------------------+-----------------------------------+------+-----+----------+-------+
47 rows in set (0.001 sec)

MariaDB [mysql]> SELECT Host,User,Password FROM user;
+-----------+------+-------------------------------------------+
| Host      | User | Password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| 127.0.0.1 | root | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| ::1       | root | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
+-----------+------+-------------------------------------------+
3 rows in set (0.000 sec)

MariaDB [mysql]> USE inventory;
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

MariaDB [inventory]> SHOW TABLES;
+---------------------+
| Tables_in_inventory |
+---------------------+
| category            |
| manufacturer        |
| product             |
+---------------------+
3 rows in set (0.000 sec)

MariaDB [inventory]> DESCRIBE category;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.001 sec)

MariaDB [inventory]> DESCRIBE manufacturer;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(100) | NO   |     | NULL    |                |
| seller       | varchar(100) | YES  |     | NULL    |                |
| phone_number | varchar(17)  | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
4 rows in set (0.001 sec)

MariaDB [inventory]> DESCRIBE product;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| name            | varchar(100) | NO   |     | NULL    |                |
| price           | double       | NO   |     | NULL    |                |
| stock           | int(11)      | NO   |     | NULL    |                |
| id_category     | int(11)      | NO   |     | NULL    |                |
| id_manufacturer | int(11)      | NO   |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+
6 rows in set (0.001 sec)

MariaDB [inventory]> SELECT * FROM category;
+----+------------+
| id | name       |
+----+------------+
|  1 | Networking |
|  2 | Servers    |
|  3 | Ssd        |
+----+------------+
3 rows in set (0.000 sec)

MariaDB [inventory]> SELECT * FROM manufacturer;
+----+----------+----------------+-------------------+
| id | name     | seller         | phone_number      |
+----+----------+----------------+-------------------+
|  1 | SanDisk  | John Miller    | +1 (941) 329-8855 |
|  2 | Kingston | Mike Taylor    | +1 (341) 375-9999 |
|  3 | Asus     | Wilson Jackson | +1 (432) 367-8899 |
|  4 | Lenovo   | Allen Scott    | +1 (876) 213-4439 |
+----+----------+----------------+-------------------+
4 rows in set (0.000 sec)

MariaDB [inventory]> SELECT * FROM product;
+----+-------------------+---------+-------+-------------+-----------------+
| id | name              | price   | stock | id_category | id_manufacturer |
+----+-------------------+---------+-------+-------------+-----------------+
|  1 | ThinkServer TS140 |  539.88 |    20 |           2 |               4 |
|  2 | ThinkServer RD630 | 2379.14 |    20 |           2 |               4 |
|  3 | RT-AC68U          |  219.99 |    10 |           1 |               3 |
|  4 | X110 64GB         |   73.84 |   100 |           3 |               1 |
+----+-------------------+---------+-------+-------------+-----------------+
4 rows in set (0.000 sec)

MariaDB [inventory]> UPDATE product SET price = '2179.14', stock = '10' WHERE id=2;
Query OK, 1 row affected (0.004 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [inventory]> SELECT * FROM product;
+----+-------------------+---------+-------+-------------+-----------------+
| id | name              | price   | stock | id_category | id_manufacturer |
+----+-------------------+---------+-------+-------------+-----------------+
|  1 | ThinkServer TS140 |  539.88 |    20 |           2 |               4 |
|  2 | ThinkServer RD630 | 2179.14 |    10 |           2 |               4 |
|  3 | RT-AC68U          |  219.99 |    10 |           1 |               3 |
|  4 | X110 64GB         |   73.84 |   100 |           3 |               1 |
+----+-------------------+---------+-------+-------------+-----------------+
4 rows in set (0.000 sec)

向表添加一条新记录。

MariaDB [inventory]> INSERT INTO product  (name,price,stock,id_category,id_manufacturer) VALUES ('ThinkStation S20','1799.49','15','2','4');
Query OK, 1 row affected (0.006 sec)

MariaDB [inventory]> SELECT * FROM product;
+----+-------------------+---------+-------+-------------+-----------------+
| id | name              | price   | stock | id_category | id_manufacturer |
+----+-------------------+---------+-------+-------------+-----------------+
|  1 | ThinkServer TS140 |  539.88 |    20 |           2 |               4 |
|  2 | ThinkServer RD630 | 2179.14 |    10 |           2 |               4 |
|  3 | RT-AC68U          |  219.99 |    10 |           1 |               3 |
|  4 | X110 64GB         |   73.84 |   100 |           3 |               1 |
|  5 | ThinkStation S20  | 1799.49 |    15 |           2 |               4 |
+----+-------------------+---------+-------+-------------+-----------------+
5 rows in set (0.000 sec)

MariaDB [(none)]> \q
Bye

完成实验

[student@workstation ~]$ lab database-working finish


总结

  • 介绍如何访问MariaDB。
  • 学习如何创建数据库和最基础的增删查改。

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

以上就是【金鱼哥】对 第七章 配置MariaDB SQL数据库–在MariaDB中使用SQL 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。