MySQL易學(xué)易用之MYSQL不為人知的特性
更新時(shí)間:2011年01月03日 14:23:22 作者:
MySQL易學(xué)易用,且附帶豐富的技術(shù)文檔,這二個(gè)因素使之被廣泛應(yīng)用。然而,隨著MySQL發(fā)展之迅速,即使一個(gè)MySQL老手有時(shí)也會(huì)為該軟件出其不意的功能感嘆。
本文將為你介紹這些不為人知的特性。
以XML格式查看查詢結(jié)果
通過使用傳統(tǒng)—xml 選項(xiàng)調(diào)用MySQL命令行客戶程序,你可以以XML格式(而不是傳統(tǒng)的列表形式)來查看MySQL查詢結(jié)果。如果你打算將查詢輸出與其它程序集成在一起,這一技巧非常有用,這里是一個(gè)例子:
表A
shell> mysql --xml
mysql> SELECT * FROM test.stories;
1
This is a test
2005-07-28 00:14:57
2
This is the second test
2005-07-28 00:15:11
2 rows in set (0.11 sec)
快速重建索引
通常情況下,如果你想改變服務(wù)器的全文搜索變量,你需要在表格中重新建立全文索引,以確保你的更新得到映射。這一操作將會(huì)花費(fèi)大量的時(shí)間,特別是如果你需要處理很多數(shù)據(jù)的時(shí)候。一種快速的解決方法是使用REPAIR TABLE命令,以下為演示過程:
表B
mysql> REPAIR TABLE content QUICK;
+-----------+--------+----------+----------+
| Table| Op| Msg_type | Msg_text |
+-----------+--------+----------+----------+
| content| repair | status| OK|
+-----------+--------+----------+----------+
1 row in set (0.05 sec)
壓縮一定的表格類型
如果你處理的是只讀MyISAM表格,MySQL允許你將其壓縮以節(jié)省磁盤空間。對(duì)此可以使用包括myisampack,如下所示:
表C
shell> myisampackmovies.MYI
Compressing movies.MYD: (146 records)
- Calculating statistics
- Compressing file
41.05%
使用傳統(tǒng)SQL
MySQL支持SQL查詢中的傳統(tǒng)用法,支持IF與CASE結(jié)構(gòu)。以下是一個(gè)簡(jiǎn)單的例子:
表D
mysql> SELECT IF (priv=1, 'admin', 'guest') As usertype FROM privs WHERE username = 'joe';
+----------+
| usertype |
+----------+
| admin|
+----------+
1 row in set (0.00 sec)
以CSV格式輸出表格數(shù)據(jù)
MySQL輸出文件包含一個(gè)全部SQL命令列表。如果你想將輸出文件導(dǎo)入到MySQL,這一功能非常實(shí)用,但如果目標(biāo)程序(比如Excel)不能與SQL相互通訊,這一方法將行不通。在這種情況下,可以通過告訴MySQL以CSV格式建立輸出文件,這種CSV格式很方便地導(dǎo)入到絕大部分的程序。這里演示了mysqldump的操作過程:
shell> mysqldump -T . --fields-terminated-by=", " mydbmytable
這將在當(dāng)前目錄中生成一個(gè)文本文件,包含來自mydb.mytable列表中以逗號(hào)為間隔符的記錄。
以激活strict模式減少“bad”數(shù)據(jù)的出現(xiàn)
MySQL服務(wù)器能夠以多種不同的模式運(yùn)行,而每一種都針對(duì)于特定的目的而優(yōu)化。在默認(rèn)情況下,沒有設(shè)置模式。然而,通過在服務(wù)器命令行中添加以下選項(xiàng)可以很容易地改變模式的設(shè)置并將MySQL以“strict”模式運(yùn)行:
shell> mysqld --sql_mode="STRICT_ALL_TABLES" &
在“strict”模式下,通過MySQL的中止查詢執(zhí)行并返回一個(gè)錯(cuò)誤,服務(wù)器的很多自動(dòng)修正功能都被無效化。同樣,該模式下也將會(huì)執(zhí)行更為嚴(yán)格的時(shí)間檢查。
監(jiān)視服務(wù)器
你可以通過運(yùn)行SHOW STATUS命令獲得一份服務(wù)器運(yùn)行與統(tǒng)計(jì)的報(bào)告,包括打開連接的次數(shù),激活查詢次數(shù),服務(wù)器正常運(yùn)行時(shí)間等等。例如:
表 E
mysql> SHOW STATUS;
+------------------+-------+
| Variable_name| Value |
+------------------+-------+
| Aborted_clients| 0|
| Aborted_connects | 0|
...
| Uptime| 851|
+------------------+-------+
156 rows in set (0.16 sec)
自動(dòng)返回CREATE TABLE代碼
MySQL允許你自動(dòng)獲得SQL命令重新建立一個(gè)特定的表格。只簡(jiǎn)單地運(yùn)行SHOW CREATE TABLE命令,并查看表格建立代碼,如下所示:
表 F
mysql> SHOW CREATE TABLE products;
-----------------------------------------------------
| Table| Create Table
+----------+-----------------------------------------
| products | CREATE TABLE `products` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`price` int(10) default NULL,
PRIMARY KEY(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+----------+-----------------------------------------
1 row in set (0.27 sec)
建立一個(gè)更為有用的命令提示:
在缺省情況下,MySQL命令行客戶程序顯示一個(gè)簡(jiǎn)單的mysql>提示符。然而,你可以使用特定的修改內(nèi)容來改變這一提示符使之變得更為有效,這些內(nèi)容包括:當(dāng)前用戶名稱,主機(jī)名稱,以及當(dāng)前選擇的數(shù)據(jù)庫。如下所示:
表 G
mysql> prompt \U:/\d>
PROMPT set to '\U:/\d>'
root@localhost:/db1>
從這里的文檔文件你可以獲得支持MySQL客戶程序更改的一個(gè)完整列表。
以XML格式查看查詢結(jié)果
通過使用傳統(tǒng)—xml 選項(xiàng)調(diào)用MySQL命令行客戶程序,你可以以XML格式(而不是傳統(tǒng)的列表形式)來查看MySQL查詢結(jié)果。如果你打算將查詢輸出與其它程序集成在一起,這一技巧非常有用,這里是一個(gè)例子:
表A
shell> mysql --xml
mysql> SELECT * FROM test.stories;
1
This is a test
2005-07-28 00:14:57
2
This is the second test
2005-07-28 00:15:11
2 rows in set (0.11 sec)
快速重建索引
通常情況下,如果你想改變服務(wù)器的全文搜索變量,你需要在表格中重新建立全文索引,以確保你的更新得到映射。這一操作將會(huì)花費(fèi)大量的時(shí)間,特別是如果你需要處理很多數(shù)據(jù)的時(shí)候。一種快速的解決方法是使用REPAIR TABLE命令,以下為演示過程:
表B
mysql> REPAIR TABLE content QUICK;
+-----------+--------+----------+----------+
| Table| Op| Msg_type | Msg_text |
+-----------+--------+----------+----------+
| content| repair | status| OK|
+-----------+--------+----------+----------+
1 row in set (0.05 sec)
壓縮一定的表格類型
如果你處理的是只讀MyISAM表格,MySQL允許你將其壓縮以節(jié)省磁盤空間。對(duì)此可以使用包括myisampack,如下所示:
表C
shell> myisampackmovies.MYI
Compressing movies.MYD: (146 records)
- Calculating statistics
- Compressing file
41.05%
使用傳統(tǒng)SQL
MySQL支持SQL查詢中的傳統(tǒng)用法,支持IF與CASE結(jié)構(gòu)。以下是一個(gè)簡(jiǎn)單的例子:
表D
mysql> SELECT IF (priv=1, 'admin', 'guest') As usertype FROM privs WHERE username = 'joe';
+----------+
| usertype |
+----------+
| admin|
+----------+
1 row in set (0.00 sec)
以CSV格式輸出表格數(shù)據(jù)
MySQL輸出文件包含一個(gè)全部SQL命令列表。如果你想將輸出文件導(dǎo)入到MySQL,這一功能非常實(shí)用,但如果目標(biāo)程序(比如Excel)不能與SQL相互通訊,這一方法將行不通。在這種情況下,可以通過告訴MySQL以CSV格式建立輸出文件,這種CSV格式很方便地導(dǎo)入到絕大部分的程序。這里演示了mysqldump的操作過程:
shell> mysqldump -T . --fields-terminated-by=", " mydbmytable
這將在當(dāng)前目錄中生成一個(gè)文本文件,包含來自mydb.mytable列表中以逗號(hào)為間隔符的記錄。
以激活strict模式減少“bad”數(shù)據(jù)的出現(xiàn)
MySQL服務(wù)器能夠以多種不同的模式運(yùn)行,而每一種都針對(duì)于特定的目的而優(yōu)化。在默認(rèn)情況下,沒有設(shè)置模式。然而,通過在服務(wù)器命令行中添加以下選項(xiàng)可以很容易地改變模式的設(shè)置并將MySQL以“strict”模式運(yùn)行:
shell> mysqld --sql_mode="STRICT_ALL_TABLES" &
在“strict”模式下,通過MySQL的中止查詢執(zhí)行并返回一個(gè)錯(cuò)誤,服務(wù)器的很多自動(dòng)修正功能都被無效化。同樣,該模式下也將會(huì)執(zhí)行更為嚴(yán)格的時(shí)間檢查。
監(jiān)視服務(wù)器
你可以通過運(yùn)行SHOW STATUS命令獲得一份服務(wù)器運(yùn)行與統(tǒng)計(jì)的報(bào)告,包括打開連接的次數(shù),激活查詢次數(shù),服務(wù)器正常運(yùn)行時(shí)間等等。例如:
表 E
mysql> SHOW STATUS;
+------------------+-------+
| Variable_name| Value |
+------------------+-------+
| Aborted_clients| 0|
| Aborted_connects | 0|
...
| Uptime| 851|
+------------------+-------+
156 rows in set (0.16 sec)
自動(dòng)返回CREATE TABLE代碼
MySQL允許你自動(dòng)獲得SQL命令重新建立一個(gè)特定的表格。只簡(jiǎn)單地運(yùn)行SHOW CREATE TABLE命令,并查看表格建立代碼,如下所示:
表 F
mysql> SHOW CREATE TABLE products;
-----------------------------------------------------
| Table| Create Table
+----------+-----------------------------------------
| products | CREATE TABLE `products` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`price` int(10) default NULL,
PRIMARY KEY(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+----------+-----------------------------------------
1 row in set (0.27 sec)
建立一個(gè)更為有用的命令提示:
在缺省情況下,MySQL命令行客戶程序顯示一個(gè)簡(jiǎn)單的mysql>提示符。然而,你可以使用特定的修改內(nèi)容來改變這一提示符使之變得更為有效,這些內(nèi)容包括:當(dāng)前用戶名稱,主機(jī)名稱,以及當(dāng)前選擇的數(shù)據(jù)庫。如下所示:
表 G
mysql> prompt \U:/\d>
PROMPT set to '\U:/\d>'
root@localhost:/db1>
從這里的文檔文件你可以獲得支持MySQL客戶程序更改的一個(gè)完整列表。
相關(guān)文章
解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowe
有時(shí)候在登錄到MySQL服務(wù)器時(shí)會(huì)遇到1130錯(cuò)誤,這是因?yàn)闊o法連接到MySQL服務(wù)器或其他一些原因,這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server的相關(guān)資料,需要的朋友可以參考下2023-12-12MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn)
本文主要介紹了MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08mysql優(yōu)化limit查詢語句的5個(gè)方法
這篇文章主要介紹了mysql優(yōu)化limit查詢語句的5個(gè)方法,它們分別是子查詢優(yōu)化法、倒排表優(yōu)化法、反向查找優(yōu)化法、limit限制優(yōu)化法和只查索引法,需要的朋友可以參考下2014-07-07關(guān)于Mysql如何設(shè)計(jì)高性能的數(shù)據(jù)庫
這篇文章主要介紹了關(guān)于Mysql如何設(shè)計(jì)高性能的數(shù)據(jù)庫,mysql支持的數(shù)據(jù)類型非常多,選擇正確的數(shù)據(jù)類型對(duì)于獲得高性能至關(guān)重要,本文就來詳細(xì)說明如何設(shè)計(jì)出高性能的數(shù)據(jù)庫,需要的朋友可以參考下2023-07-07step by step配置mysql復(fù)制的具體方法
每個(gè)服務(wù)器必須有唯一的server-id,默認(rèn)為1,為了防止沖突,一般建議設(shè)置為IP地址的后幾位,本例設(shè)置為12,通過修改主庫的my.cnf文件實(shí)現(xiàn)2013-09-09Mysql使用sum()函數(shù)返回null的問題詳解
MySQL的Sum()函數(shù)是用來找出所有記錄的一個(gè)字段的總和,下面這篇文章主要給大家介紹了關(guān)于Mysql使用sum()函數(shù)返回null的問題,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01MySQL中的數(shù)據(jù)加密解密安全技術(shù)教程
在數(shù)據(jù)庫應(yīng)用程序中,數(shù)據(jù)的安全性是至關(guān)重要的,MySQL作為一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),也提供了一些數(shù)據(jù)加密和解密的技巧來保護(hù)敏感數(shù)據(jù)的安全性,為了保護(hù)敏感數(shù)據(jù)免受未經(jīng)授權(quán)的訪問,我們可以使用加密和解密技術(shù)2024-01-01