本教程主要是面向想學習MySQL的初學者,在通過本教程的學習后,能夠?qū)ySQL有一個初步的認識并能比較熟練地操作MySQL數(shù)據(jù)庫。
在任何版本的 Windows 默認安裝是現(xiàn)在比以前要容易得多,MySQL巧妙地打包安裝程序。只需下載安裝包,隨地把它解壓縮,并運行 mysql.exe. 下載地址:http://dev.mysql.com/downloads/ 頁面如下圖所示:
這里點擊:DOWNLOAD 鏈接,進入一下頁面:


這里點擊:DOWNLOAD 鏈接,進入一下頁面:


這里要求注冊網(wǎng)站帳號,但可以直接通過。如上點擊 "No thanks, just start my download",繼續(xù)下一步:
提示下載保存文件,下載完成后(本教程中下載完成的文件是:mysql-5.6.25-winx64.zip)解壓文件放到目錄:D:\software 下,這是一個免安裝包,這里不需要安裝步驟。
在本教程中MySQL執(zhí)行文件在:D:\software\mysql-5.6.25-winx64\bin, 它通過從命令提示符第一次進入測試MySQL服務器。轉(zhuǎn)到mysqld服務器的位置,這里進入 D:\software\mysql-5.6.25-winx64\bin,然后輸入mysqld.exe,

注:或直接雙擊文件:mysqld.exe 啟動MySQL服務,如果不啟動數(shù)據(jù)庫,以下的步驟無法操作;
如果一切順利,會看到有關(guān)啟動和InnoDB一些消息。如果沒有看到,可能有權(quán)限問題。請確保保存數(shù)據(jù)的目錄可以訪問任何根據(jù)用戶(可能是MySQL)運行數(shù)據(jù)庫進程。
MySQL不會自己添加到開始菜單,并沒有特別漂亮的GUI的方式來停止服務器。 因此,如果傾向于通過雙擊可執(zhí)行 mysqld 啟動服務器,應該記住通過并用 mysqladmin,任務列表,任務管理器或其他 Windows 特定方式來執(zhí)行。
MySQL已經(jīng)被成功安裝后,基礎(chǔ)表已經(jīng)被初始化,并且服務器已經(jīng)啟動,可以通過一些簡單的測試驗證。
使用 mysqladmin 來檢查服務器版本。在目錄 D:\software\mysql-5.6.25-winx64\bin
D:\software\mysql-5.6.25-winx64\bin> mysqladmin --version
看到結(jié)果如下:
mysqladmin Ver 8.42 Distrib 5.6.25, for Win64 on x86_64
如果看到這樣的消息,則有可能是在安裝了一些問題,需要一些幫助解決它。
可以使用MySQL客戶端使用 mysql 命令連接到 MySQL 服務器。此時,不需要給任何密碼,因為默認情況下它被設置為空。
所以,只需要使用下面的命令:
D:\software\mysql-5.6.25-winx64\bin> mysql
應該出現(xiàn)一個mysql>提示符。 現(xiàn)在,已連接到MySQL服務器,可以在MySQL的命令>提示符下執(zhí)行所有SQL,如下:
mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.13 sec)
MySQL附帶了一個空密碼有的root用戶。成功后安裝了數(shù)據(jù)庫和客戶端,需要進行如下設置root密碼:
D:\software\mysql-5.6.25-winx64\bin> mysqladmin -u root password "123456";
注:
1. 關(guān)閉正在運行的MySQL服務。現(xiàn)在使MySQL服務器的連接,那么使用下面的命令:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p Enter password: ******
首先檢查MySQL服務器正在運行與否。在資源管理器查看有沒有mysqld的進程,如果MySQL正在運行,那么會看到列出來的 mysqld 進程。如果服務器沒有運行,那么可以使用下面的命令來啟動它:
D:\software\mysql-5.6.25-winx64\bin>mysqld 2015-07-30 22:59:20 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2015-07-30 22:59:20 0 [Note] mysqld (mysqld 5.6.25) starting as process 3028 ...
現(xiàn)在,如果想關(guān)閉已經(jīng)運行的 MySQL 服務器,那么可以使用下面的命令做到這一點:
D:\software\mysql-5.6.25-winx64\bin>mysqladmin -u root -p shutdown Enter password: ******
要添加一個新用戶到 MySQL,只需要在數(shù)據(jù)庫中的新記錄添加到用戶表:mysql.user
下面是添加新用戶:yiibai 的例子,給定 SELECT, INSERT 和 UPDATE權(quán)限并使用密碼:yiibai123; SQL 查詢是:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p
Enter password:
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'yiibai',
PASSWORD('123456'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT host, user, password FROM user WHERE user = 'yiibai';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | yiibai | *59A8740AAC5DBCB2907F38891BE42957F699CB77 |
+-----------+---------+------------------+
1 row in set (0.00 sec)
當要添加一個新用戶,記得要PASSWORD()函數(shù)加密MySQL新使用的密碼。正如在上面的例子中看到密碼為mypass,進行加密后為:*59A8740AAC5DBCB2907F38891BE42957F699CB77
注意最后要使用 FLUSH PRIVILEGES 語句。 這告訴服務器重新加載授權(quán)表。如果不使用它,那么將無法使用新的用戶帳戶連接到MySQL服務器,至少在服務器重新啟動后才可以。
也可以通過在用戶設置表以下幾列的值為'Y',指定給新用戶的權(quán)限,在執(zhí)行INSERT查詢后,也可以在以后使用UPDATE查詢更新它們:
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv
下面我們來創(chuàng)建一個數(shù)據(jù)庫:tutorials,使用以下命令:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p password; Enter password:
mysql>create database tutorials default character set utf8 collate utf8_general_ci;
添加用戶帳戶的另一種方式是通過使用GRANT SQL命令; 下面的例子將增加用戶zara 并使用密碼zara123 為特定數(shù)據(jù)庫:tutorials
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p password;
Enter password:
mysql> use mysql;
Database changed
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON tutorials.*
-> TO 'yiibai'@'localhost'
-> IDENTIFIED BY '123456';
這也將創(chuàng)建一條記錄在MySQL數(shù)據(jù)庫中的表: user
注意: MySQL不會終止命令,直到給一個分號(;)在SQL命令的結(jié)尾。
大多數(shù)情況下,不需要去修改這個文件。默認情況下,它會具有以下項:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock [mysql.server] user=mysql basedir=/var/lib [safe_mysqld] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
在這里,可以指定錯誤日志為其它的目錄,否則不應該更改此文件中的任何內(nèi)容。
這里是重要的MySQL命令,經(jīng)常在MySQL數(shù)據(jù)庫的管理或工作中使用:
USE Databasename : 用于選擇在MySQL工作區(qū)指定的數(shù)據(jù)庫。
SHOW DATABASES: 列出了MySQL數(shù)據(jù)庫管理系統(tǒng)中的所有可訪問的數(shù)據(jù)庫。
SHOW TABLES: 顯示已經(jīng)選擇數(shù)據(jù)庫中的表的命令。
SHOW COLUMNS FROM tablename: 顯示屬性,屬性類型,關(guān)鍵信息,NULL是否被允許,默認值和其它的表信息。
SHOW INDEX FROM tablename: 提供所有指標的詳細信息表,其中包括PRIMARY KEY.
SHOW TABLE STATUS LIKE tablename\G: 報告MySQL的數(shù)據(jù)庫管理系統(tǒng)的性能和統(tǒng)計數(shù)據(jù)的詳細信息。
可以使用MySQL二進制在命令提示符下建立MySQL數(shù)據(jù)庫的連接。
下面是一個簡單的例子,從命令提示符連接MySQL服務器:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p Enter password:
注意,這里密碼為空,直接回車就就進入mysql>命令提示符下,能夠執(zhí)行任何SQL命令。以下是上述命令的結(jié)果:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.25 MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
在上面的例子中,我們使用 root 用戶,但可以使用任何其他用戶。任何用戶將能夠執(zhí)行所有的SQL操作(前提這個用戶有對應執(zhí)行SQL權(quán)限)。
任何時候使用exit命令在mysql>提示符下,從MySQL數(shù)據(jù)庫斷開。
mysql> exit Bye
下面是一個簡單的例子,創(chuàng)建名為 tutorials 的數(shù)據(jù)庫。
D:\software\mysql-5.6.25-winx64\bin> mysqladmin -u root -p create tutorials Enter password:<回車>
或
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p Enter password: mysql>create database yiibai_tutorials1; mysql>create database yiibai_tutorials2;
這將創(chuàng)建一個MySQL數(shù)據(jù)庫:yiibai_tutorials1 和 yiibai_tutorials2,使用下面命令查看結(jié)果:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | yiibai_tutorials1 | | yiibai_tutorials2 | +--------------------+ 6 rows in set (0.00 sec)
需要特殊權(quán)限來創(chuàng)建或刪除一個MySQL數(shù)據(jù)庫。因此,假如你有機會獲得root用戶來登錄,可以用mysql中mysqladmin二進制來創(chuàng)建任何數(shù)據(jù)庫。
在刪除任何數(shù)據(jù)庫時要注意,因為刪除數(shù)據(jù)庫時所有的數(shù)據(jù)在數(shù)據(jù)庫中。
下面是一個例子,用來刪除前面的章節(jié)中所創(chuàng)建的數(shù)據(jù)庫:
D:\software\mysql-5.6.25-winx64\bin> mysqladmin -u root -p drop yiibai_tutorials1 Enter password:******這會給出一個警告,它會確認你是否真的要刪除這個數(shù)據(jù)庫或不刪除。
Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'yiibai_tutorials1' database [y/N] y Database "yiibai_tutorials1" dropped或使用:
mysql> drop database yiibai_tutorials1; Query OK, 0 rows affected (0.01 sec)
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | yiibai | +--------------------+ 6 rows in set (0.00 sec)
連接到MySQL服務器后,則需要選擇特定的數(shù)據(jù)庫的來工作。這是因為可能有多個數(shù)據(jù)庫可使用在MySQL服務器上。
這是非常簡單的,從MySQL>提示符下選擇一個特定的數(shù)據(jù)庫??梢允褂肧QL命令的 user 來選擇一個特定的數(shù)據(jù)庫。
下面是一個例子,選擇數(shù)據(jù)庫為 test :
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p Enter password: mysql> use test; Database changed mysql>
現(xiàn)在,我們已經(jīng)選擇 test 數(shù)據(jù)庫,后續(xù)所有操作將在 test 數(shù)據(jù)庫上執(zhí)行。
注意: 所有的數(shù)據(jù)庫名,表名,表中的字段名稱是區(qū)分大小寫的。所以,我們必須使用適當?shù)拿Q,在給定任何SQL命令。
正確地定義的表中的字段在數(shù)據(jù)庫的整體優(yōu)化是非常重要的。我們應該只使用真正需要使用類型和字段的大小; 如果知道只使用2個字符,就不使用10個字符寬定義一個字段。這些類型的字段(或列),也被稱為數(shù)據(jù)類型,數(shù)據(jù)存儲這些字段之中。
MySQL使用許多不同的數(shù)據(jù)類型,總體上分為三類:數(shù)字,日期,時間和字符串類型。
MySQL使用所有標準的ANSI SQL數(shù)字數(shù)據(jù)類型,所以,如果在學習MySQL之前,有接觸過其它不同的數(shù)據(jù)庫系統(tǒng),那么這些定義看起來很熟悉。下面列出了常見的數(shù)字數(shù)據(jù)類型及其說明:
INT - 正常大小的整數(shù),可以帶符號。如果是有符號的,它允許的范圍是從-2147483648到2147483647。如果是無符號,允許的范圍是從0到4294967295。 可以指定多達11位的寬度。
TINYINT - 一個非常小的整數(shù),可以帶符號。如果是有符號,它允許的范圍是從-128到127。如果是無符號,允許的范圍是從0到255,可以指定多達4位數(shù)的寬度。
SMALLINT - 一個小的整數(shù),可以帶符號。如果有符號,允許范圍為-32768至32767。如果無符號,允許的范圍是從0到65535,可以指定最多5位的寬度。
MEDIUMINT - 一個中等大小的整數(shù),可以帶符號。如果有符號,允許范圍為-8388608至8388607。 如果無符號,允許的范圍是從0到16777215,可以指定最多9位的寬度。
BIGINT - 一個大的整數(shù),可以帶符號。如果有符號,允許范圍為-9223372036854775808到9223372036854775807。如果無符號,允許的范圍是從0到18446744073709551615. 可以指定最多20位的寬度。
FLOAT(M,D) - 不能使用無符號的浮點數(shù)字??梢远x顯示長度(M)和小數(shù)位數(shù)(D)。這不是必需的,并且默認為10,2。其中2是小數(shù)的位數(shù),10是數(shù)字(包括小數(shù))的總數(shù)。小數(shù)精度可以到24個浮點。
DOUBLE(M,D) - 不能使用無符號的雙精度浮點數(shù)??梢远x顯示長度(M)和小數(shù)位數(shù)(D)。 這不是必需的,默認為16,4,其中4是小數(shù)的位數(shù)。小數(shù)精度可以達到53位的DOUBLE。 REAL是DOUBLE同義詞。
DECIMAL(M,D) - 非壓縮浮點數(shù)不能是無符號的。在解包小數(shù),每個小數(shù)對應于一個字節(jié)。定義顯示長度(M)和小數(shù)(D)的數(shù)量是必需的。 NUMERIC是DECIMAL的同義詞。
MySQL的日期和時間數(shù)據(jù)類型包括:
DATE - 以YYYY-MM-DD格式的日期,在1000-01-01和9999-12-31之間。 例如,1973年12月30日將被存儲為1973-12-30。
DATETIME - 日期和時間組合以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:00 到9999-12-31 23:59:59之間。例如,1973年12月30日下午3:30,會被存儲為1973-12-30 15:30:00。
TIMESTAMP - 1970年1月1日午夜之間的時間戳,到2037的某個時候。這看起來像前面的DATETIME格式,無需只是數(shù)字之間的連字符; 1973年12月30日下午3點30分將被存儲為19731230153000(YYYYMMDDHHMMSS)。
TIME - 存儲時間在HH:MM:SS格式。
YEAR(M) - 以2位或4位數(shù)字格式來存儲年份。如果長度指定為2(例如YEAR(2)),年份就可以為1970至2069(70?69)。如果長度指定為4,年份范圍是1901-2155,默認長度為4。
雖然數(shù)字和日期類型比較有意思,但存儲大多數(shù)數(shù)據(jù)都可能是字符串格式。 下面列出了在MySQL中常見的字符串數(shù)據(jù)類型。
CHAR(M) - 固定長度的字符串是以長度為1到255之間個字符長度(例如:CHAR(5)),存儲右空格填充到指定的長度。 限定長度不是必需的,它會默認為1。
VARCHAR(M) - 可變長度的字符串是以長度為1到255之間字符數(shù)(高版本的MySQL超過255); 例如: VARCHAR(25). 創(chuàng)建VARCHAR類型字段時,必須定義長度。
BLOB or TEXT - 字段的最大長度是65535個字符。 BLOB是“二進制大對象”,并用來存儲大的二進制數(shù)據(jù),如圖像或其他類型的文件。定義為TEXT文本字段還持有大量的數(shù)據(jù); 兩者之間的區(qū)別是,排序和比較上存儲的數(shù)據(jù),BLOB大小寫敏感,而TEXT字段不區(qū)分大小寫。不用指定BLOB或TEXT的長度。
TINYBLOB 或 TINYTEXT - BLOB或TEXT列用255個字符的最大長度。不指定TINYBLOB或TINYTEXT的長度。
MEDIUMBLOB or MEDIUMTEXT - BLOB或TEXT列具有16777215字符的最大長度。不指定MEDIUMBLOB或MEDIUMTEXT的長度。
LONGBLOB 或 LONGTEXT - BLOB或TEXT列具有4294967295字符的最大長度。不指定LONGBLOB或LONGTEXT的長度。
ENUM - 枚舉,這是一個奇特的術(shù)語列表。當定義一個ENUM,要創(chuàng)建它的值的列表,這些是必須用于選擇的項(也可以是NULL)。例如,如果想要字段包含“A”或“B”或“C”,那么可以定義為ENUM為 ENUM(“A”,“B”,“C”)也只有這些值(或NULL)才能用來填充這個字段。
表的創(chuàng)建命令需要:
表的名稱
字段名稱
定義每個字段(類型、長度等)
下面是通用的SQL語法用來創(chuàng)建MySQL表:
CREATE TABLE table_name (column_name column_type);
現(xiàn)在,我們將在 test 數(shù)據(jù)庫中創(chuàng)建以下表。
create table tutorials_tbl( tutorial_id INT NOT NULL AUTO_INCREMENT, tutorial_title VARCHAR(100) NOT NULL, tutorial_author VARCHAR(40) NOT NULL, submission_date DATE, PRIMARY KEY ( tutorial_id ) );
在這里,一些數(shù)據(jù)項需要解釋:
字段使用NOT NULL屬性,是因為我們不希望這個字段的值為NULL。 因此,如果用戶將嘗試創(chuàng)建具有NULL值的記錄,那么MySQL會產(chǎn)生錯誤。
字段的AUTO_INCREMENT屬性告訴MySQL自動增加id字段下一個可用編號。
關(guān)鍵字PRIMARY KEY用于定義此列作為主鍵??梢允褂枚禾柗指舳鄠€列來定義主鍵。
在mysql>提示符下,創(chuàng)建一個MySQL表這是很容易的。使用 SQL 命令 CREATE TABLE 來創(chuàng)建表。
下面是一個例子,創(chuàng)建一個表: tutorials_tbl:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p Enter password: mysql> use tutorials; Database changed mysql> CREATE TABLE tutorials_tbl( -> tutorial_id INT NOT NULL AUTO_INCREMENT, -> tutorial_title VARCHAR(100) NOT NULL, -> tutorial_author VARCHAR(40) NOT NULL, -> submission_date DATE, -> PRIMARY KEY ( tutorial_id ) -> ); Query OK, 0 rows affected (0.16 sec) mysql>
注: MySQL不會終止命令,直到給一個分號(;)表示SQL命令結(jié)束。
查看創(chuàng)建表的結(jié)果:
刪除現(xiàn)有MySQL表這是很容易的,但必須非常小心,當刪除表后丟失的數(shù)據(jù)將不能恢復。
這是用來刪除MySQL表的通用SQL語法:
DROP TABLE table_name ;
這需要只是在 MySQL>提示符下執(zhí)行DROP TABLE SQL命令。
下面是一個例子,它將刪除表:tutorials_tbl:
root@host# mysql -u root -p Enter password: mysql> use test; Database changed mysql> DROP TABLE tutorials_tbl; Query OK, 0 rows affected (0.8 sec) mysql>
想要將數(shù)據(jù)插入到MySQL表,需要使用SQL INSERT INTO命令。 可以通過用mysql>提示符或通過使用像PHP腳本將任何數(shù)據(jù)插入到MySQL表。
這里是INSERT INTO命令將數(shù)據(jù)插入到MySQL表的通用SQL語法:
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
要插入字符串類型數(shù)據(jù),則需要雙或單引號保留到所有的值,例如:- "value".
這將使用SQL 的INSERT INTO命令將數(shù)據(jù)插入到MySQL表:tutorials_tbl
下面的例子將創(chuàng)建3條記錄到表:tutorials_tbl
root@host# mysql -u root -p password;
Enter password:
mysql> use use;
Database changed
mysql> INSERT INTO tutorials_tbl (tutorial_title, tutorial_author, submission_date) VALUES ("Learn PHP", "Paul", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn MySQL", "Saya", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("JAVA Tutorial", "yiibai", '2015-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>
注意: 請注意,所有的箭頭符號(->)不是SQL命令的一部分; 它表示一個新行,是由MySQL提示符按下回車鍵沒有給出一個分號,命令自動創(chuàng)建在行尾。
在上面的例子中,未提供 tutorial_id 對應的值,因為在創(chuàng)建表時它會自動創(chuàng)建,這個字段我們給了AUTO_INCREMENT選項。因此MySQL會自動分配插入ID的值。 這里, NOW() 是MySQL函數(shù),返回當前的日期和時間。
SQL SELECT命令用于從MySQL數(shù)據(jù)庫獲取數(shù)據(jù)。可以在MySQL>提示符使用這個命令,以及任何像PHP的腳本和語言等。
下面是通用的SQL的SELECT命令語法,從MySQL表獲取數(shù)據(jù):
SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE Clause] [OFFSET M ][LIMIT N]
可以使用分隔的一個或多個逗號從多個表,以及使用WHERE子句包括各種條件,但WHERE子句是SELECT命令的可選部分
可以在一個SELECT命令指定讀取一個或多個字段
可以指定星號(*)代替選擇的字段。在這種情況下,將返回所有字段
可以指定任意的條件在 WHERE 子句后面
可以使用OFFSET指定一個偏移量,SELECT從那里開始返回記錄。默認情況下 offset 的值是 0
可以使用LIMIT屬性限制返回的數(shù)量
這將使用SQL SELECT命令從MySQL 表 tutorials_tbl 讀取數(shù)據(jù)
下面的例子將從 tutorials_tbl 表返回所有記錄:
root@host# mysql -u root -p password; Enter password: mysql> use test; Database changed mysql> SELECT * from tutorials_tbl; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | Paul | 2015-07-17 | | 2 | Learn MySQL | Saya | 2015-07-17 | | 3 | JAVA Tutorial | yiibai | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.25 sec) mysql>
我們已經(jīng)看到使用SQL SELECT命令從MySQL表中獲取數(shù)據(jù)。我們可以用 WHERE子句來篩選出結(jié)果的條件子句。使用WHERE子句,我們可以指定一個選擇標準,從表中選擇所需的記錄。
下面是SELECT命令使用WHERE子句來從MySQL表數(shù)據(jù)的通用SQL語法:
SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2.....
可以使用逗號分隔一個或多個表,以及WHERE子句包括各種條件,但WHERE子句只是SELECT命令的可選部分
可以指定使用任何條件在WHERE子句中
可以指定一個以上的條件在使用AND或OR運算符中
WHERE子句可以用DELETE 或 UPDATE的SQL命令一起,也可以指定一個條件使用。
WHERE子句就像是if一個條件在編程語言中, 此子句是用來比較給定值的字段值在MySQL表是否可用。如果從外部給定值等于在MySQL表可用字段值,那么它返回該行。
這里是運算符的列表,它可以在WHERE子句中使用。
假設字段A=10,字段B=20,則:
| 操作符 | 描述 | 示例 |
|---|---|---|
| = | 檢查兩個操作數(shù)的值是否相等,如果是,則條件變?yōu)檎妗?/td> | (A = B) 不為 true. |
| != | 檢查兩個操作數(shù)的值是否相等,如果值不相等,則條件變?yōu)檎妗?/td> | (A != B) 為 true. |
| > | 檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是,則條件為真。 | (A > B) 不為 true. |
| < | 檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是,則條件為真。 | (A < B) 為 true. |
| >= | 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值,如果是,則條件為真。 | (A >= B) 不為 true. |
| <= | 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值,如果是,則條件變?yōu)檎妗?/td> | (A <= B) 為 true. |
當想要從一個表中提取所選行,尤其是當使用MySQL聯(lián)接的WHERE子句是非常有用的。 聯(lián)接在另一章討論。
搜索使用主鍵進行快速搜索記錄是常見的做法。
如果給定的條件不匹配表任何記錄,那么查詢將不會返回任何行。
使用SQL SELECT命令以及WHERE子句,從MySQL表tutorials_tbl選擇獲取數(shù)據(jù)。
下面的例子將從tutorials_tbl表中作者的名字是yiibai所有記錄返回:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p password; Enter password: mysql> use test; Database changed mysql> SELECT * from tutorials_tbl WHERE tutorial_author='yiibai'; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 3 | JAVA Tutorial | yiibai | 2007-05-21 | +-------------+----------------+-----------------+-----------------+ 1 rows in set (0.01 sec) mysql>
除非執(zhí)行字符串LIKE比較,比較是不區(qū)分大小寫??梢允褂肂INARY關(guān)鍵字使搜索區(qū)分大小寫如下:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl \
WHERE BINARY tutorial_author='yiibai';
Empty set (0.02 sec)
mysql>
可能會有一個需要,要在一個MySQL表中的現(xiàn)有數(shù)據(jù)進行修改??梢酝ㄟ^使用SQL UPDATE命令來執(zhí)行。可以修改任何MySQL表中任何字段的值。
這里是UPDATE命令修改數(shù)據(jù)到MySQL表的通用SQL語法:
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
完全可以更新一個或多個字段。
可以指定使用任何條件在WHERE子句中。
可以一次更新一個表中的值。
當想更新表中選定行,WHERE子句是非常有用的。
使用SQL UPDATE命令以及WHERE子句來更新選定數(shù)據(jù)到MySQL表tutorials_tbl。
下面的例子將更新 tutorial_id 為3 的紀錄中的 tutorial_title 字段。
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> UPDATE tutorials_tbl
-> SET tutorial_title='Learning JAVA'
-> WHERE tutorial_id=3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
如果想從任何MySQL表中刪除紀錄,那么可以使用SQL命令:DELETE FROM. 可以使用這個命令在MySQL>提示符,以及PHP等腳本的語言。
這里是DELETE命令從一個MySQL表中刪除數(shù)據(jù)的通用的SQL語法:
DELETE FROM table_name [WHERE Clause]
如果WHERE子句沒有指定,則所有MySQL表中的記錄將被刪除。
可以指定使用任何條件在WHERE子句中。
可以一次刪除一個表中的所有記錄。
當要刪除一個表中選擇特定行,WHERE子句是非常有用的。