溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql與MariaDB的交互過程

發(fā)布時(shí)間:2021-09-16 09:52:20 來源:億速云 閱讀:115 作者:chen 欄目:數(shù)據(jù)庫

本篇內(nèi)容主要講解“mysql與MariaDB的交互過程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“mysql與MariaDB的交互過程”吧!

一、與 MariaDB 交互

你可以使用 mysql 命令與 MariaDB 進(jìn)行交互。首先使用子命令 ping 確認(rèn)你的服務(wù)是運(yùn)行著的,在提示后輸入密碼:

$ mysqladmin -u root -p ping Enter password: mysqld is alive

為了易于讀者理解,打開一個(gè)交互式的 MariaDB 會話:

$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. [...] Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  MariaDB [(none)]>

你現(xiàn)在是在一個(gè) MariaDB 子 shell 中,提示符是 MariaDB 提示符。普通的 Bash 命令在這里不能使用,只能用 MariaDB  命令。輸入 help (或 ?)查看命令列表。這些是你的 MariaDB shell 的管理命令,使用它們可以定制你的 shell,但它們不屬于 SQL  語言。

二、學(xué)習(xí) SQL 基本知識

結(jié)構(gòu)化查詢語言是基于它們的能力定義的:一種通過有規(guī)則且一致的語法來查詢數(shù)據(jù)庫中的內(nèi)容以得到有用的結(jié)果的方法。SQL  看起來像是普通的英文語句,有一點(diǎn)點(diǎn)生硬。例如,如果你登入數(shù)據(jù)庫服務(wù)器,想查看有哪些庫,輸入 SHOW DATABASES; 并回車就能看到結(jié)果。

SQL 命令以分號作為結(jié)尾。如果你忘記輸入分號,MariaDB  會認(rèn)為你是想在下一行繼續(xù)輸入你的查詢命令,在下一行你可以繼續(xù)輸入命令也可以輸入分號結(jié)束命令。

MariaDB [(NONE)]> SHOW DATABASES; +--------------------+ | DATABASE           | +--------------------+ | information_schema | | mysql              | | performance_schema | | test               | +--------------------+ 4 ROWS IN SET (0.000 sec)

上面的例子顯示當(dāng)前有四個(gè)數(shù)據(jù)庫:information_schema、mysql、performance_schema 和 test。你必須指定  MariaDB 使用哪個(gè)庫,才能對該庫使用查詢語句。指定數(shù)據(jù)庫的命令是 use。當(dāng)你選擇了一個(gè)庫后,MariaDB 提示框會切換為選擇的庫。

MariaDB [(NONE)]> USE test; MariaDB [(test)]>

1. 顯示數(shù)據(jù)庫的表

數(shù)據(jù)庫里有表,與電子表格類似:有一系列的行(在數(shù)據(jù)庫中稱為記錄)和列。一個(gè)行和一個(gè)列唯一確定一個(gè)字段。

查看一個(gè)數(shù)據(jù)庫中可用的表(可以理解為多表單電子表格中的一頁),使用 SQL 關(guān)鍵字 SHOW:

MariaDB [(test)]> SHOW TABLES; empty SET

test 數(shù)據(jù)庫是空的,所以使用 use 命令切換到 mysql 數(shù)據(jù)庫:

MariaDB [(test)]> USE mysql; MariaDB [(mysql)]> SHOW TABLES;  +---------------------------+ | Tables_in_mysql           | +---------------------------+ | column_stats              | | columns_priv              | | db                        | [...] | time_zone_transition_type | | transaction_registry      | | USER                      | +---------------------------+ 31 ROWS IN SET (0.000 sec)

這個(gè)數(shù)據(jù)庫中有很多表!mysql 數(shù)據(jù)庫是這個(gè) MariaDB  實(shí)例的系統(tǒng)管理數(shù)據(jù)庫。它里面包含重要數(shù)據(jù),比如用來管理數(shù)據(jù)庫權(quán)限的用戶結(jié)構(gòu)。這個(gè)數(shù)據(jù)庫很重要,你不需要經(jīng)常直接與它交互,但是使用 SQL  腳本來操作它卻很常見。當(dāng)你學(xué)習(xí) MariaDB 時(shí)理解 mysql 數(shù)據(jù)庫很有用,因?yàn)樗兄谡f明一些基本的 SQL 命令。

2. 檢查一個(gè)表

這個(gè)實(shí)例的 mysql 數(shù)據(jù)庫的最后一個(gè)表名為 USER。這個(gè)表包含了可以訪問這個(gè)數(shù)據(jù)庫的用戶。當(dāng)前里面只有一個(gè) root  用戶,但是你可以添加不同權(quán)限的用戶,賦予它們查看、更新或創(chuàng)建數(shù)據(jù)的權(quán)限。你可以查看一個(gè)表的列首來了解一個(gè) MariaDB 用戶的所有屬性:

> SHOW COLUMNS IN USER; MariaDB [mysql]> SHOW COLUMNS IN USER; +-------------+---------------+------+-----+----------+ | FIELD       | TYPE          | NULL | KEY | DEFAULT  | +-------------+---------------+------+-----+----------+ | 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        | [...] 47 ROWS IN SET (0.001 sec)

3. 創(chuàng)建一個(gè)新的用戶

不論你是否需要一個(gè)普通的賬號來管理數(shù)據(jù)庫或者為計(jì)算機(jī)配置數(shù)據(jù)庫(例如安裝 WordPress、Drupal 或 Joomla時(shí)),在 MariaDB  中多建一個(gè)用戶賬號是很普遍的。你可以通過向 mysql 數(shù)據(jù)庫的 USER 表中添加一個(gè)用戶或使用 SQL 關(guān)鍵字 CREATE 來提示 MariaDB  創(chuàng)建一個(gè) MariaDB 用戶。使用 CREATE 來創(chuàng)建新用戶會默認(rèn)執(zhí)行一些有用的方法,因此你不需要手動生成所有的信息:

> CREATE USER 'tux'@'localhost' IDENTIFIED BY 'really_secure_password';

4. 查看表的字段

你可以使用 SELECT 關(guān)鍵字來查看數(shù)據(jù)庫表的字段和值。這本例中,你創(chuàng)建了一個(gè)名為 tux 的用戶,因此查詢 USER 表中的列:

> SELECT USER,host FROM USER; +------+------------+ | USER | host       | +------+------------+ | root | localhost  | [...] | tux  | localhost  | +------+------------+ 7 ROWS IN SET (0.000 sec)

5. 為一個(gè)用戶賦予權(quán)限

通過查看 USER 表列出的信息,你可以看到用戶的狀態(tài)。例如,新用戶 tux 對這個(gè)數(shù)據(jù)庫沒有任何權(quán)限。使用 WHERE 語句你可以只查 tux  那一條記錄。

> SELECT USER,select_priv,insert_priv,update_priv FROM USER WHERE USER='tux'; +------+-------------+-------------+-------------+ | USER | select_priv | insert_priv | update_priv | +------+-------------+-------------+-------------+ | tux  | N           | N           | N           | +------+-------------+-------------+-------------+

使用 GRANT 命令修改用戶的權(quán)限:

> GRANT SELECT ON *.* TO 'tux'@'localhost'; > FLUSH PRIVILEGES;

驗(yàn)證你的修改:

> SELECT USER,select_priv,insert_priv,update_priv FROM USER WHERE USER='tux'; +------+-------------+-------------+-------------+ | USER | select_priv | insert_priv | update_priv | +------+-------------+-------------+-------------+ | tux  | Y           | N           | N           | +------+-------------+-------------+-------------+

tux 用戶現(xiàn)在有了從所有表中查詢記錄的權(quán)限。

三、創(chuàng)建自定義的數(shù)據(jù)庫

到目前為止,你一直在與默認(rèn)的數(shù)據(jù)庫進(jìn)行交互。除了用戶管理,大部分人很少會與默認(rèn)的數(shù)據(jù)庫進(jìn)行交互。通常,你會用自定義的數(shù)據(jù)來填充創(chuàng)建的數(shù)據(jù)庫。

1. 創(chuàng)建一個(gè) MariaDB 數(shù)據(jù)庫

你可能已經(jīng)可以自己在 MariaDB 中創(chuàng)建新數(shù)據(jù)庫了。創(chuàng)建數(shù)據(jù)庫跟新建用戶差不多。

使用 use 命令來把這個(gè)新建的數(shù)據(jù)庫作為當(dāng)前使用的庫:

> CREATE DATABASE example; Query OK, 1 ROW affected (0.000 sec) > SHOW DATABASES; +--------------------+ | DATABASE           | +--------------------+ | example            | [...]

使用 use 命令來把這個(gè)新建的數(shù)據(jù)庫作為當(dāng)前使用的庫:

> USE example;

2. 創(chuàng)建一個(gè)表

創(chuàng)建表比創(chuàng)建數(shù)據(jù)庫要復(fù)雜,因?yàn)槟惚仨毝x列首。MariaDB  提供了很多方便的函數(shù),可以用于創(chuàng)建列,引入數(shù)據(jù)類型定義,自增選項(xiàng),對空值的約束,自動時(shí)間戳等等。

下面是用來描述一系列用戶的一個(gè)簡單的表:

> CREATE TABLE IF NOT EXISTS member (     -> id INT AUTO_INCREMENT PRIMARY KEY,     -> name VARCHAR(128) NOT NULL,     -> startdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP); Query OK, 0 ROWS affected (0.030 sec)

這個(gè)表通過使用一個(gè)自動遞增的方法來唯一標(biāo)識每一行。表示用戶名字的字段不能為空(或 null),每一行被創(chuàng)建時(shí)會自動生成時(shí)間戳。

使用 SQL 關(guān)鍵字 INSERT 向這個(gè)表填充一些示例數(shù)據(jù):

> INSERT INTO member (name) VALUES ('Alice'); Query OK, 1 ROW affected (0.011 sec) > INSERT INTO member (name) VALUES ('Bob'); Query OK, 1 ROW affected (0.011 sec) > INSERT INTO member (name) VALUES ('Carol'); Query OK, 1 ROW affected (0.011 sec) > INSERT INTO member (name) VALUES ('David'); Query OK, 1 ROW affected (0.011 sec)

驗(yàn)證一下表里的數(shù)據(jù):

> SELECT * FROM member; +----+-------+---------------------+ | id | name  | startdate           | +----+-------+---------------------+ |  1 | Alice | 2020-10-03 15:25:06 | |  2 | Bob   | 2020-10-03 15:26:43 | |  3 | Carol | 2020-10-03 15:26:46 | |  4 | David | 2020-10-03 15:26:51 | +----+-------+---------------------+ 4 ROWS IN SET (0.000 sec)

3. 同時(shí)增加多行數(shù)據(jù)

再創(chuàng)建一個(gè)表:

> CREATE TABLE IF NOT EXISTS linux (     -> id INT AUTO_INCREMENT PRIMARY KEY,     -> distro VARCHAR(128) NOT NULL); Query OK, 0 ROWS affected (0.030 sec)

填充一些示例數(shù)據(jù),這次使用 VALUES 快捷方式,這樣你可以一次添加多行數(shù)據(jù)。VALUES  關(guān)鍵字需要一個(gè)用括號包圍的列表作為參數(shù),也可以用逗號分隔的多個(gè)列表作為參數(shù)。

> INSERT INTO linux (distro)  -> VALUES ('Slackware'), ('RHEL'),('Fedora'),('Debian'); Query OK, 4 ROWS affected (0.011 sec) Records: 4  Duplicates: 0  Warnings: 0 > SELECT * FROM linux; +----+-----------+ | id | distro    | +----+-----------+ |  1 | Slackware | |  2 | RHEL      | |  3 | Fedora    | |  4 | Debian    | +----+-----------+

四、關(guān)聯(lián)多個(gè)表

現(xiàn)在你有兩個(gè)表,之間沒有關(guān)聯(lián)。兩個(gè)表的數(shù)據(jù)是獨(dú)立的,但是你可能需要表一中的一個(gè)值來識別表二的記錄。

你可以在表一中新增一列對應(yīng)表二中的值。因?yàn)閮蓚€(gè)表都有唯一的標(biāo)識符(自動遞增的 id 字段),關(guān)聯(lián)的它們的最簡單的方式是,使用表一中的 id  字段作為表二的查詢條件。

在表一中創(chuàng)建一列用來表示表二中的一個(gè)值:

> ALTER TABLE member ADD COLUMN (os INT); Query OK, 0 ROWS affected (0.012 sec) Records: 0  Duplicates: 0  Warnings: 0 > DESCRIBE member; DESCRIBE member; +-----------+--------------+------+-----+---------+------+ | FIELD     | TYPE         | NULL | KEY | DEFAULT | Extra| +-----------+--------------+------+-----+---------+------+ | id        | INT(11)      | NO   | PRI | NULL    | auto_| | name      | VARCHAR(128) | NO   |     | NULL    |      | | startdate | TIMESTAMP    | NO   |     | cur[...]|      | | os        | INT(11)      | YES  |     | NULL    |      | +-----------+--------------+------+-----+---------+------+

把 linux 表中的唯一 ID 分配給每個(gè)成員。因?yàn)橛涗浺呀?jīng)存在,使用 UPDATE 關(guān)鍵字而不是  INSERT。尤其是當(dāng)你想查詢某行然后再更新某列值時(shí)。語法上,表達(dá)方式有點(diǎn)倒裝,先更新后查詢:

> UPDATE member SET os=1 WHERE name='Alice'; Query OK, 1 ROW affected (0.007 sec) ROWS matched: 1  Changed: 1  Warnings: 0

要填充數(shù)據(jù),請對其他名字重復(fù)執(zhí)行這個(gè)過程。為了數(shù)據(jù)的多樣性,在四行記錄中分配三個(gè)不同的值。

連接表:

現(xiàn)在這兩個(gè)表彼此有了關(guān)聯(lián),你可以使用 SQL 來展示關(guān)聯(lián)的數(shù)據(jù)。數(shù)據(jù)庫中有很多種連接方式,你可以盡請嘗試。下面的例子是關(guān)聯(lián) member 表中 os  字段和 linux 表中 id 字段:

SELECT * FROM member JOIN linux ON member.os=linux.id; +----+-------+---------------------+------+----+-----------+ | id | name  | startdate           | os   | id | distro    | +----+-------+---------------------+------+----+-----------+ |  1 | Alice | 2020-10-03 15:25:06 |    1 |  1 | Slackware | |  2 | Bob   | 2020-10-03 15:26:43 |    3 |  3 | Fedora    | |  4 | David | 2020-10-03 15:26:51 |    3 |  3 | Fedora    | |  3 | Carol | 2020-10-03 15:26:46 |    4 |  4 | Debian    | +----+-------+---------------------+------+----+-----------+ 4 ROWS IN SET (0.000 sec)

連接 os 和 id 字段。

在圖形化的應(yīng)用中,你可以想象 os 字段可以在下拉菜單中設(shè)置,值的來源是 linux 表中的 distro  字段。通過使用多個(gè)表中獨(dú)立卻有關(guān)聯(lián)的數(shù)據(jù),你可以保證數(shù)據(jù)的一致性和有效性,使用 SQL 你可以動態(tài)地關(guān)聯(lián)它們。

五、下載 MariaDB 和 MySQL 備忘單

MariaDB 是企業(yè)級的數(shù)據(jù)庫。它是健壯、強(qiáng)大、高效的數(shù)據(jù)庫引擎。學(xué)習(xí)它是你向管理 web 應(yīng)用和編寫語言庫邁出的偉大的一步。你可以下載 MariaDB  和 MySQL 備忘單,在你使用 MariaDB 時(shí)可以快速參考。

到此,相信大家對“mysql與MariaDB的交互過程”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI