一、數據庫簡介
MySQL 是一個快速、多線程、多用戶和強壯的SQL數據庫服務器。
對Unix和 OS/2 平臺,MySQL基本上是免費的;但對微軟平臺,你在30 天的試用期后必須獲得一個MySQL 許可證。詳見第三節(jié) MySQL許可證和技術支持。
MySQL是一個真正的多用戶、多線程SQL數據庫服務器。SQL(結構化查詢語言)是世界上最流行的和標準化的數據庫語言。MySQL是以一個客戶機/服務器結構的實現(xiàn),它由一個服務器守護程序mysqld
和很多不同的客戶程序和庫組成。
SQL是一種標準化的語言,它使得存儲、更新和存取信息更容易。例如,你能用SQL語言為一個網站檢索產品信息及存儲顧客信息,同時MySQL也足夠快和靈活以允許你存儲記錄文件和圖像。
MySQL 主要目標是快速、健壯和易用。最初是因為我們需要這樣一個SQL服務器,它能處理與任何可不昂貴硬件平臺上提供數據庫的廠家在一個數量級上的大型數據庫,但速度更快,MySQL就開發(fā)出來。自1996年以來,我們一直都在使用MySQL,其環(huán)境有超過 40 個數據庫,包含 10,000個表,其中500多個表超過7百萬行,這大約有100 個吉字節(jié)(GB)的關鍵應用數據。
MySQL建立的基礎是業(yè)已用在高要求的生產環(huán)境多年的一套實用例程。盡管MySQL仍在開發(fā)中,但它已經提供一個豐富和極其有用的功能集。
二、MySQL 的主要特征
下表描述MySQL一些重要的特征:
- 使用核心線程的完全多線程。這意味著它能很容易地利用多CPU(如果有)。
- C 、C++、 Eiffel 、 Java、 Perl、 PHP、Python、和 TCL API。見20 MySQL 客戶工具和 API。
- 可運行在不同的平臺上,見4.2 MySQL支持的操作系統(tǒng)。
- 多種列類型:1、 2、 3、4、和 8 字節(jié)長度的有符號/無符號整數、
FLOAT
、DOUBLE
、CHAR
、VARCHAR
、TEXT
、BLOB
、DATE
、TIME
、DATETIME、
TIMESTAMP
、YEAR
、SET
和ENUM
類型。 見7.3 列類型。 - 利用一個優(yōu)化的一遍掃描多重聯(lián)結(one-sweep multi-join)非常快速地進行聯(lián)結(join)。
- 在查詢的
SELECT
和WHERE部分
支持全部運算符和函數,例如:mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name WHERE income/dependents > 10000 AND age > 30;
- 通過一個高度優(yōu)化的類庫實現(xiàn)SQL函數庫并且像他們能達到的一樣快速,通常在查詢初始化后不應該有任何內存分配。
- 全面支持SQL的
GROUP BY
和ORDER BY
子句,支持聚合函數(COUNT()
、COUNT(DISTINCT)
、AVG()
、STD()
、SUM()
、MAX()
和MIN()
)。 - 支持ANSI SQL的
LEFT OUTER JOIN
和ODBC語法。
- 你可以在同一查詢中混用來自不同數據庫的表。(與版本 3.22一樣 )。
- 一個非常靈活且安全的權限和口令系統(tǒng),并且它允許基于主機的認證。口令是安全的,因為當與一個服務器連接時,所有的口令傳送被加密。
- ODBC for Windiws 95。所有的 ODBC 2 . 5 函數和其他許多函數。例如,你可以用Access連接你的 MySQL服務器。見16 MySQL ODBC 支持。
- 具備索引壓縮的快速B樹磁盤表。
- 每個表允許有16個索引。每個索引可以由1~16個列或列的一部分組成。最大索引長度是 256 個字節(jié)(在編譯MySQL時,它可以改變)。一個索引可以使用一個
CHAR
或VARCHAR
字段的前綴。 - 定長和變長記錄。
- 用作臨時表的內存散列表。
- 大數據庫處理。我們正在對某些包含 50,000,000 個記錄的數據庫使用MySQL。
- 所有列都有缺省值,你可以用
INSERT
插入一個表列的子集,那些沒用明確給定值的列設置為他們的缺省值。 - 為了可移植性使用 GNU Automake , Autoconf 和
libtool。
- 用C和C++編寫,并用大量不同的編譯器測試。
- 一個非常快速的基于線程的內存分配系統(tǒng)。
- 沒有內存漏洞。用一個商用內存漏洞監(jiān)測程序測試過(
purify
)。 - 包括
myisamchk
,一個檢查、優(yōu)化和修復數據庫表的快速實用程序,詳見13 維護 MySQL安裝。 - 全面支持ISO-8859-1 Latin1 字符集。例如,斯堪的納維亞的字符 @ringaccent{a}, @"a and @"o 在表和列名字被允許。
- 所有數據以 ISO-8859-1 Latin1 格式保存。所有正常的字符串比較是忽略大小寫的。
- 根據 ISO-8859-1 Latin1 字符集進行排序(目前瑞典語的方式)。通過在源代碼中增加排序順序數組可以改變它。為了理解一個更高級的排序例子,看一看捷克語的排序代碼。MySQL支持可在編譯時指定的很多不同的字符集。
- 表和列的別名符合 SQL92 標準。
DELETE
、INSERT
、REPLACE
和UPDATE
返回有多少行被改變(受影響)。- 函數名不會與表或列名沖突。例如
ABS
是一個有效的列名字。對函數調用的唯一限制是函數名與隨后的“(”不能有空格。詳見7.31 MySQL對保留字很挑剔嗎?。 - 所有MySQL程序可以用選項
--help
或-?
獲得聯(lián)機幫助。 - 服務器能為客戶提供多種語言的出錯消息,詳見9.1 MySQL支持哪些語言?。
- 客戶端使用TCP/IP 連接或Unix套接字(socket)或NT下的命名管道連接MySQL。
- MySQL特有的SHOW命令可用來檢索數據庫、表和索引的信息,EXPLAIN命令可用來確定優(yōu)化器如何解決一個查詢。
三、SQL語法
登錄MySQL服務器語法:mysql -h host_name -u user_name -p [password];
1、創(chuàng)建、刪除數據庫
CREATE DATABASE [IF NOT EXISTS] db_name
例如:create DATABASE Samp_db;
DROP DATABASE [IF EXISTS] db_name
例如:drop DATABASE Samp_db;
2、創(chuàng)建表格
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)][table_options] [select_statement];
例如:mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (a), KEY(b))
-> TYPE=MyISAM SELECT b,c FROM test2;
3、插入數據
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ((expression | DEFAULT),...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expression, ... ]
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name=(expression | DEFAULT), ...
[ ON DUPLICATE KEY UPDATE col_name=expression, ... ]
例如:mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
凡是有該標志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
、轉載請注明來處和原文作者。非常感謝。