学习MySQL / MariaDB初学者 - 第1部分
創建數據庫,表和授權用戶
正如你所知,數據庫可以簡單地定義為有組織的信息集合。?具體地講,MariaDB的是關系數據庫管理系統(RDBMS),并使用結構化查詢語言來執行數據庫操作。?另外,請記住MariaDB使用術語數據庫和模式可互換。
以存儲在數據庫中的持久性信息,我們將使用存儲數據的行的表?。?通常,兩個或多個表將以某種方式彼此相關。?這是表征關系數據庫的使用的組織的一部分。
創建新數據庫
要創建一個名為新的數據庫BooksDB?,用下面的命令進入MariaDB的提示符(你會被提示輸入根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)]>一旦創建了數據庫,我們需要在其上創建至少兩個表。?但首先讓我們探討數據類型的概念。
MariaDB數據類型簡介
正如我們前面所解釋的,?表是數據庫中的對象,我們將保持持續的信息。?每個表由一個給定的數據類型(信息類型)該字段可以存儲兩個或多個字段(也稱為列?)。
在MariaDB的最常見的數據類型有以下幾種(你可以咨詢在完整列表官方MariaDB的在線文檔?):
數字:
布爾認為0為假和任何其他價值為真。
TINYINT,如果有符號使用,涵蓋了從-128到127的范圍內,而無符號的范圍是0到255。
SMALLINT,如果有符號使用,涵蓋了從-32768范圍到32767無符號的范圍是0到65535。
INT,如果有符號使用,覆蓋范圍從0到4294967295,并-2147483648到2147483647,否則。
注?:在TINYINT,SMALLINT,和INT,假設簽署了默認。
雙(M,D),其中,M是數字的總數和D是小數點后的位數,代表一個雙精度浮點數。?如果指定UNSIGNED,則不允許使用負值。
串:
VARCHAR(M)表示可變長度的串,其中M是在字節允許的最大列長度(65,535理論上)。?在大多數情況下,字節數與字符數相同,除了一些字符可以占用多達3個字節。?例如,西班牙字母?表示一個字符,但占用2個字節。
TEXT(M)表示具有65,535個字符,最大長度為列。?然而,因為它與VARCHAR(M)的情況時,實際的最大長度,如果存儲多字節字符減小。?如果指定M,則列作為能夠存儲這樣的字符數最小類型創建。
MEDIUMTEXT(M)和LONGTEXT(M)是類似的文本(M),僅允許的最大長度分別為16,777,215和4,294,967,295字符。
日期和時間:
Date表示YYYY-MM-DD格式的日期。
TIME代表HH時間:MM:SS.SSS格式(小時,分,秒和毫秒)。
DATETIME是YYYY-MM-DD HH?日期和時間組合:MM:SS格式。
時間戳被用于定義被添加或更新的行的時刻。
在檢查了這些數據類型之后,您將能夠更好地確定需要將哪些數據類型分配給表中的給定列。
例如,一個人的名字,可以輕松適應一個VARCHAR(50),而博客文章將需要一個文本類型(選擇中號根據您的具體需求)。
使用主鍵和外鍵創建表
在我們深入創建表,大約有,我們需要檢討的關系型數據庫兩個基本概念:?主鍵和外鍵。
主鍵包含一個唯一標識每一行,或記錄,在表中的值。?另一方面,?外鍵是用來在兩個表來創建數據之間的鏈接,并且控制可以存儲在將外鍵所在的表中的數據。?主鍵和外鍵通常是INT。
為了說明這一點,讓我們使用BookstoreDB并創建一個名為兩個表AuthorsTBL和BooksTBL如下。?NOT NULL約束表明相關領域需要非NULL值。
此外,AUTO_INCREMENT時使用一個新的記錄被插入到表由一個增加的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));使用主鍵和外鍵創建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]>現在我們可以繼續前進,開始插入記錄AuthorsTBL和BooksTBL?。
選擇,插入,更新和刪除行
首先,我們將填充AuthorsTBL表。?為什么??因為我們需要有價值觀AuthorID插入記錄BooksTBL之前。
從MariaDB提示符執行以下查詢:
MariaDB?[BookstoreDB]>?INSERT?INTO?AuthorsTBL?(AuthorName)?VALUES?('Agatha?Christie'),?('Stephen?King'),?('Paulo?Coelho');在這之后,我們將會選擇從AuthorsTBL的所有記錄。?請記住,我們將需要的AuthorID每個記錄創造BooksTBL?插入查詢。
如果你想在一次檢索一條記錄,您可以使用WHERE子句來表示一個條件,一個行必須符合退換。?例如,
MariaDB?[BookstoreDB]>?SELECT?*?FROM?AuthorsTBL?WHERE?AuthorName='Agatha?Christie';或者,您可以同時選擇所有記錄:
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數據庫中選擇并查詢字符串
現在,讓我們創造BooksTBL?插入查詢,使用相應的AuthorID匹配每本書的作者。?在BookIsAvailable值為1表示這本書的股票,否則為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在這一點上,我們會做一個SELECT看到BooksTBL的記錄。?那么讓我們更新的“煉金術士?”由保羅科埃略的價格,再次選擇特定的記錄。
注意BookLastUpdated場現在怎么顯示不同的值。?正如我們前面所解釋的,一個時間戳字段顯示記錄插入或最后修改時的數值。
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數據庫中插入查詢和更新表
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]>插入和更新數據庫表記錄
雖然我們不會在這里做,你也可以刪除一個記錄,如果不再使用了。?例如,假設我們要刪除BooksTBL“煉金術士?”。
要做到這一點,我們會按如下方式使用DELETE語句:
MariaDB?[BookstoreDB]>?DELETE?FROM?BooksTBL?WHERE?BookID=6;作為更新的情況下,這是一個好主意,以查看可能潛在的DELETE受到影響的結果首先做一個SELECT。
另外,不要忘記添加WHERE子句和條件(的BookID = 6)來選擇特定的記錄被刪除。?否則,您可能會刪除表中的所有行!
如果你希望連接兩個(或更多)的字段,可以使用CONCAT聲明。?舉例來說,假設我們要返回的結果集的形式組成的書名和作者一個字段的“煉金術士(保羅·科埃略)”,并與價格的另一列。
這將需要對兩個表(?的AuthorID)共享的公共領域AuthorsTBL和BooksTBL之間的連接?:
MariaDB?[BookstoreDB]>?SELECT?CONCAT(BooksTBL.BookName,?'?(',?AuthorsTBL.AuthorName,?')')?AS?Description,?BooksTBL.BookPrice?FROM?AuthorsTBL?JOIN?BooksTBL?ON?AuthorsTBL.AuthorID?=?BooksTBL.AuthorID;正如我們所看到的,CONCAT使我們能夠參加由逗號分隔的多個字符串表達式。?您還會注意到,我們選擇了別名說明來表示結果集并置。
上面的查詢的輸出如下圖所示:
在MySQL表中查詢多個字段
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)在數據庫表中查詢多個字段
創建用戶以訪問BookstoreDB數據庫
利用根在數據庫中執行所有DML操作是一個壞主意。?為了避免這種情況,我們可以創建一個新的MariaDB的用戶帳戶(我們將其命名為bookstoreuser),并設置BookstoreDB所有必要的權限:
MariaDB?[BookstoreDB]>?CREATE?USER?bookstoreuser@localhost?IDENTIFIED?BY?'YourPasswordHere';MariaDB?[BookstoreDB]>?GRANT?ALL?PRIVILEGES?ON??BookstoreDB.*?to?bookstoreuser@localhost;MariaDB?[BookstoreDB]>?FLUSH?PRIVILEGES;使用權限創建新數據庫用戶
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)為每個數據庫設置一個專用的,單獨的用戶將防止損壞整個數據庫,如果單個帳戶受損。
額外的MySQL提示
要清理MariaDB的提示符下,鍵入以下命令,然后按Enter鍵?:
MariaDB?[BookstoreDB]>?\!?clear要檢查給定表的配置,請執行:
MariaDB?[BookstoreDB]>?SELECT?COLUMNS?IN?[TABLE?NAME?HERE?];例如,
MariaDB?[BookstoreDB]>?SHOW?COLUMNS?IN?BooksTBL;列出數據庫表中的列
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)列出數據庫表中的列
快速檢查顯示,BookIsAvailable領域承認NULL值。?因為我們不希望允許,我們會修改表如下:
MariaDB?[BookstoreDB]>?ALTER?TABLE?BooksTBL?MODIFY?BookIsAvailable?BOOLEAN?NOT?NULL;(隨時再次顯示列-上面的圖片中突出顯示的是?,現在應該是一個NO)。
最后,要查看服務器上的所有數據庫,請執行:
MariaDB?[BookstoreDB]>?SHOW?DATABASES;ORMariaDB?[BookstoreDB]>?SHOW?SCHEMAS;列出所有的MySQL數據庫
[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)下圖顯示了訪問MariaDB的提示為bookstoreuser后,上述命令的結果(注意如何帳戶無法“看到”比BookstoreDB和INFORMATION_SCHEMA(適用于所有用戶)之外的任何數據庫:
列出所有MySQL數據庫
轉 : https://www.howtoing.com/learn-mysql-mariadb-for-beginners
轉載于:https://blog.51cto.com/lixin752299/2059728
總結
以上是生活随笔為你收集整理的学习MySQL / MariaDB初学者 - 第1部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP的三次握手过程与四次挥手
- 下一篇: WWDC 2018: Shortcuts