学习MySQL / MariaDB初学者 - 第1部分
創(chuàng)建數(shù)據(jù)庫(kù),表和授權(quán)用戶
正如你所知,數(shù)據(jù)庫(kù)可以簡(jiǎn)單地定義為有組織的信息集合。?具體地講,MariaDB的是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),并使用結(jié)構(gòu)化查詢語(yǔ)言來(lái)執(zhí)行數(shù)據(jù)庫(kù)操作。?另外,請(qǐng)記住MariaDB使用術(shù)語(yǔ)數(shù)據(jù)庫(kù)和模式可互換。
以存儲(chǔ)在數(shù)據(jù)庫(kù)中的持久性信息,我們將使用存儲(chǔ)數(shù)據(jù)的行的表?。?通常,兩個(gè)或多個(gè)表將以某種方式彼此相關(guān)。?這是表征關(guān)系數(shù)據(jù)庫(kù)的使用的組織的一部分。
創(chuàng)建新數(shù)據(jù)庫(kù)
要?jiǎng)?chuàng)建一個(gè)名為新的數(shù)據(jù)庫(kù)BooksDB?,用下面的命令進(jìn)入MariaDB的提示符(你會(huì)被提示輸入根MariaDB的用戶的密碼):
[root@HowToing?~]#?mysql?-u?root?-pEnter?password:?Welcome?to?the?MariaDB?monitor.??Commands?end?with?;?or?\g.Your?MariaDB?connection?id?is?2Server?version:?10.1.14-MariaDB?MariaDB?ServerCopyright?(c)?2000,?2016,?Oracle,?MariaDB?Corporation?Ab?and?others.Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement.MariaDB?[(none)]>?CREATE?DATABASE?BookstoreDB;Query?OK,?1?row?affected?(0.00?sec)MariaDB?[(none)]>一旦創(chuàng)建了數(shù)據(jù)庫(kù),我們需要在其上創(chuàng)建至少兩個(gè)表。?但首先讓我們探討數(shù)據(jù)類(lèi)型的概念。
MariaDB數(shù)據(jù)類(lèi)型簡(jiǎn)介
正如我們前面所解釋的,?表是數(shù)據(jù)庫(kù)中的對(duì)象,我們將保持持續(xù)的信息。?每個(gè)表由一個(gè)給定的數(shù)據(jù)類(lèi)型(信息類(lèi)型)該字段可以存儲(chǔ)兩個(gè)或多個(gè)字段(也稱(chēng)為列?)。
在MariaDB的最常見(jiàn)的數(shù)據(jù)類(lèi)型有以下幾種(你可以咨詢?cè)谕暾斜砉俜組ariaDB的在線文檔?):
數(shù)字:
布爾認(rèn)為0為假和任何其他價(jià)值為真。
TINYINT,如果有符號(hào)使用,涵蓋了從-128到127的范圍內(nèi),而無(wú)符號(hào)的范圍是0到255。
SMALLINT,如果有符號(hào)使用,涵蓋了從-32768范圍到32767無(wú)符號(hào)的范圍是0到65535。
INT,如果有符號(hào)使用,覆蓋范圍從0到4294967295,并-2147483648到2147483647,否則。
注?:在TINYINT,SMALLINT,和INT,假設(shè)簽署了默認(rèn)。
雙(M,D),其中,M是數(shù)字的總數(shù)和D是小數(shù)點(diǎn)后的位數(shù),代表一個(gè)雙精度浮點(diǎn)數(shù)。?如果指定UNSIGNED,則不允許使用負(fù)值。
串:
VARCHAR(M)表示可變長(zhǎng)度的串,其中M是在字節(jié)允許的最大列長(zhǎng)度(65,535理論上)。?在大多數(shù)情況下,字節(jié)數(shù)與字符數(shù)相同,除了一些字符可以占用多達(dá)3個(gè)字節(jié)。?例如,西班牙字母?表示一個(gè)字符,但占用2個(gè)字節(jié)。
TEXT(M)表示具有65,535個(gè)字符,最大長(zhǎng)度為列。?然而,因?yàn)樗cVARCHAR(M)的情況時(shí),實(shí)際的最大長(zhǎng)度,如果存儲(chǔ)多字節(jié)字符減小。?如果指定M,則列作為能夠存儲(chǔ)這樣的字符數(shù)最小類(lèi)型創(chuàng)建。
MEDIUMTEXT(M)和LONGTEXT(M)是類(lèi)似的文本(M),僅允許的最大長(zhǎng)度分別為16,777,215和4,294,967,295字符。
日期和時(shí)間:
Date表示YYYY-MM-DD格式的日期。
TIME代表HH時(shí)間:MM:SS.SSS格式(小時(shí),分,秒和毫秒)。
DATETIME是YYYY-MM-DD HH?日期和時(shí)間組合:MM:SS格式。
時(shí)間戳被用于定義被添加或更新的行的時(shí)刻。
在檢查了這些數(shù)據(jù)類(lèi)型之后,您將能夠更好地確定需要將哪些數(shù)據(jù)類(lèi)型分配給表中的給定列。
例如,一個(gè)人的名字,可以輕松適應(yīng)一個(gè)VARCHAR(50),而博客文章將需要一個(gè)文本類(lèi)型(選擇中號(hào)根據(jù)您的具體需求)。
使用主鍵和外鍵創(chuàng)建表
在我們深入創(chuàng)建表,大約有,我們需要檢討的關(guān)系型數(shù)據(jù)庫(kù)兩個(gè)基本概念:?主鍵和外鍵。
主鍵包含一個(gè)唯一標(biāo)識(shí)每一行,或記錄,在表中的值。?另一方面,?外鍵是用來(lái)在兩個(gè)表來(lái)創(chuàng)建數(shù)據(jù)之間的鏈接,并且控制可以存儲(chǔ)在將外鍵所在的表中的數(shù)據(jù)。?主鍵和外鍵通常是INT。
為了說(shuō)明這一點(diǎn),讓我們使用BookstoreDB并創(chuàng)建一個(gè)名為兩個(gè)表AuthorsTBL和BooksTBL如下。?NOT NULL約束表明相關(guān)領(lǐng)域需要非NULL值。
此外,AUTO_INCREMENT時(shí)使用一個(gè)新的記錄被插入到表由一個(gè)增加的INT主鍵列的值。
MariaDB?[(none)]>?USE?BookstoreDB;MariaDB?[(none)]>?CREATE?TABLE?AuthorsTBL?(AuthorID?INT?NOT?NULL?AUTO_INCREMENT,AuthorName?VARCHAR(100),PRIMARY?KEY(AuthorID));MariaDB?[(none)]>?CREATE?TABLE?BooksTBL?(BookID?INT?NOT?NULL?AUTO_INCREMENT,BookName?VARCHAR(100)?NOT?NULL,AuthorID?INT?NOT?NULL,BookPrice?DECIMAL(6,2)?NOT?NULL,BookLastUpdated?TIMESTAMP,BookIsAvailable?BOOLEAN,PRIMARY?KEY(BookID),FOREIGN?KEY?(AuthorID)?REFERENCES?AuthorsTBL(AuthorID));使用主鍵和外鍵創(chuàng)建MySQL表
MariaDB?[(none)]>?USE?BookstoreDB;Database?changedMariaDB?[BookstoreDB]>?CREATE?TABLE?AuthorsTBL?(->?AuthorID?INT?NOT?NULL?AUTO_INCREMENT,->?AuthorName?VARCHAR(100),->?PRIMARY?KEY(AuthorID)->?);Query?OK,?0?rows?affected?(0.05?sec)MariaDB?[BookstoreDB]>?CREATE?TABLE?BooksTBL?(->?BookID?INT?NOT?NULL?AUTO_INCREMENT,->?BookName?VARCHAR(100)?NOT?NULL,->?AuthorID?INT?NOT?NULL,->?BookPrice?DECIMAL(6,2)?NOT?NULL,->?BookLastUpdated?TIMESTAMP,->?BookIsAvailable?BOOLEAN,->?PRIMARY?KEY(BookID),->?FOREIGN?KEY?(AuthorID)?REFERENCES?AuthorsTBL(AuthorID)->?);Query?OK,?0?rows?affected?(0.05?sec)MariaDB?[BookstoreDB]>現(xiàn)在我們可以繼續(xù)前進(jìn),開(kāi)始插入記錄AuthorsTBL和BooksTBL?。
選擇,插入,更新和刪除行
首先,我們將填充AuthorsTBL表。?為什么??因?yàn)槲覀冃枰袃r(jià)值觀AuthorID插入記錄BooksTBL之前。
從MariaDB提示符執(zhí)行以下查詢:
MariaDB?[BookstoreDB]>?INSERT?INTO?AuthorsTBL?(AuthorName)?VALUES?('Agatha?Christie'),?('Stephen?King'),?('Paulo?Coelho');在這之后,我們將會(huì)選擇從AuthorsTBL的所有記錄。?請(qǐng)記住,我們將需要的AuthorID每個(gè)記錄創(chuàng)造BooksTBL?插入查詢。
如果你想在一次檢索一條記錄,您可以使用WHERE子句來(lái)表示一個(gè)條件,一個(gè)行必須符合退換。?例如,
MariaDB?[BookstoreDB]>?SELECT?*?FROM?AuthorsTBL?WHERE?AuthorName='Agatha?Christie';或者,您可以同時(shí)選擇所有記錄:
MariaDB?[BookstoreDB]>?SELECT?*?FROM?AuthorsTBL;在MySQL中選擇和查詢記錄
MariaDB?[BookstoreDB]>?SELECT?*?FROM?AuthorsTBL?WHERE?AuthorName='Agatha?Christie';+----------+-----------------+|?AuthorID?|?AuthorName??????|+----------+-----------------+|????????1?|?Agatha?Christie?|+----------+-----------------+1?row?in?set?(0.00?sec)MariaDB?[BookstoreDB]>?SELECT?*?FROM?AuthorsTBL;+----------+-----------------+|?AuthorID?|?AuthorName??????|+----------+-----------------+|????????1?|?Agatha?Christie?||????????2?|?Stephen?King????||????????3?|?Paulo?Coelho????|+----------+-----------------+3?rows?in?set?(0.00?sec)MariaDB?[BookstoreDB]>在MySQL數(shù)據(jù)庫(kù)中選擇并查詢字符串
現(xiàn)在,讓我們創(chuàng)造BooksTBL?插入查詢,使用相應(yīng)的AuthorID匹配每本書(shū)的作者。?在BookIsAvailable值為1表示這本書(shū)的股票,否則為0:
MariaDB?[BookstoreDB]>?INSERT?INTO?BooksTBL?(BookName,?AuthorID,?BookPrice,?BookIsAvailable)VALUES?('And?Then?There?Were?None',?1,?14.95,?1),('The?Man?in?the?Brown?Suit',?1,?23.99,?1),('The?Stand',?2,?35.99,?1),('Pet?Sematary',?2,?17.95,?0),('The?Green?Mile',?2,?29.99,?1),('The?Alchemist',?3,?25,?1),('By?the?River?Piedra?I?Sat?Down?and?Wept',?3,?18.95,?0);在MySQL表中插入查詢
MariaDB?[BookstoreDB]>?INSERT?INTO?BooksTBL?(BookName,?AuthorID,?BookPrice,?BookIsAvailable)->?VALUES?('And?Then?There?Were?None',?1,?14.95,?1),->?('The?Man?in?the?Brown?Suit',?1,?23.99,?1),->?('The?Stand',?2,?35.99,?1),->?('Pet?Sematary',?2,?17.95,?0),->?('The?Green?Mile',?2,?29.99,?1),->?('The?Alchemist',?3,?25,?1),->?('By?the?River?Piedra?I?Sat?Down?and?Wept',?3,?18.95,?0);Query?OK,?7?rows?affected?(0.03?sec)Records:?7??Duplicates:?0??Warnings:?0在這一點(diǎn)上,我們會(huì)做一個(gè)SELECT看到BooksTBL的記錄。?那么讓我們更新的“煉金術(shù)士?”由保羅科埃略的價(jià)格,再次選擇特定的記錄。
注意BookLastUpdated場(chǎng)現(xiàn)在怎么顯示不同的值。?正如我們前面所解釋的,一個(gè)時(shí)間戳字段顯示記錄插入或最后修改時(shí)的數(shù)值。
MariaDB?[BookstoreDB]>?SELECT?*?FROM?BooksTBL;MariaDB?[BookstoreDB]>?UPDATE?BooksTBL?SET?BookPrice=22.75?WHERE?BookID=6;MariaDB?[BookstoreDB]>?SELECT?*?FROM?BooksTBL?WHERE?BookID=6;在MySQL數(shù)據(jù)庫(kù)中插入查詢和更新表
MariaDB?[BookstoreDB]>?SELECT?*?FROM?BooksTBL;+--------+-----------------------------------------+----------+-----------+---------------------+-----------------+|?BookID?|?BookName????????????????????????????????|?AuthorID?|?BookPrice?|?BookLastUpdated?????|?BookIsAvailable?|+--------+-----------------------------------------+----------+-----------+---------------------+-----------------+|??????1?|?And?Then?There?Were?None????????????????|????????1?|?????14.95?|?2016-10-01?23:31:41?|???????????????1?||??????2?|?The?Man?in?the?Brown?Suit???????????????|????????1?|?????23.99?|?2016-10-01?23:31:41?|???????????????1?||??????3?|?The?Stand???????????????????????????????|????????2?|?????35.99?|?2016-10-01?23:31:41?|???????????????1?||??????4?|?Pet?Sematary????????????????????????????|????????2?|?????17.95?|?2016-10-01?23:31:41?|???????????????0?||??????5?|?The?Green?Mile??????????????????????????|????????2?|?????29.99?|?2016-10-01?23:31:41?|???????????????1?||??????6?|?The?Alchemist???????????????????????????|????????3?|?????25.00?|?2016-10-01?23:31:41?|???????????????1?||??????7?|?By?the?River?Piedra?I?Sat?Down?and?Wept?|????????3?|?????18.95?|?2016-10-01?23:31:41?|???????????????0?|+--------+-----------------------------------------+----------+-----------+---------------------+-----------------+7?rows?in?set?(0.00?sec)MariaDB?[BookstoreDB]>?UPDATE?BooksTBL?SET?BookPrice=22.75?WHERE?BookID=6;Query?OK,?1?row?affected?(0.04?sec)Rows?matched:?1??Changed:?1??Warnings:?0MariaDB?[BookstoreDB]>?SELECT?*?FROM?BooksTBL?WHERE?BookID=6;+--------+---------------+----------+-----------+---------------------+-----------------+|?BookID?|?BookName??????|?AuthorID?|?BookPrice?|?BookLastUpdated?????|?BookIsAvailable?|+--------+---------------+----------+-----------+---------------------+-----------------+|??????6?|?The?Alchemist?|????????3?|?????22.75?|?2016-10-01?23:35:00?|???????????????1?|+--------+---------------+----------+-----------+---------------------+-----------------+1?row?in?set?(0.00?sec)MariaDB?[BookstoreDB]>插入和更新數(shù)據(jù)庫(kù)表記錄
雖然我們不會(huì)在這里做,你也可以刪除一個(gè)記錄,如果不再使用了。?例如,假設(shè)我們要?jiǎng)h除BooksTBL“煉金術(shù)士?”。
要做到這一點(diǎn),我們會(huì)按如下方式使用DELETE語(yǔ)句:
MariaDB?[BookstoreDB]>?DELETE?FROM?BooksTBL?WHERE?BookID=6;作為更新的情況下,這是一個(gè)好主意,以查看可能潛在的DELETE受到影響的結(jié)果首先做一個(gè)SELECT。
另外,不要忘記添加WHERE子句和條件(的BookID = 6)來(lái)選擇特定的記錄被刪除。?否則,您可能會(huì)刪除表中的所有行!
如果你希望連接兩個(gè)(或更多)的字段,可以使用CONCAT聲明。?舉例來(lái)說(shuō),假設(shè)我們要返回的結(jié)果集的形式組成的書(shū)名和作者一個(gè)字段的“煉金術(shù)士(保羅·科埃略)”,并與價(jià)格的另一列。
這將需要對(duì)兩個(gè)表(?的AuthorID)共享的公共領(lǐng)域AuthorsTBL和BooksTBL之間的連接?:
MariaDB?[BookstoreDB]>?SELECT?CONCAT(BooksTBL.BookName,?'?(',?AuthorsTBL.AuthorName,?')')?AS?Description,?BooksTBL.BookPrice?FROM?AuthorsTBL?JOIN?BooksTBL?ON?AuthorsTBL.AuthorID?=?BooksTBL.AuthorID;正如我們所看到的,CONCAT使我們能夠參加由逗號(hào)分隔的多個(gè)字符串表達(dá)式。?您還會(huì)注意到,我們選擇了別名說(shuō)明來(lái)表示結(jié)果集并置。
上面的查詢的輸出如下圖所示:
在MySQL表中查詢多個(gè)字段
MariaDB?[BookstoreDB]>?SELECT?CONCAT(BooksTBL.BookName,?'?(',?AuthorsTBL.AuthorName,?')')?AS?Description,?BooksTBL.BookPrice?FROM?AuthorsTBL?JOIN?BooksTBL?ON?AuthorsTBL.AuthorID?=?BooksTBL.AuthorID;+--------------------------------------------------------+-----------+|?Description????????????????????????????????????????????|?BookPrice?|+--------------------------------------------------------+-----------+|?And?Then?There?Were?None?(Agatha?Christie)?????????????|?????14.95?||?The?Man?in?the?Brown?Suit?(Agatha?Christie)????????????|?????23.99?||?The?Stand?(Stephen?King)???????????????????????????????|?????35.99?||?Pet?Sematary?(Stephen?King)????????????????????????????|?????17.95?||?The?Green?Mile?(Stephen?King)??????????????????????????|?????29.99?||?The?Alchemist?(Paulo?Coelho)???????????????????????????|?????25.00?||?By?the?River?Piedra?I?Sat?Down?and?Wept?(Paulo?Coelho)?|?????18.95?|+--------------------------------------------------------+-----------+7?rows?in?set?(0.00?sec)在數(shù)據(jù)庫(kù)表中查詢多個(gè)字段
創(chuàng)建用戶以訪問(wèn)BookstoreDB數(shù)據(jù)庫(kù)
利用根在數(shù)據(jù)庫(kù)中執(zhí)行所有DML操作是一個(gè)壞主意。?為了避免這種情況,我們可以創(chuàng)建一個(gè)新的MariaDB的用戶帳戶(我們將其命名為bookstoreuser),并設(shè)置BookstoreDB所有必要的權(quán)限:
MariaDB?[BookstoreDB]>?CREATE?USER?bookstoreuser@localhost?IDENTIFIED?BY?'YourPasswordHere';MariaDB?[BookstoreDB]>?GRANT?ALL?PRIVILEGES?ON??BookstoreDB.*?to?bookstoreuser@localhost;MariaDB?[BookstoreDB]>?FLUSH?PRIVILEGES;使用權(quán)限創(chuàng)建新數(shù)據(jù)庫(kù)用戶
MariaDB?[BookstoreDB]>?CREATE?USER?bookstoreuser@localhost?IDENTIFIED?BY?'howtoing';Query?OK,?0?rows?affected?(0.00?sec)MariaDB?[BookstoreDB]>?GRANT?ALL?PRIVILEGES?ON??BookstoreDB.*?to?bookstoreuser@localhost;Query?OK,?0?rows?affected?(0.00?sec)MariaDB?[BookstoreDB]>?FLUSH?PRIVILEGES;Query?OK,?0?rows?affected?(0.00?sec)為每個(gè)數(shù)據(jù)庫(kù)設(shè)置一個(gè)專(zhuān)用的,單獨(dú)的用戶將防止損壞整個(gè)數(shù)據(jù)庫(kù),如果單個(gè)帳戶受損。
額外的MySQL提示
要清理MariaDB的提示符下,鍵入以下命令,然后按Enter鍵?:
MariaDB?[BookstoreDB]>?\!?clear要檢查給定表的配置,請(qǐng)執(zhí)行:
MariaDB?[BookstoreDB]>?SELECT?COLUMNS?IN?[TABLE?NAME?HERE?];例如,
MariaDB?[BookstoreDB]>?SHOW?COLUMNS?IN?BooksTBL;列出數(shù)據(jù)庫(kù)表中的列
MariaDB?[BookstoreDB]>?SHOW?COLUMNS?IN?BooksTBL;+-----------------+--------------+------+-----+-------------------+-----------------------------+|?Field???????????|?Type?????????|?Null?|?Key?|?Default???????????|?Extra???????????????????????|+-----------------+--------------+------+-----+-------------------+-----------------------------+|?BookID??????????|?int(11)??????|?NO???|?PRI?|?NULL??????????????|?auto_increment??????????????||?BookName????????|?varchar(100)?|?NO???|?????|?NULL??????????????|?????????????????????????????||?AuthorID????????|?int(11)??????|?NO???|?MUL?|?NULL??????????????|?????????????????????????????||?BookPrice???????|?decimal(6,2)?|?NO???|?????|?NULL??????????????|?????????????????????????????||?BookLastUpdated?|?timestamp????|?NO???|?????|?CURRENT_TIMESTAMP?|?on?update?CURRENT_TIMESTAMP?||?BookIsAvailable?|?tinyint(1)???|?YES??|?????|?NULL??????????????|?????????????????????????????|+-----------------+--------------+------+-----+-------------------+-----------------------------+6?rows?in?set?(0.02?sec)列出數(shù)據(jù)庫(kù)表中的列
快速檢查顯示,BookIsAvailable領(lǐng)域承認(rèn)NULL值。?因?yàn)槲覀儾幌M试S,我們會(huì)修改表如下:
MariaDB?[BookstoreDB]>?ALTER?TABLE?BooksTBL?MODIFY?BookIsAvailable?BOOLEAN?NOT?NULL;(隨時(shí)再次顯示列-上面的圖片中突出顯示的是?,現(xiàn)在應(yīng)該是一個(gè)NO)。
最后,要查看服務(wù)器上的所有數(shù)據(jù)庫(kù),請(qǐng)執(zhí)行:
MariaDB?[BookstoreDB]>?SHOW?DATABASES;ORMariaDB?[BookstoreDB]>?SHOW?SCHEMAS;列出所有的MySQL數(shù)據(jù)庫(kù)
[root@HowToing?~]#?mysql?-u?bookstoreuser?-pEnter?password:?Welcome?to?the?MariaDB?monitor.??Commands?end?with?;?or?\g.Your?MariaDB?connection?id?is?3Server?version:?10.1.14-MariaDB?MariaDB?ServerCopyright?(c)?2000,?2016,?Oracle,?MariaDB?Corporation?Ab?and?others.Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement.MariaDB?[BookstoreDB]>?SHOW?DATABASES;+--------------------+|?Database???????????|+--------------------+|?BookstoreDB????????||?information_schema?|+--------------------+2?rows?in?set?(0.00?sec)MariaDB?[BookstoreDB]>?SHOW?SCHEMAS;+--------------------+|?Database???????????|+--------------------+|?BookstoreDB????????||?information_schema?|+--------------------+2?rows?in?set?(0.00?sec)下圖顯示了訪問(wèn)MariaDB的提示為bookstoreuser后,上述命令的結(jié)果(注意如何帳戶無(wú)法“看到”比BookstoreDB和INFORMATION_SCHEMA(適用于所有用戶)之外的任何數(shù)據(jù)庫(kù):
列出所有MySQL數(shù)據(jù)庫(kù)
轉(zhuǎn) : https://www.howtoing.com/learn-mysql-mariadb-for-beginners
轉(zhuǎn)載于:https://blog.51cto.com/lixin752299/2059728
總結(jié)
以上是生活随笔為你收集整理的学习MySQL / MariaDB初学者 - 第1部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: TCP的三次握手过程与四次挥手
- 下一篇: linux cmake编译源码,linu