第十七章 使用 MariaDB 數據庫管理系統

1.? 數據庫管理系統

數據庫是指按照某些特定結構來存儲數據資料的數據倉庫。在當今這個大數據技術迅速崛起的年代,互聯網上每天都會生成海量的數據信息,數據庫技術也從最初只能存儲簡單的表格數據的單一集中存儲模式,發展到了現如今存儲海量數據的大型分布式模式。在信息化社會中,能夠充分有效地管理和利用各種數據,挖掘其中的價值,是進行科學研究與決策管理的重要前提。同時,數據庫技術也是信息管理系統、辦公自動化系統、決策支持系統等各類信息系統的核心組成部分,是進行科學研究和決策管理的重要技術手段。?
數據庫管理系統是一種能夠對數據庫中存放的數據進行建立、修改、刪除、查找、維護等操作的軟件程序。它通過把計算機中具體的物理數據轉換成適合用戶理解的抽象邏輯數據,有效地降低數據庫管理的技術門檻,因此即便是從事 Linux 運維工作的工程師也可以對數據庫進行基本的管理操作。但是,我們的技術主線依然是 Linux 系統的運維,而數據庫管理系統只不過是在此主線上的一個內容不斷橫向擴展、縱向加深的分支,不能指望在一兩天之內就可以精通數據庫管理技術。
既然是講解數據庫管理技術,就肯定繞不開 MySQL。MySQL 是一款市場占有率非常高的數據庫管理系統,技術成熟,配置步驟相對簡單,而且具有良好的可擴展性。但是,由于Oracle 公司在 2009年收購了 MySQL的母公司 Sun,因此 MySQL數據庫項目也隨之納入 Oracle麾下,逐步演變為保持著開源軟件的身份,但又申請了多項商業專利的軟件系統。開源軟件是全球黑客、極客、程序員等技術高手在開源社區的大旗下的公共智慧的結晶,自己的勞動成果被其他公司商業化自然也傷了一大批開源工作者的心,因此 MySQL 項目的創始人重新研發了一款名為 MariaDB 的全新數據庫管理系統。?

2.? 初始化 mariadb 服務?

相較于 MySQL,MariaDB 數據庫管理系統有了很多新鮮的擴展特性,例如對微秒級別的支持、線程池、子查詢優化、進程報告等。在配置妥當軟件倉庫后,即可安裝部署 MariaDB數據庫主程序及服務端程序了。

[root@linuxprobe~]# dnf install -y mariadb mariadb-server 
Updating Subscription Management repositories. 
Unable to read consumer identity 
This system is not registered to Red Hat Subscription Management. You can use  
subscription-manager to register. 
Last metadata expiration check: 0:00:19 ago on Tue 27 Apr 2021 05:04:27 PM CST. 
Dependencies resolved. 
=============================================================================== Package        Arch   Version    Repository   Size 
=============================================================================== 
Installing: mariadb             x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b   AppStream   6.2 M mariadb-server      x86_64 3:10.3.11-1.module+el8+cfa4f87b    AppStream  16 M 
Installing dependencies: mariadb-common      x86_64 3:10.3.11-1.module+el8+cfa4f87b    AppStream  62 k mariadb-connector-c   x86_64 3.0.7-1.el8                        AppStream 148 k mariadb-connector-c-config noarch 3.0.7-1.el8                  AppStream  13 k mariadb-errmsg      x86_64 3:10.3.11-1.module+el8+cfa4f87b    AppStream 232 k perl-DBD-MySQL      x86_64 4.046-2.module+el8+0650e81c        AppStream 156 k 
Installing weak dependencies: mariadb-backup      x86_64 3:10.3.11-1.module+el8+cfa4f87b    AppStream 6.2 M mariadb-gssapi-server x86_64 3:10.3.11-1.module                 AppStream  49 k mariadb-server-utils  x86_64 3:10.3.11-1.module+el8             AppStream 1.6 M 
Enabling module streams: mariadb                    10.3 perl-DBD-MySQL             4.046 Transaction Summary 
=============================================================================== 
Install  10 Packages 
………………省略部分輸出信息……………… 
Installed: mariadb-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64                           mariadb-server-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64                    mariadb-backup-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64                    mariadb-gssapi-server-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64             mariadb-server-utils-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64              mariadb-common-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64                    mariadb-connector-c-3.0.7-1.el8.x86_64                                        mariadb-connector-c-config-3.0.7-1.el8.noarch                                 mariadb-errmsg-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64                    perl-DBD-MySQL-4.046-2.module+el8+2515+0650e81c.x86_64                        Complete! 

在安裝完畢后,記得啟動服務程序,并將其加入到開機啟動項中:?

[root@linuxprobe~]# systemctl start  mariadb 
[root@linuxprobe~]# systemctl enable mariadb 
Created symlink /etc/systemd/system/mysql.service→ /usr/lib/systemd/system/ 
mariadb.service. 
Created symlink /etc/systemd/system/mysqld.service→ /usr/lib/systemd/system/ 
mariadb.service. 
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service→ / 
usr/lib/systemd/system/mariadb.service. 

在確認 mariadb 數據庫軟件程序安裝完畢并成功啟動后請不要立即使用。為了確保數據庫的安全性和正常運轉,需要先對數據庫程序進行初始化操作。這個初始化操作涉及下面 5個步驟。?
? ?設置 root 管理員在數據庫中的密碼值(注意,該密碼并非 root 管理員在系統中的密碼,這里的密碼值默認應該為空,可直接按回車鍵)。?
? ?設置 root 管理員在數據庫中的專有密碼。?
? ?刪除匿名用戶,并使用 root 管理員從遠程登錄數據庫,以確保數據庫上運行的業務的安全性。?
? ?刪除默認的測試數據庫,取消測試數據庫的一系列訪問權限。?
? ?刷新授權列表,讓初始化的設定立即生效。?
對于上述數據庫初始化的操作步驟,已經在下面的輸出信息旁邊進行了簡單注釋,確保各位讀者更直觀地了解要輸入的內容:?

[root@linuxprobe~]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current 
password for the root user.  If you've just installed MariaDB, and 
you haven't set the root password yet, the password will be blank, 
so you should just press enter here. Enter current password for root (enter for none): (輸入管理員原始密碼,默認為空值,直接回車即可)OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB 
root user without the proper authorisation. Set root password? [Y/n] y  (設置管理員密碼)
New password:   (輸入新的密碼)
Re-enter new password:   (再次輸入密碼)
Password updated successfully! 
Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone 
to log into MariaDB without having to have a user account created for 
them.  This is intended only for testing, and to make the installation 
go a bit smoother.  You should remove them before moving into a 
production environment. Remove anonymous users? [Y/n] y  (刪除匿名用戶)... Success! Normally, root should only be allowed to connect from 'localhost'.  This 
ensures that someone cannot guess at the root password from the network. 
Disallow root login remotely? [Y/n] y  (禁止管理員從遠程登錄)... Success! By default, MariaDB comes with a database named 'test' that anyone can 
access.  This is also intended only for testing, and should be removed 
before moving into a production environment. Remove test database and access to it? [Y/n] y  (刪除測試數據庫及其權限)- Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far 
will take effect immediately. Reload privilege tables now? [Y/n] y  (刷新授權表,讓初始化設定立即生效)... Success! Cleaning up... All done!  If you've completed all of the above steps, your MariaDB 
installation should now be secure. Thanks for using MariaDB! 

在很多生產環境中都需要使用站庫分離的技術(即網站和數據庫不在同一個服務器上),如果需要讓 root 管理員遠程訪問數據庫,可在上面的初始化操作中設置策略,以允許 root 管理員從遠程訪問。然后還需要設置防火墻,使其放行對數據庫服務程序的訪問請求。數據庫服務程序默認會占用 3306 端口,在防火墻策略中服務名稱統一叫作 mysql:?

[root@linuxprobe~]# firewall-cmd --permanent --add-service=mysql 
success 
[root@linuxprobe~]# firewall-cmd --reload 
success 

一切準備就緒。現在我們將首次登錄 MariaDB 數據庫。管理數據庫的命令為 mysql,其中,-u 參數用來指定以 root 管理員的身份登錄,而-p 參數用來驗證該用戶在數據庫中的密碼值。?

[root@linuxprobe~]# mysql -u root -p 
Enter password:   (輸入剛才設置的管理員密碼后敲擊回車)
Welcome to the MariaDB monitor.  Commands end with ; or \g. 
Your MariaDB connection id is 16 
Server version: 10.3.11-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. 

初次使用數據庫管理工具的讀者,可以輸入 help 命令查看 mariadb 服務能做的操作,語句的用法與 MySQL 一模一樣:?

MariaDB [(none)]> help 
General information about MariaDB can be found at http://mariadb.org List of all MySQL commands: 
Note that all text commands must be first on line and end with ';' 
?         (\?) Synonym for `help'. 
clear     (\c) Clear the current input statement. 
connect   (\r) Reconnect to the server. Optional arguments are db and host. 
delimiter (\d) Set statement delimiter. 
edit      (\e) Edit command with $EDITOR. 
ego       (\G) Send command to mysql server, display result vertically. 
exit      (\q) Exit mysql. Same as quit. 
go        (\g) Send command to mysql server. 
help      (\h) Display this help. 
nopager   (\n) Disable pager, print to stdout. 
notee     (\t) Don't write into outfile. 
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER. 
print     (\p) Print current command. 
prompt    (\R) Change your mysql prompt. 
quit      (\q) Quit mysql. 
rehash    (\#) Rebuild completion hash. 
source    (\.) Execute an SQL script file. Takes a file name as an argument. 
status    (\s) Get status information from the server. 
system    (\!) Execute a system shell command. 
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile. 
use       (\u) Use another database. Takes database name as argument. 
charset   (\C) Switch to another charset. Might be needed for processing binlog 
with multi-byte charsets. 
warnings  (\W) Show warnings after every statement. 
nowarning (\w) Don't show warnings after every statement. For server side help, type 'help contents' 

在登錄 MariaDB 數據庫后執行數據庫命令時,都需要在命令后面用分號(;)結尾,這也是與 Linux 命令最顯著的區別。大家需要慢慢習慣數據庫命令的這種設定。下面執行如下命令查看數據庫管理系統中當前都有哪些數據庫:?

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

小試牛刀過后,接下來使用數據庫命令將 root 管理員在數據庫管理系統中的密碼值修改為 linuxprobe。這樣退出后再嘗試登錄,如果還堅持輸入原先的密碼,則將提示訪問失敗。?

MariaDB [(none)]> SET password = PASSWORD('linuxprobe'); 
Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> exit 
Bye 
[root@linuxprobe~]# mysql -u root -p 
Enter password:   (此處輸入管理員在數據庫中的舊密碼)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 

輸入新密碼(linuxprobe)后,便可順利進入數據庫管理工具中:?

[root@linuxprobe~]# mysql -u root -p 
Enter password:   (此處輸入管理員在數據庫中的新密碼)
Welcome to the MariaDB monitor.  Commands end with ; or \g. 
Your MariaDB connection id is 20 
Server version: 10.3.11-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. 

3.? 管理用戶以及授權?

在生產環境中總不能一直“死啃”root 管理員。為了保障數據庫系統的安全性,以及讓其他用戶協同管理數據庫,可以在 MariaDB 數據庫管理系統中為他們創建多個專用的數據庫管理用戶,然后再分配合理的權限,以滿足他們的工作需求。為此,可使用 root 管理員登錄數據庫管理系統,然后按照“CREATE USER 用戶名@主機名 IDENTIFIED BY '密碼';”的格式創建數據庫管理用戶。再次提醒大家,一定不要忘記每條數據庫命令后面的分號(;)

MariaDB [(none)]> CREATE USER luke@localhost IDENTIFIED BY 'linuxprobe'; 
Query OK, 0 rows affected (0.00 sec) 

?創建的用戶信息可以使用 SELECT 命令語句來查詢。下面命令查詢的是用戶 luke 的主機名稱、用戶名稱以及經過加密的密碼值信息:?

MariaDB [(none)]> use mysql; 
Database changed 
MariaDB [mysql]> SELECT HOST,USER,PASSWORD FROM user WHERE USER="luke"; 
+-----------+------+-------------------------------------------+ 
| HOST      | USER | PASSWORD                                  | 
+-----------+------+-------------------------------------------+ 
| localhost | luke | *55D9962586BE75F4B7D421E6655973DB07D6869F | 
+-----------+------+-------------------------------------------+ 
1 row in set (0.001 sec) 

不過,用戶 luke 僅僅是一位普通用戶,沒有數據庫的任何操作權限。不信的話,可以切換到 luke 用戶來查詢數據庫管理系統中當前都有哪些數據庫。可以發現,該用戶甚至沒法查看完整的數據庫列表(剛才使用 root 用戶時可以查看到 3 個數據庫列表):?

MariaDB [mysql]> exit 
Bye 
[root@linuxprobe~]# mysql -u luke -p 
Enter password:  (輸入luke用戶的數據庫密碼)  
Welcome to the MariaDB monitor.  Commands end with ; or \g. 
Your MariaDB connection id is 21 
Server version: 10.3.11-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)]> SHOW databases; 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
+--------------------+ 
1 row in set (0.001 sec) 

數據庫管理系統所使用的命令一般都比較復雜。我們以 GRANT 命令為例進行說明。GRANT 命令用于為用戶進行授權,其常見格式如表所示。在使用 GRANT 命令時需要寫上要賦予的權限、數據庫及表單名稱,以及對應的用戶及主機信息。其實,只要理解了命令中每個字段的功能含義,也就不覺得命令復雜難懂了。?

當然,用戶的授權工作肯定是需要數據庫管理員來執行的。下面以 root 管理員的身份登錄到數據庫管理系統中,針對 mysql 數據庫中的 user 表單向用戶 luke 授予查詢、更新、刪除以及插入等權限。?

[root@linuxprobe~]# mysql -u root -p 
Enter password:   (輸入管理員的數據庫密碼)
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]> GRANT SELECT,UPDATE,DELETE,INSERT ON mysql.user TO luke@localhost; 
Query OK, 0 rows affected (0.001 sec) 

在執行完上述授權操作之后,我們再查看一下用戶 luke 的權限:?

MariaDB [(none)]> SHOW GRANTS FOR luke@localhost; 
+------------------------------------------------------------------+ 
| Grants for luke@localhost                                        | 
+------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD  
'*55D9962586BE75F4B7D421E6655973DB07D6869F' | 
| GRANT SELECT, INSERT, UPDATE, DELETE ON `mysql`.`user` TO 'luke'@'localhost'     | 
+-----------------------------------------------------------------------------+ 
2 rows in set (0.000 sec) 

上面輸出信息中顯示用戶 luke已經擁有了針對mysql 數據庫中 user 表單的一系列權限了。這時我們再切換到用戶 luke,此時就能夠看到 mysql 數據庫了,而且還能看到表單 user(其余表單會因無權限而被繼續隱藏):?

[root@linuxprobe~]# mysql -u luke -p 
Enter password:  (輸入luke用戶的數據庫密碼)  MariaDB [(none)]> SHOW databases; 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| mysql              | 
+--------------------+ 
2 rows in set (0.000 sec) MariaDB [(none)]> use mysql; 
Database changed MariaDB [mysql]> SHOW tables; 
+-----------------+ 
| Tables_in_mysql  | 
+-----------------+ 
| user            | 
+-----------------+ 
1 row in set (0.001 sec) MariaDB [mysql]> exit 
Byes 

大家不要心急,我們接下來會慢慢學習數據庫內容的修改方法。當前,先切換回 root 管理員用戶,移除剛才的授權。?

[root@linuxprobe~]# mysql -u root -p 
Enter password:   (輸入管理員的數據庫密碼)
MariaDB [(none)]> use mysql; 
Database changed 
MariaDB [(none)]> REVOKE SELECT,UPDATE,DELETE,INSERT ON mysql.user FROM  
luke@localhost; 
Query OK, 0 rows affected (0.00 sec) 

可以看到,除了移除授權的命令(REVOKE)與授權命令(GRANTS)不同之外,其余部分都是一致的。這不僅好記而且也容易理解。執行移除授權命令后,再來查看用戶 luke 的信息:?

MariaDB [(none)]> SHOW GRANTS FOR luke@localhost; 
+-----------------------------------------------------------------+ 
| Grants for luke@localhost                                           | 
+-----------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD  
'*55D9962586BE75F4B7D421E6655973DB07D6869F' | 
+------------------------------------------------------------------+ 
1 row in set (0.001 sec) 

不再需要某個用戶時,可以直接用 DROP 命令將其刪除:

MariaDB [(none)]> DROP user luke@localhost; 
Query OK, 0 rows affected (0.000 sec) 

4.? 創建數據庫與表單?

在 MariaDB 數據庫管理系統中,一個數據庫可以存放多個數據表,數據表單是數據庫中最重要最核心的內容。我們可以根據自己的需求自定義數據庫表結構,然后在其中合理地存放數據,以便后期輕松地維護和修改。表羅列了后文中將使用到的數據庫命令以及對應的作用。?

建立數據庫是管理數據的起點。現在嘗試創建一個名為 linuxprobe 的數據庫,然后再查看數據庫列表,此時就能看到它了:?

MariaDB [(none)]>  CREATE DATABASE linuxprobe; 
Query OK, 1 row affected (0.001 sec) MariaDB [(none)]>  SHOW databases; 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| linuxprobe         | 
| mysql              | 
| performance_schema | 
+--------------------+ 
4 rows in set (0.001 sec) 

MariaDB 與 MySQL 同屬于關系型數據庫(Relational ?Database ?Management ?System,RDBMS)。關系型數據庫有些類似于表格的概念,一個關系型數據庫由一個或多個表格/表單組成,如圖 18-2 所示。?
在圖 18-2 中,表頭表示每一列的名稱;列表示具有相同數據類型的數據集合;行表示用來描述事物的具體信息;值表示行的具體信息,每個值均與該列的其他數據類型相同;鍵表示用來識別某個特定事物的方法,在當前列中具有唯一性。?

比如,在新建的 linuxprobe 數據庫中創建表單 mybook,然后進行表單的初始化,即定義存儲數據內容的結構。我們分別定義 3 個字段項,其中,字符型字段 name(長度為 15 字符)用來存放圖書名稱,整型字段 price 和 pages 分別存儲圖書的價格和頁數。當執行完下述命令之后,就可以看到表單的結構信息了:?

MariaDB [(none)]> use linuxprobe; 
Database changed 
MariaDB [linuxprobe]> CREATE TABLE mybook (name char(15),price int,pages int); 
Query OK, 0 rows affected (0.009 sec) MariaDB [linuxprobe]> DESCRIBE mybook; 
+-------+----------+------+-----+---------+-------+ 
| Field | Type     | Null | Key | Default | Extra | 
+-------+----------+------+-----+---------+-------+ 
| name  | char(15) | YES  |     | NULL    |       | 
| price | int(11)  | YES  |     | NULL    |       | 
| pages | int(11)  | YES  |     | NULL    |       | 
+-------+----------+------+-----+---------+-------+ 
3 rows in set (0.002 sec) 

5.? 管理表單及數據

接下來向 mybook 數據表單中插入一條圖書信息。為此需要使用 INSERT 命令,并在命令中寫清表單名稱以及對應的字段項。執行該命令之后即可完成圖書寫入信息。下面使用該命令插入一條圖書信息,其中書名為 linuxprobe,價格和頁數分別是 60 元和 518 頁。在命令執行后也就意味著圖書信息已經成功寫入到數據表單中,然后就可以查詢表單中的內容了。在使用 SELECT 命令查詢表單內容時,需要加上想要查詢的字段;如果想查看表單中的所有內容,則可以使用星號(*)通配符來顯示:?

MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe','60', '518'); 
Query OK, 1 row affected (0.001 sec) MariaDB [linuxprobe]> SELECT * from mybook; 
+------------+-------+-------+ 
| name       | price | pages | 
+------------+-------+-------+ 
| linuxprobe |    60 |   518 | 
+------------+-------+-------+ 
1 row in set (0.000 sec) 

對數據庫運維人員來講,需要做好 4 門功課—增、刪、改、查。這意味著創建數據表單并在其中插入內容僅僅是第一步,還需要掌握數據表單內容的修改方法。例如,可以使用UPDATE 命令將剛才插入的 linuxprobe 圖書信息的價格修改為 55 元,然后再使用 SELECT 命令查看該圖書的名稱和定價信息。注意,因為這里只查看圖書的名稱和定價,而不涉及頁碼,所以無須再用星號通配符來顯示所有內容。?

MariaDB [linuxprobe]> UPDATE mybook SET price=55 ; 
Query OK, 1 row affected (0.002 sec) 
Rows matched: 1  Changed: 1  Warnings: 0 MariaDB [linuxprobe]> SELECT name,price FROM mybook; 
+------------+-------+ 
| name       | price | 
+------------+-------+ 
| linuxprobe |    55 | 
+------------+-------+ 
1 row in set (0.000 sec) 

想修改指定的某一條記錄?沒問題的,用 WHERE 命令進行限定即可。我們先插入兩條圖書信息:?

MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxcool','85', '300'); 
Query OK, 1 row affected (0.001 sec) 
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxdown','105', '500'); 
Query OK, 1 row affected (0.001 sec) 

然后使用 WHERE 命令僅將名稱為 linuxcool 的圖書價格修改為 60 元,不影響其他圖書信息:?

MariaDB [linuxprobe]> UPDATE mybook SET price=60 where name='linuxcool'; 
Query OK, 1 row affected (0.001 sec) 
Rows matched: 1  Changed: 1  Warnings: 0 MariaDB [linuxprobe]> select * from mybook; 
+------------+-------+-------+ 
| name       | price | pages | 
+------------+-------+-------+ 
| linuxprobe |    55 |   518 | 
| linuxcool  |    60 |   300 | 
| linuxdown  |   105 |   500 | 
+------------+-------+-------+ 
3 rows in set (0.001 sec) 

還可以使用 DELETE 命令刪除某個數據表單中的內容。下面使用 DELETE 命令刪除數據表單 mybook 中的所有內容,然后再查看該表單中的內容,可以發現該表單內容為空了:?

MariaDB [linuxprobe]> DELETE FROM mybook; 
Query OK, 3 row affected (0.001 sec) MariaDB [linuxprobe]> SELECT * FROM mybook; 
Empty set (0.000 sec) 

一般來講,數據表單中會存放成千上萬條數據信息。比如我們剛剛創建的用于保存圖書信息的 mybook 表單,隨著時間的推移,里面的圖書信息也會越來越多。在這樣的情況下,如果只想查看其價格大于某個數值的圖書,又該如何定義查詢語句呢??
下面先使用 INSERT 插入命令依次插入 4 條圖書信息:?

MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprob
e1','30','518'); 
Query OK, 1 row affected (0.05 sec) 
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprob
e2','50','518'); 
Query OK, 1 row affected (0.05 sec) 
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprob
e3','80','518'); 
Query OK, 1 row affected (0.01 sec) 
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe
4','100','518'); 
Query OK, 1 row affected (0.00 sec) 

要想讓查詢結果更加精準,就需要結合使用 SELECT 與 WHERE 命令了。其中,WHERE命令是在數據庫中進行匹配查詢的條件命令。通過設置查詢條件,就可以僅查找出符合該條件的數據。表 18-3 列出了 WHERE 命令中常用的查詢參數以及作用。?

現在進入動手環節。分別在 mybook 表單中查找出價格大于 75 元或價格不等于 80 元的圖書,其對應的命令如下所示。在熟悉了這兩個查詢條件之后,大家可以自行嘗試精確查找圖書名為 linuxprobe2 的圖書信息。?

MariaDB [linuxprobe]> SELECT * FROM mybook WHERE price>75; 
+-------------+-------+-------+ 
| name        | price | pages | 
+-------------+-------+-------+ 
| linuxprobe3 |    80 |   518 | 
| linuxprobe4 |   100 |   518 | 
+-------------+-------+-------+ 
2 rows in set (0.001 sec) MariaDB [linuxprobe]> SELECT * FROM mybook WHERE price!=80; 
+-------------+-------+-------+ 
| name        | price | pages | 
+-------------+-------+-------+ 
| linuxprobe1 |    30 |   518 | 
| linuxprobe2 |    50 |   518 | 
| linuxprobe4 |   100 |   518 | 
+-------------+-------+-------+ 
3 rows in set (0.000 sec) 

匹配的條件越多,獲得的信息就越精準。在 WHERE 命令的后面追加 AND 操作符可以進行多次匹配。例如,執行下述命令,找到價格為 30 元、頁數為 518 的圖書的名稱:?

MariaDB [linuxprobe]> SELECT * from mybook WHERE price=30 AND pages=518 ; 
+-------------+-------+-------+ 
| name         | price | pages| 
+-------------+-------+-------+ 
| linuxprobe1 |    30 |   518 | 
+-------------+-------+-------+ 
1 row in set (0.000 sec) 

6.? 數據庫的備份及恢復

前文提到,本書的技術主線是 Linux 系統的運維方向,不會對數據庫管理系統的操作進行深入的講解,因此大家掌握了上面這些基本的數據庫操作命令之后就足夠了。下面要講解的是數據庫的備份以及恢復,這些知識比較實用,希望大家能夠掌握。?
mysqldump 命令用于備份數據庫數據,格式為“mysqldump [參數] [數據庫名稱]”。其中參數與 mysql 命令大致相同,-u 參數用于定義登錄數據庫的用戶名稱,-p 參數表示密碼提示符。下面將 linuxprobe 數據庫中的內容導出為一個文件,并保存到 root 管理員的家目錄中:

[root@linuxprobe~]# mysqldump -u root -p linuxprobe > /root/linuxprobeDB.dump 
Enter password:   (輸入管理員的數據庫密碼)

然后進入 MariaDB 數據庫管理系統,徹底刪除 linuxprobe 數據庫,這樣 mybook 數據表單也將被徹底刪除。然后重新建立 linuxprobe 數據庫:?

[root@linuxprobe~]# mysql -u root -p 
Enter password:  (輸入管理員的數據庫密碼) MariaDB [(none)]> DROP DATABASE linuxprobe; 
Query OK, 1 row affected (0.04 sec) MariaDB [(none)]> SHOW databases; 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| mysql              | 
| performance_schema | 
+--------------------+ 
3 rows in set (0.02 sec) MariaDB [(none)]> CREATE DATABASE linuxprobe; 
Query OK, 1 row affected (0.00 sec) 

接下來是見證數據恢復效果的時刻!使用輸入重定向符把剛剛備份的數據庫文件導入到mysql 命令中,然后執行該命令。接下來登錄 MariaDB 數據庫,就又能看到 linuxprobe 數據庫以及 mybook 數據表單了。數據庫恢復成功!

[root@linuxprobe~]# mysql -u root -p linuxprobe < /root/linuxprobeDB.dump 
Enter password:   (輸入管理員的數據庫密碼)
[root@linuxprobe~]# mysql -u root -p 
Enter password:   (輸入管理員的數據庫密碼)
MariaDB [(none)]> use linuxprobe; 
Database changed MariaDB [linuxprobe]> SHOW tables; 
+----------------------+ 
| Tables_in_linuxprobe  | 
+----------------------+ 
| mybook               | 
+----------------------+ 
1 row in set (0.000 sec) MariaDB [linuxprobe]> describe mybook; 
+-------+----------+------+-----+---------+-------+ 
| Field | Type     | Null | Key | Default | Extra | 
+-------+----------+------+-----+---------+-------+ 
| name  | char(15) | YES  |     | NULL    |       | 
| price | int(11)  | YES  |     | NULL    |       | 
| pages | int(11)  | YES  |     | NULL    |       | 
+-------+----------+------+-----+---------+-------+ 
3 rows in set (0.002 sec) 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62336.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jenkins授權策略的配置

簡介:在Jenkins中,通過系統管理下的“Manage and Assign Roles”以及“Manage Roles”來配置角色,是實現權限管理的關鍵步驟。以下是關于這兩個功能配置角色時的意義及注意事項的詳細解釋: 一、配置角色的意義 實現權限控制: 通過創建和分配角色,可以精確地控制不同用戶…

centos 7.9 安裝jdk1.8 mysql redis等

環境&#xff1a; centos 7.9 1、安裝OpenJDK 1.8 步驟 1: 更新系統 首先&#xff0c;確保你的系統是最新的&#xff0c;執行以下命令來更新所有軟件包&#xff1a; sudo yum update -y步驟 2: 安裝 OpenJDK 1.8 CentOS 7 默認的包管理器是 yum&#xff0c;你可以通過以下命…

計算機鍵盤的演變 | 鍵盤鍵名稱及其功能 | 鍵盤指法

注&#xff1a;本篇為 “鍵盤的演變及其功能” 相關幾篇文章合輯。 英文部分機翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 鍵盤的演變&#xff1a;從打字機到技術奇跡 Introduction 介紹 The keyboard has journeyed from a humble mechanical…

Methods and Initializers

1 Method Declarations 這回不從comipler開始&#xff0c;從runtime開始。 GC也需要follow 接下來難點在于如何填充這些表 2 Compiling method declarations 難點&#xff1a; 一個類可以聲明任意數量的方法。運行時需要查找并綁定所有這些方法。如果將這些方法都打包到一條…

飛飛5.4游戲源碼(客戶端+服務端+工具完整源代碼+5.3fix+5.4patch+數據庫可編譯進游戲)

飛飛5.4游戲源碼&#xff08;客戶端服務端工具完整源代碼5.3fix5.4patch數據庫可編譯進游戲&#xff09; 下載地址&#xff1a; 通過網盤分享的文件&#xff1a;【源碼】飛飛5.4游戲源碼&#xff08;客戶端服務端工具完整源代碼5.3fix5.4patch數據庫可編譯進游戲&#xff09; 鏈…

開源C代碼之路:一、Gitee

開源c代碼之路&#xff1a;一&#xff0c;Gitee 前言1、開源項目2、從哪里找&#xff1f;3、舉個例子4、總結&#xff1a; 本系列回顧清單開源代碼示例 前言 從開源開發的角度&#xff0c;由淺入深&#xff0c;一步步初探C語言編程的入門之路。 本篇講解&#xff1a;Gitee 1…

基于協同過濾算法的寵物用品商城的設計與實現(計算機畢業設計)Java Spring 衍生為任何商城系統 畢業論文

系統合集跳轉 源碼獲取鏈接 一、系統環境 運行環境: 最好是java jdk 1.8&#xff0c;我們在這個平臺上運行的。其他版本理論上也可以。 IDE環境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat環境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系統…

算法-字符串-165.比較版本號

一、題目 二、思路解析 1.思路&#xff1a; 比較的是兩個版本號它們以“.”作為分割的部分的有效值&#xff08;即數值&#xff09;是否一致 2.常用方法&#xff1a; 1.s.split("\\規則")&#xff0c;將字符串按參數規則進行分割并存儲在字符串數組中 String[] str …

MySQL(四)--索引

MySQL的服務器,本質是在內存中的,那么所有對數據的CURD操作,全都是在對內存進行操作。 而,提高數據的CURD操作的效率,有兩種方式:1、組織數據的格式(數據結構);2、算法。 而,數據結構,就是索引,即組織數據的格式。 1、沒有索引的問題 索引:提高數據庫的性能,索…

C# (WinForms) 使用 iTextSharp 庫將圖片轉換為 PDF

iTextSharp簡介 iTextSharp 是一個開源的 .NET 庫&#xff0c;主要用于創建和操作 PDF 文檔。它是 iText 的 .NET 版本&#xff0c;iText 是一個廣泛使用的 Java 庫。iTextSharp 繼承了 iText 的核心功能并進行了適應 .NET 平臺的調整。 iTextSharp 的主要功能包括&#xff1a…

ubuntu防火墻設置(四)——iptables語法與防火墻基礎配置

前面介紹的ufw和firewall-config均為iptables的前端&#xff0c; 分別適合個人用戶和服務器網絡管理 下面介紹底層——ipables iptables是一個強大的工具&#xff0c;用于配置Linux系統的防火墻。以下是一些基本的使用方法和示例&#xff0c;幫助您入門&#xff1a; 基本語法 …

【中間件開發】Redis基礎命令詳解及概念介紹

文章目錄 前言一、Redis相關命令詳解及原理1.1 string、set、zset、list、hash1.1.1 string1.1.2 list1.1.3 hash1.1.4 set1.1.5 zset 1.2 分布式鎖的實現1.3 lua腳本解決ACID原子性1.4 Redis事務的ACID性質分析 二、Redis協議與異步方式2.1 Redis協議解析2.1.1 redis pipeline…

力扣每日一題 - 999. 可以被一步捕獲的棋子數

題目 還需要你前往力扣官網查看詳細的題目要求 地址 1.給定一個 8 x 8 的棋盤&#xff0c;只有一個 白色的車&#xff0c;用字符 R 表示。棋盤上還可能存在白色的象 B 以及黑色的卒 p。空方塊用字符 . 表示。2.車可以按水平或豎直方向&#xff08;上&#xff0c;下&#xff0c;…

[UVM]在UVM環境中加入C++內存模塊

摘要&#xff1a;要在UVM環境中實現一個內存模塊并存入數據&#xff0c;您可以遵循以下步驟。這里會涉及C的內存建模和UVM的SystemVerilog部分的接口。在高層次上&#xff0c;我們將描述如何在C中實現內存模型并通過UVM的DPI接口訪問它。 一、C內存模型 首先&#xff0c;在C中…

學習記錄,正則表達式, 隱式轉換

正則表達式 \\&#xff1a;表示正則表達式 W: 表示一個非字&#xff08;不是一個字&#xff0c;例如&#xff1a;空格&#xff0c;逗號&#xff0c;句號&#xff09; W: 多個非字 基本組成部分 1.字符字面量&#xff1a; 普通字符&#xff1a;在正則表達式中&#xff0c;大…

Selenium是廣泛使用的模擬瀏覽器運行的庫

簡介 Selenium是廣泛使用的模擬瀏覽器運行的庫&#xff0c;它是一個用于Web應用程序測試的工具。 Selenium測試直接運行在瀏覽器中&#xff0c;就像真正的用戶在操作一樣&#xff0c;并且支持大多數現代 Web 瀏覽器。 環境 安裝 pip install selenium下載Chrome驅動 系統環境…

網絡練級寶典-> UDP傳輸層協議

目錄 傳輸層 端口號 端口號和進程的關系 UDP協議 UDP協議格式 UDP數據封裝&#xff1a; UDP數據分用&#xff1a; 面向數據報 UDP的緩沖區 UDP的缺點 基于UDP的應用層協議 傳輸層 端口號 我們知道端口號對應的其實就是一個進程的pid&#xff0c;在操作系統中二者的…

Redis原理—1.Redis數據結構

大綱 1.Redis的數據結構 2.Redis的SDS 3.Redis的鏈表 4.Redis的字典 5.Redis的跳躍表 6.Redis的整數集合 7.Redis的壓縮列表 8.Redis的對象 9.Redis對象的幾個關鍵屬性 10.Redis的單線程為什么這么快 11.Redis的典型應用場景和說明 12.Redis的相關命令說明 1.Redis…

【Vue3中Router使用】

Vue3中Router使用 1. 安裝vue-router組件2. 建兩個測試頁面2.1 測試頁面Home.vue2.2 測試頁面Category.vue 3. 創建路由對象4. 在入口main.js中引入router把App.vue改成路由頁面5. 測試5.1 關閉檢查解決ESlint報錯5.2 改文件名解決ESlint檢查報錯測試WebHashHistory 和WebHisto…

python拆分Excel文件

按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文檔樣式如下&#xff1a; 結果&#xff1a;紅色是按照Sheet名拆出的&#xff0c;藍色和橙色是某個Sheet按照某列的不同值拆分的。 代碼&#xff1a; # -*- coding: utf-8 -*- """ 拆分excel文件——按照…