金鱼哥RHCA回忆录:RH358配置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 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!
- 点赞
- 收藏
- 关注作者
评论(0)