跳轉到內容

MySQL/MySQL 實用指南

來自華夏公益教科書

安裝 MySQL

[編輯 | 編輯原始碼]

一體化解決方案

[編輯 | 編輯原始碼]

由於 MySQL 本身不足以執行真正的資料庫伺服器,所以安裝它的更實用方法是部署一個一體化包,其中包含所有必要的額外元素:ApachePHP

  1. 在 Linux 上:XAMP 或 LAMP
  2. 在 Windows 上:XAMPWAMPEasyPHP

Windows 10 注意

  • 伺服器 IIS 預設啟動,這會導致 Apache 更改其埠(888 而不是 80)。要解決這個問題,只需在“程式和功能”中取消選中“Internet Information Services”,然後“啟用或停用 Windows 功能”。同樣,MySQL 埠可能會從 3306 更改為 3388。
  • 此外,EasyPHP 開發伺服器(別名 Devserver,紅色版本)無法正常工作(缺少 MSVCR110.dll),但EasyPHP 託管伺服器(別名 Webserver,藍色版本)可以。但是,它在每次啟動時都會自動啟動,這會顯著降低系統速度。為了避免這種情況,請執行services.msc,並將以下三個服務切換到手動啟動。然後,要按需(以管理員身份)啟動它們,請建立一個名為MySQL.cmd的指令碼,其中包含以下幾行
net start ews-dbserver
net start ews-httpserver
net start ews-dashboard
pause
net stop ews-dashboard
net stop ews-httpserver
net stop ews-dbserver

單一安裝

[編輯 | 編輯原始碼]

本指南從使用 Ubuntu 和 apt-get 的 Linux Shell 的角度撰寫[1]

如果您只想使用終端:

確保您已安裝 MySQL 客戶端和伺服器。要在 apt-get 發行版(例如 Debian 和 Ubuntu)下安裝客戶端和伺服器,請執行

apt-get install mysql-client mysql-client-5.0 mysql-server mysql-server-5.0


關於 MySQL 包

[2]


確保安裝安全:

如果以下所有答案都是“是”,那麼這將清理您的安裝,強制您設定 root 密碼,要求您測試匿名使用者並使您的資料庫內部化。

請務必小心。確保您正在按照您的規格配置 MySQL。

以下是程式碼

mysql_secure_installation

建立您自己的 MySQL 賬戶和資料庫

[編輯 | 編輯原始碼]

現在 MySQL 已安裝,您不一定擁有自己的賬戶,因此您必須以 root 身份登入。

要執行此操作,請鍵入

sudo mysql -u root -p

(這意味著您正在以“root”使用者身份登入(-u root),並且您正在請求“root”的密碼(-p))


成功登入後,您的命令列應如下所示:mysql>


順便說一句,如果您的命令列最終看起來像這樣:-> 則有一個解釋。

在 MySQL 中,您執行的每個命令都必須以;結尾。這樣它就知道;後面的所有內容都是一個命令。

因此,要退出,只需鍵入;。稍後將對此進行更多介紹。


現在您可以檢查哪些資料庫(如果有)可供您的使用者使用(在本例中為“root”)

show databases;

讓我們直奔主題,建立自己的資料庫。讓我們把它命名為people。在建立資料庫的同時,我們也可以建立自己的使用者賬戶。一舉兩得。

因此,首先建立資料庫

create database people; 

(注意:在本例中,您必須是“root”才能建立新資料庫。)


現在我們想授予(GRANT)來自(ON)整個(*people 資料庫的所有使用者許可權(ALL)給(TO)您的賬戶(yourusername@localhost),您的使用者密碼為stuffedpoodleIDENTIFIED BY "stuffedpoodle")。


所以我們會輸入以下內容

GRANT ALL ON people.* TO yourusername@localhost IDENTIFIED BY "stuffedpoodle";

太棒了!您現在有了自己的使用者賬戶。假設您選擇ted作為您的使用者名稱。您已配置 MySQL 以表明ted可以根據自己的意願使用people 資料庫。


現在透過鍵入以下內容退出 MySQL

exit

要開始使用people 資料庫,您現在可以以ted身份登入

mysql -u ted -p

在資料庫中建立帶有資訊的表格

[編輯 | 編輯原始碼]

在 MySQL 中,資訊儲存在表格中。表格包含列和行。

Ted現在建立了一個people 資料庫。因此,我們現在想將一些資訊輸入表格中。

ted身份登入。

首先,我們需要確保我們正在使用people 資料庫。所以鍵入

 select database(); 

將顯示您當前正在使用的資料庫。您應該看到一個NULL,這意味著您目前沒有使用任何資料庫。


因此,要開始使用 people 資料庫,請鍵入

\u people

(注意:鍵入:USE people 或以mysql people -u ted -p身份登入也是可以接受的。)


那麼如何建立表格呢?

請記住,我們需要設定所有列值(如姓氏、年齡等)。


現在,還記得那個煩人的->符號嗎?MySQL 將您的命令視為一個命令,而不是一系列命令。因此,-> 使您能夠以比在一行上寫下所有內容更友好的方式輸入內容。(注意:此方法的問題在於,如果您在一行上犯了錯誤並按 ENTER 轉到下一行,則無法返回並更正錯誤。這就是為什麼使用SciTE 文字編輯器(將語言設定為SQL)編寫程式碼並將程式碼複製貼上到 shell 中是一個很好的方法。)

還有一點是,您必須在除最後兩行外的每行的末尾用,分隔行。在倒數第二行,不要新增,,最後一行始終以;結尾。


首先,我需要解釋幾件事,這樣您就不會被一堆陌生的程式碼嚇到。

如果您不知道,我們使用括號()封裝程式碼。(通常稱為圓括號)。

CREATE TABLE tableName 和第一個括號之後,我們將要寫的第一個內容是每個人的資料庫 ID 編號(我們使用整數[3]),主要稱為主鍵。它有點像護照 ID 號碼。每個號碼對它的所有者都是唯一的,並且它必須是唯一的,以防止重複和冒充。

現在,SQL 中的任何變數都是這樣建立的

 variableNAME variableTYPE otherVariableAttributes

. 因此,為了定義主鍵變數,我們需要鍵入例如

peopleID(變數名稱) int(變數型別 - “integer”的縮寫) unsigned(表示我們希望我們的整數值始終為正數) not null(我們希望每行都具有一個值,因此顯然該值不能為空 (NULL)) auto_increment(這將確保建立的每個新行都是唯一的) primary key(我們正在說這個特定的變數將是該表格的主鍵。), (提醒您,, 符號表示該行的結束,因此 MySQL 知道要轉到下一行)

您已經瞭解了int 變數。還有一個類似於String 的變數(例如:如果您以前使用過 Java 程式設計)。它被稱為varchar,代表可變字元。您為有人可以輸入varchar 變數的字元數設定一個值。像這樣:nameOfFattestMooseAlive varchar(30) 所以nameOfFattestMooseAlive 最多可以包含 30 個字元。


好的,那麼讓我們來看一個關於如何建立與people 資料庫相關的表格的例子

CREATE TABLE peopleInfo

(

peopleID int unsigned not null auto_increment primary key,

firstName varchar(30),

lastName varchar(30),

age int,

gender varchar(13)

);

請注意,我將gender 的最大值設定為 13,因為“hermaphrodite” 有 13 個字元。:)


現在您可以鍵入:CREATE TABLE peopleInfo 並按 ENTER 鍵,如果您想開始-> 並編寫其餘的程式碼,或者您可以使用 SCITE 並將其複製貼上到您的 shell 中。


太棒了。我們現在完成了第一個表格。

現在到了我們要將一些真實的人員輸入到我們的peopleInfo 表格中的部分。


由於您已使用people 資料庫,因此您可以鍵入

show tables;

檢視當前資料庫中的表格。要查看錶格的屬性,請鍵入

describe peopleInfo;


那麼,如何將人員填充到我們的peopleInfo 表格中呢?

這是透過告訴 MySQL 您要填充的以及您要填充的實際資訊/資料來完成的。

因此,我們想插入到我們的表格中(指定行)並輸入我們想要的值(實際資料)。(注意:我們沒有填寫主鍵。)


要建立第一個人,您會鍵入以下內容

INSERT INTO peopleInfo

(firstName, lastName, age, gender)

values

("Bill", "Harper", 17, "male");


太棒了。現在,如果您想將表格的所有資訊列印到螢幕上,請鍵入

select * from peopleInfo;

就是這樣。您的表格現在儲存了第一個人。

將大量資訊插入到您的表格中

一個將在稍後討論的要點是,MySQL 將其自身備份到 .sql 檔案中。這樣做很聰明,因為它會將文字檔案中的實際程式碼備份。


考慮到這一點,假設我們要在你的 peopleInfo 表中新增 10 個人。如果手動輸入每一個人,那將是一件非常繁瑣的事情。如果要新增 1000 個人怎麼辦?


因此,我已經很貼心地寫出了將 10 個人填充到資料庫中的程式碼。:) 建立一個空白的 .txt 檔案,並將以下資訊複製貼上到其中,儲存為 tenPeople.sql

INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Mary", "Jones", 21, "female");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Jill", "Harrington", 19, "female");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Bob", "Mill", 26, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Alfred", "Jinks", 23, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Sandra", "Tussel", 31, "female");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Mike", "Habraha", 45, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("John", "Murry", 22, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Jake", "Mechowsky", 34, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Hobrah", "Hinbrah", 24, "hermaphrodite");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Laura", "Smith", 17, "female");

很好。現在我們要將所有這些人新增到我們的表格中。退出 MySQL,並轉到儲存 tenPeople.sql 檔案的目錄。

到達那裡後,要將所有資料新增到你的資料庫,輸入:

mysql -u ted -p people <tenPeople.sql

然後輸入你的密碼。

現在登入到 MySQL,並記住選擇你正在使用的資料庫。\u people

現在再次檢查你擁有的資訊。好了。

操作你的資料庫

[edit | edit source]

現在我們有一個充滿了人的資料庫。我們可以以我們想要的方式顯示這些資訊。

一個簡單的例子是

select firstName, lastName, gender from peopleInfo;

這隻會將人們的姓名、姓氏和性別顯示在螢幕上。你沒有指定要顯示人們的資料庫 ID、數字或年齡。而且最棒的是,你可以選擇要顯示的資料庫中的任何內容。現在,如果你想刪除你的表格,只需輸入

drop table peopleInfo;


附加條件

你也可以在顯示資料時使用額外的條件(過濾器)。

select * from peopleInfo where gender = 'female';

將顯示所有女性。

(注意:字母用 ' 括起來,而數字則直接使用。)

你也可以比較數字。例如

select * from peopleInfo where age > 17;

將顯示錶格中所有年齡大於 17 的人。

一個小索引

>   greater than
<   less than
>=  greater or equal to
<=  less than or equal to
<>  not equal to


假設我們要顯示所有姓氏以字母 “j” 開頭的人。我們將使用 LIKE 條件。(說得通,你的名字像字母 “j” 嗎?如果它以 j 開頭,那麼答案是肯定的。:))

關於 LIKE 條件。

[4]

select * from peopleInfo where firstName LIKE "j%";

(注意:LIKE 的邪惡的相反的表兄弟是 NOT LIKE)

備份和恢復你的 MySQL 資料庫

[edit | edit source]

有一個名為 mysqldump 的函式。這是一種備份資料庫的方法。

還記得你如何從 tenPeople.sql 中將資訊匯入資料庫嗎?這就是你將資訊恢復到資料庫的方式。

(在這種特殊情況下,你必須確保你的資料庫中有一個名為“peopleInfo”的表格)


現在...

要備份你的資料庫(在本例中備份 people 資料庫)

我們首先要建立我們要備份到的 .txt 檔案。開啟一個空白的 .txt 檔案,並將其儲存為 backupfile.sql

現在我們可以輸入

mysqldump -u ted -p people > backupfile.sql

恭喜你。你現在已經備份了你的 people 資料庫。


警告! mysqldump 是備份生產資料庫的最糟糕方法之一,原因如下

  • 它需要相當長的時間來轉儲資料
  • 恢復需要更長的時間。取決於資料量,可能需要幾天時間!
  • MyISAM 表或混合環境的鎖定問題

更好的解決方案基於二進位制複製。它允許你執行非鎖定、一致的備份。

對於 MyISAM 或混合環境

  • LVM 快照

對於 InnoDB

  • LVM 快照
  • ZFS 快照(適用於 Solaris 系統)
  • InnoDB 熱備份
  • XtraBackup(類似於 InnoDB 熱備份,但免費)

phpMyAdmin

[edit | edit source]

這個圖形介面允許透過用滑鼠選擇一些選項來生成 SQL 程式碼。該軟體在 http://wiki.cihar.com/pma/Welcome_to_phpMyAdmin_Wiki 上有自己的維基頁面。

Hello world

[edit | edit source]

要輸入 SQL 命令

select "hello world";
+-------------+
| hello world |
+-------------+
| hello world |
+-------------+
1 row in set (0.00 sec)
華夏公益教科書