亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
目錄 前言 1. 一般信息 1.1. 關(guān)于本手冊(cè) 1.2. 本手冊(cè)采用的慣例 1.3. MySQL AB概述 1.4. MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)概述 1.4.1. MySQL的歷史 1.4.2. MySQL的的主要特性 1.4.3. MySQL穩(wěn)定性 1.4.4. MySQL表最大能達(dá)到多少 1.4.5. 2000年兼容性 1.5. MaxDB數(shù)據(jù)庫(kù)管理系統(tǒng)概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的歷史 1.5.3. MaxDB的特性 1.5.4. 許可和支持 1.5.5. MaxDB和MySQL之間的特性差異 1.5.6. MaxDB和MySQL之間的協(xié)同性 1.5.7. 與MaxDB有關(guān)的鏈接 1.6. MySQL發(fā)展大事記 1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL郵件列表 1.7.2. IRC(在線聊天系統(tǒng))上的MySQL社區(qū)支持 1.7.3. MySQL論壇上的MySQL社區(qū)支持 1.8. MySQL標(biāo)準(zhǔn)的兼容性 1.8.1. MySQL遵從的標(biāo)準(zhǔn)是什么 1.8.2. 選擇SQL模式 1.8.3. 在ANSI模式下運(yùn)行MySQL 1.8.4. MySQL對(duì)標(biāo)準(zhǔn)SQL的擴(kuò)展 1.8.5. MySQL與標(biāo)準(zhǔn)SQL的差別 1.8.6. MySQL處理約束的方式 2. 安裝MySQL 2.1. 一般安裝問題 2.1.1. MySQL支持的操作系統(tǒng) 2.1.2. 選擇要安裝的MySQL分發(fā)版 2.1.3. 怎樣獲得MySQL 2.1.4. 通過(guò)MD5校驗(yàn)和或GnuPG驗(yàn)證軟件包的完整性 2.1.5. 安裝布局 2.2. 使用二進(jìn)制分發(fā)版的標(biāo)準(zhǔn)MySQL安裝 2.3. 在Windows上安裝MySQL 2.3.1. Windows系統(tǒng)要求 2.3.2. 選擇安裝軟件包 2.3.3. 用自動(dòng)安裝器安裝MySQL 2.3.4. 使用MySQL安裝向?qū)?/a> 2.3.5. 使用配置向?qū)?/a> 2.3.6. 通過(guò)非安裝Zip文件安裝MySQL 2.3.7. 提取安裝檔案文件 2.3.8. 創(chuàng)建選項(xiàng)文件 2.3.9. 選擇MySQL服務(wù)器類型 2.3.10. 首次啟動(dòng)服務(wù)器 2.3.11. 從Windows命令行啟動(dòng)MySQL 2.3.12. 以Windows服務(wù)方式啟動(dòng)MySQL 2.3.13. 測(cè)試MySQL安裝 2.3.14. 在Windows環(huán)境下對(duì)MySQL安裝的故障診斷與排除 2.3.15. 在Windows下升級(jí)MySQL 2.3.16. Windows版MySQL同Unix版MySQL對(duì)比 2.4. 在Linux下安裝MySQL 2.5.在Mac OS X中安裝MySQL 2.6. 在NetWare中安裝MySQL 2.7. 在其它類Unix系統(tǒng)中安裝MySQL 2.8. 使用源碼分發(fā)版安裝MySQL 2.8.1. 源碼安裝概述 2.8.2. 典型配置選項(xiàng) 2.8.3. 從開發(fā)源碼樹安裝 2.8.4. 處理MySQL編譯問題 2.8.5. MIT-pthreads注意事項(xiàng) 2.8.6. 在Windows下從源碼安裝MySQL 2.8.7. 在Windows下編譯MySQL客戶端 2.9. 安裝后的設(shè)置和測(cè)試 2.9.1. Windows下安裝后的過(guò)程 2.9.2. Unix下安裝后的過(guò)程 2.9.3. 使初始MySQL賬戶安全 2.10. 升級(jí)MySQL 2.10.1. 從5.0版升級(jí) 2.10.2. 升級(jí)授權(quán)表 2.10.3. 將MySQL數(shù)據(jù)庫(kù)拷貝到另一臺(tái)機(jī)器 2.11. 降級(jí)MySQL 2.12. 具體操作系統(tǒng)相關(guān)的注意事項(xiàng) 2.12.1. Linux注意事項(xiàng) 2.12.2. Mac OS X注意事項(xiàng) 2.12.3. Solaris注意事項(xiàng) 2.12.4. BSD注意事項(xiàng) 2.12.5. 其它Unix注意事項(xiàng) 2.12.6. OS/2注意事項(xiàng) 2.13. Perl安裝注意事項(xiàng) 2.13.1. 在Unix中安裝Perl 2.13.2. 在Windows下安裝ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的問題 3. 教程 3.1. 連接與斷開服務(wù)器 3.2. 輸入查詢 3.3. 創(chuàng)建并使用數(shù)據(jù)庫(kù) 3.3.1. 創(chuàng)建并選擇數(shù)據(jù)庫(kù) 3.3.2. 創(chuàng)建表 3.3.3. 將數(shù)據(jù)裝入表中 3.3.4. 從表檢索信息 3.4. 獲得數(shù)據(jù)庫(kù)和表的信息 NoName 3.6. 常用查詢的例子 3.6.1. 列的最大值 3.6.2. 擁有某個(gè)列的最大值的行 3.6.3. 列的最大值:按組 3.6.4. 擁有某個(gè)字段的組間最大值的行 3.6.5. 使用用戶變量 3.6.6. 使用外鍵 3.6.7. 根據(jù)兩個(gè)鍵搜索 3.6.8. 根據(jù)天計(jì)算訪問量 3.6.9. 使用AUTO_INCREMENT 3.7. 孿生項(xiàng)目的查詢 3.7.1. 查找所有未分發(fā)的孿生項(xiàng) 3.7.2. 顯示孿生對(duì)狀態(tài)的表 3.8. 與Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 調(diào)用MySQL程序 4.3. 指定程序選項(xiàng) 4.3.1. 在命令行上使用選項(xiàng) 4.3.2. 使用選項(xiàng)文件 4.3.3. 用環(huán)境變量指定選項(xiàng) 4.3.4. 使用選項(xiàng)設(shè)置程序變量 5. 數(shù)據(jù)庫(kù)管理 5.1. MySQL服務(wù)器和服務(wù)器啟動(dòng)腳本 5.1.1. 服務(wù)器端腳本和實(shí)用工具概述 5.1.2. mysqld-max擴(kuò)展MySQL服務(wù)器 5.1.3. mysqld_safe:MySQL服務(wù)器啟動(dòng)腳本 5.1.4. mysql.server:MySQL服務(wù)器啟動(dòng)腳本 5.1.5. mysqld_multi:管理多個(gè)MySQL服務(wù)器的程序 5.2. mysqlmanager:MySQL實(shí)例管理器 5.2.1. 用MySQL實(shí)例管理器啟動(dòng)MySQL服務(wù)器 5.2.2. 連接到MySQL實(shí)例管理器并創(chuàng)建用戶賬戶 5.2.3. MySQL實(shí)例管理器命令行選項(xiàng) 5.2.4. MySQL實(shí)例管理器配置文件 5.2.5. MySQL實(shí)例管理器識(shí)別的命令 5.3. mysqld:MySQL服務(wù)器 5.3.1. mysqld命令行選項(xiàng) 5.3.2. SQL服務(wù)器模式 5.3.3. 服務(wù)器系統(tǒng)變量 5.3.4. 服務(wù)器狀態(tài)變量 5.4. mysql_fix_privilege_tables:升級(jí)MySQL系統(tǒng)表 5.5. MySQL服務(wù)器關(guān)機(jī)進(jìn)程 5.6. 一般安全問題 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻擊者面前保持安全 5.6.3. Mysqld安全相關(guān)啟動(dòng)選項(xiàng) 5.6.4. LOAD DATA LOCAL安全問題 5.7. MySQL訪問權(quán)限系統(tǒng) 5.7.1. 權(quán)限系統(tǒng)的作用 5.7.2. 權(quán)限系統(tǒng)工作原理 5.7.3. MySQL提供的權(quán)限 5.7.4. 與MySQL服務(wù)器連接 5.7.5. 訪問控制 5.7.6. 訪問控制 5.7.7. 權(quán)限更改何時(shí)生效 5.7.8. 拒絕訪問錯(cuò)誤的原因 5.7.9. MySQL 4.1中的密碼哈希處理 5.8. MySQL用戶賬戶管理 5.8.1. MySQL用戶名和密碼 5.8.2. 向MySQL增加新用戶賬戶 5.8.3. 從MySQL刪除用戶賬戶 5.8.4. 限制賬戶資源 5.8.5. 設(shè)置賬戶密碼 5.8.6. 使你的密碼安全 5.8.7. 使用安全連接 5.9. 備份與恢復(fù) 5.9.1. 數(shù)據(jù)庫(kù)備份 5.9.2. 示例用備份與恢復(fù)策略 5.9.3. 自動(dòng)恢復(fù) 5.9.4. 表維護(hù)和崩潰恢復(fù) 5.9.5. myisamchk:MyISAM表維護(hù)實(shí)用工具 5.9.6. 建立表維護(hù)計(jì)劃 5.9.7. 獲取關(guān)于表的信息 5.10. MySQL本地化和國(guó)際應(yīng)用 5.10.1. 數(shù)據(jù)和排序用字符集 5.10.2. 設(shè)置錯(cuò)誤消息語(yǔ)言 5.10.3. 添加新的字符集 5.10.4. 字符定義數(shù)組 5.10.5. 字符串比較支持 5.10.6. 多字節(jié)字符支持 5.10.7. 字符集問題 5.10.8. MySQL服務(wù)器時(shí)區(qū)支持 5.11. MySQL日志文件 5.11.1. 錯(cuò)誤日志 5.11.2. 通用查詢?nèi)罩?/a> 5.11.3. 二進(jìn)制日志 5.11.4. 慢速查詢?nèi)罩?/a> 5.11.5. 日志文件維護(hù) 5.12. 在同一臺(tái)機(jī)器上運(yùn)行多個(gè)MySQL服務(wù)器 5.12.1. 在Windows下運(yùn)行多個(gè)服務(wù)器 5.12.2. 在Unix中運(yùn)行多個(gè)服務(wù)器 5.12.3. 在多服務(wù)器環(huán)境中使用客戶端程序 5.13. MySQL查詢高速緩沖 5.13.1. 查詢高速緩沖如何工作 5.13.2. 查詢高速緩沖SELECT選項(xiàng) 5.13.3. 查詢高速緩沖配置 5.13.4. 查詢高速緩沖狀態(tài)和維護(hù) 6. MySQL中的復(fù)制 6.1. 復(fù)制介紹 6.2. 復(fù)制實(shí)施概述 6.3. 復(fù)制實(shí)施細(xì)節(jié) 6.3.1. 復(fù)制主線程狀態(tài) 6.3.2. 復(fù)制從I/O線程狀態(tài) 6.3.3. 復(fù)制從SQL線程狀態(tài) 6.3.4. 復(fù)制傳遞和狀態(tài)文件 6.4. 如何設(shè)置復(fù)制 6.5. 不同MySQL版本之間的復(fù)制兼容性 6.6. 升級(jí)復(fù)制設(shè)置 6.6.1. 將復(fù)制升級(jí)到5.0版 6.7. 復(fù)制特性和已知問題 6.8. 復(fù)制啟動(dòng)選項(xiàng) 6.9. 復(fù)制FAQ 6.10. 復(fù)制故障診斷與排除 6.11. 通報(bào)復(fù)制缺陷 6.12. 多服務(wù)器復(fù)制中的Auto-Increment 7. 優(yōu)化 7.1. 優(yōu)化概述 7.1.1. MySQL設(shè)計(jì)局限與折衷 7.1.2. 為可移植性設(shè)計(jì)應(yīng)用程序 7.1.3. 我們已將MySQL用在何處? 7.1.4. MySQL基準(zhǔn)套件 7.1.5. 使用自己的基準(zhǔn) 7.2. 優(yōu)化SELECT語(yǔ)句和其它查詢 7.2.1. EXPLAIN語(yǔ)法(獲取SELECT相關(guān)信息) 7.2.2. 估計(jì)查詢性能 7.2.3. SELECT查詢的速度 7.2.4. MySQL怎樣優(yōu)化WHERE子句 7.2.5. 范圍優(yōu)化 7.2.6. 索引合并優(yōu)化 7.2.7. MySQL如何優(yōu)化IS NULL 7.2.8. MySQL如何優(yōu)化DISTINCT 7.2.9. MySQL如何優(yōu)化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何優(yōu)化嵌套Join 7.2.11. MySQL如何簡(jiǎn)化外部聯(lián)合 7.2.12. MySQL如何優(yōu)化ORDER BY 7.2.13. MySQL如何優(yōu)化GROUP BY 7.2.14. MySQL如何優(yōu)化LIMIT 7.2.15. 如何避免表掃描 7.2.16. INSERT語(yǔ)句的速度 7.2.17. UPDATE語(yǔ)句的速度 7.2.18. DELETE語(yǔ)句的速度 7.2.19. 其它優(yōu)化技巧 7.3. 鎖定事宜 7.3.1. 鎖定方法 7.3.2. 表鎖定事宜 7.4. 優(yōu)化數(shù)據(jù)庫(kù)結(jié)構(gòu) 7.4.1. 設(shè)計(jì)選擇 7.4.2. 使你的數(shù)據(jù)盡可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM鍵高速緩沖 7.4.7. MyISAM索引統(tǒng)計(jì)集合 7.4.8. MySQL如何計(jì)算打開的表 7.4.9. MySQL如何打開和關(guān)閉表 7.4.10. 在同一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建多個(gè)表的缺陷 7.5. 優(yōu)化MySQL服務(wù)器 7.5.1. 系統(tǒng)因素和啟動(dòng)參數(shù)的調(diào)節(jié) 7.5.2. 調(diào)節(jié)服務(wù)器參數(shù) 7.5.3. 控制查詢優(yōu)化器的性能 7.5.4. 編譯和鏈接怎樣影響MySQL的速度 7.5.5. MySQL如何使用內(nèi)存 7.5.6. MySQL如何使用DNS 7.6. 磁盤事宜 7.6.1. 使用符號(hào)鏈接 8. 客戶端和實(shí)用工具程序 8.1. 客戶端腳本和實(shí)用工具概述 8.2. myisampack:生成壓縮、只讀MyISAM表 8.3. mysql:MySQL命令行工具 8.3.1. 選項(xiàng) 8.3.2. mysql命令 8.3.3. 怎樣從文本文件執(zhí)行SQL語(yǔ)句 8.3.4. mysql技巧 8.4. mysqlaccess:用于檢查訪問權(quán)限的客戶端 8.5. mysqladmin:用于管理MySQL服務(wù)器的客戶端 8.6. mysqlbinlog:用于處理二進(jìn)制日志文件的實(shí)用工具 8.7. mysqlcheck:表維護(hù)和維修程序 8.8. mysqldump:數(shù)據(jù)庫(kù)備份程序 8.9. mysqlhotcopy:數(shù)據(jù)庫(kù)備份程序 8.10. mysqlimport:數(shù)據(jù)導(dǎo)入程序 8.11. mysqlshow-顯示數(shù)據(jù)庫(kù)、表和列信息 8.12. myisamlog:顯示MyISAM日志文件內(nèi)容 8.13. perror:解釋錯(cuò)誤代碼 8.14. replace:字符串替換實(shí)用工具 8.15. mysql_zap:殺死符合某一模式的進(jìn)程 9. 語(yǔ)言結(jié)構(gòu) 9.1. 文字值 9.1.1. 字符串 9.1.2. 數(shù)值 9.1.3. 十六進(jìn)制值 9.1.4. 布爾值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 數(shù)據(jù)庫(kù)、表、索引、列和別名 9.2.1. 識(shí)別符限制條件 9.2.2. 識(shí)別符大小寫敏感性 9.3. 用戶變量 9.4. 系統(tǒng)變量 9.4.1. 結(jié)構(gòu)式系統(tǒng)變量 9.5. 注釋語(yǔ)法 9.6. MySQL中保留字的處理 10. 字符集支持 10.1. 常規(guī)字符集和校對(duì) 10.2. MySQL中的字符集和校對(duì) 10.3. 確定默認(rèn)字符集和校對(duì) 10.3.1. 服務(wù)器字符集和校對(duì) 10.3.2. 數(shù)據(jù)庫(kù)字符集和校對(duì) 10.3.3. 表字符集和校對(duì) 10.3.4. 列字符集和校對(duì) 10.3.5. 字符集和校對(duì)分配示例 10.3.6. 連接字符集和校對(duì) 10.3.7. 字符串文字字符集和校對(duì) 10.3.8. 在SQL語(yǔ)句中使用COLLATE 10.3.9. COLLATE子句優(yōu)先 10.3.10. BINARY操作符 10.3.11. 校對(duì)確定較為復(fù)雜的一些特殊情況 10.3.12. 校對(duì)必須適合字符集 10.3.13. 校對(duì)效果的示例 10.4. 字符集支持影響到的操作 10.4.1. 結(jié)果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW語(yǔ)句 10.5. Unicode支持 10.6. 用于元數(shù)據(jù)的UTF8 10.7. 與其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 國(guó)家特有字符集 10.10. MySQL支持的字符集和校對(duì) 10.10.1. Unicode字符集 10.10.2. 西歐字符集 10.10.3. 中歐字符集 10.10.4. 南歐與中東字符集 10.10.5. 波羅的海字符集 10.10.6. 西里爾字符集 10.10.7. 亞洲字符集 11. 列類型 11.1. 列類型概述 11.1.1. 數(shù)值類型概述 11.1.2. 日期和時(shí)間類型概述 11.1.3. 字符串類型概述 11.2. 數(shù)值類型 11.3. 日期和時(shí)間類型 11.3.1. DATETIME、DATE和TIMESTAMP類型 11.3.2. TIME類型 11.3.3. YEAR類型 11.3.4. Y2K事宜和日期類型 11.4. String類型 11.4.1. CHAR和VARCHAR類型 11.4.2. BINARY和VARBINARY類型 11.4.3. BLOB和TEXT類型 11.4.4. ENUM類型 11.4.5. SET類型 11.5. 列類型存儲(chǔ)需求 11.6. 選擇正確的列類型 11.7. 使用來(lái)自其他數(shù)據(jù)庫(kù)引擎的列類型 12. 函數(shù)和操作符 12.1. 操作符 12.1.1. 操作符優(yōu)先級(jí) 12.1.2. 圓括號(hào) 12.1.3. 比較函數(shù)和操作符 12.1.4. 邏輯操作符 12.2. 控制流程函數(shù) 12.3. 字符串函數(shù) 12.3.1. 字符串比較函數(shù) 12.4. 數(shù)值函數(shù) 12.4.1. 算術(shù)操作符 12.4.2. 數(shù)學(xué)函數(shù) 12.5. 日期和時(shí)間函數(shù) 12.6. MySQL使用什么日歷? 12.7. 全文搜索功能 12.7.1. 布爾全文搜索 12.7.2. 全文搜索帶查詢擴(kuò)展 12.7.3. 全文停止字 12.7.4. 全文限定條件 12.7.5. 微調(diào)MySQL全文搜索 12.8. Cast函數(shù)和操作符 12.9. 其他函數(shù) 12.9.1. 位函數(shù) 12.9.2. 加密函數(shù) 12.9.3. 信息函數(shù) 12.9.4. 其他函數(shù) NoName 12.10.1. GROUP BY(聚合)函數(shù) 12.10.2. GROUP BY修改程序 12.10.3. 具有隱含字段的GROUP BY 13. SQL語(yǔ)句語(yǔ)法 13.1. 數(shù)據(jù)定義語(yǔ)句 13.1.1. ALTER DATABASE語(yǔ)法 13.1.2. ALTER TABLE語(yǔ)法 13.1.3. CREATE DATABASE語(yǔ)法 13.1.4. CREATE INDEX語(yǔ)法 13.1.5. CREATE TABLE語(yǔ)法 13.1.6. DROP DATABASE語(yǔ)法 13.1.7. DROP INDEX語(yǔ)法 13.1.8. DROP TABLE語(yǔ)法 13.1.9. RENAME TABLE語(yǔ)法 13.2. 數(shù)據(jù)操作語(yǔ)句 13.2.1. DELETE語(yǔ)法 13.2.2. DO語(yǔ)法 13.2.3. HANDLER語(yǔ)法 13.2.4. INSERT語(yǔ)法 13.2.5. LOAD DATA INFILE語(yǔ)法 13.2.6. REPLACE語(yǔ)法 13.2.7. SELECT語(yǔ)法 13.2.8. Subquery語(yǔ)法 13.2.9. TRUNCATE語(yǔ)法 13.2.10. UPDATE語(yǔ)法 13.3. MySQL實(shí)用工具語(yǔ)句 13.3.1. DESCRIBE語(yǔ)法(獲取有關(guān)列的信息) 13.3.2. USE語(yǔ)法 13.4. MySQL事務(wù)處理和鎖定語(yǔ)句 13.4.1. START TRANSACTION 13.4.2. 不能回滾的語(yǔ)句 13.4.3. 會(huì)造成隱式提交的語(yǔ)句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT語(yǔ)法 13.4.5. LOCK TABLES和UNLOCK TABLES語(yǔ)法 13.4.6. SET TRANSACTION語(yǔ)法 13.4.7. XA事務(wù) 13.5. 數(shù)據(jù)庫(kù)管理語(yǔ)句 13.5.1. 賬戶管理語(yǔ)句 13.5.2. 表維護(hù)語(yǔ)句 13.5.3. SET語(yǔ)法 13.5.4. SHOW語(yǔ)法 13.5.5. 其它管理語(yǔ)句 13.6. 復(fù)制語(yǔ)句 13.6.1. 用于控制主服務(wù)器的SQL語(yǔ)句 13.6.2. 用于控制從服務(wù)器的SQL語(yǔ)句 13.7. 用于預(yù)處理語(yǔ)句的SQL語(yǔ)法 14. 插件式存儲(chǔ)引擎體系結(jié)構(gòu) 14.1. 前言 14.2. 概述 14.3. 公共MySQL數(shù)據(jù)庫(kù)服務(wù)器層 14.4. 選擇存儲(chǔ)引擎 14.5. 將存儲(chǔ)引擎指定給表 14.6. 存儲(chǔ)引擎和事務(wù) 14.7. 插入存儲(chǔ)引擎 14.8. 拔出存儲(chǔ)引擎 14.9. 插件式存儲(chǔ)器的安全含義 15. 存儲(chǔ)引擎和表類型 15.1. MyISAM存儲(chǔ)引擎 15.1.1. MyISAM啟動(dòng)選項(xiàng) 15.1.2. 鍵所需的空間 15.1.3. MyISAM表的存儲(chǔ)格式 15.1.4. MyISAM表方面的問題 15.2. InnoDB存儲(chǔ)引擎 15.2.1. InnoDB概述 15.2.2. InnoDB聯(lián)系信息 15.2.3. InnoDB配置 15.2.4. InnoDB啟動(dòng)選項(xiàng) 15.2.5. 創(chuàng)建InnoDB表空間 15.2.6. 創(chuàng)建InnoDB表 15.2.7. 添加和刪除InnoDB數(shù)據(jù)和日志文件 15.2.8. InnoDB數(shù)據(jù)庫(kù)的備份和恢復(fù) 15.2.9. 將InnoDB數(shù)據(jù)庫(kù)移到另一臺(tái)機(jī)器上 15.2.10. InnoDB事務(wù)模型和鎖定 15.2.11. InnoDB性能調(diào)節(jié)提示 15.2.12. 多版本的實(shí)施 15.2.13. 表和索引結(jié)構(gòu) 15.2.14. 文件空間管理和磁盤I/O 15.2.15. InnoDB錯(cuò)誤處理 15.2.16. 對(duì)InnoDB表的限制 15.2.17. InnoDB故障診斷與排除 15.3. MERGE存儲(chǔ)引擎 15.3.1. MERGE表方面的問題 15.4. MEMORY (HEAP)存儲(chǔ)引擎 15.5. BDB (BerkeleyDB)存儲(chǔ)引擎 15.5.1. BDB支持的操作系統(tǒng) 15.5.2. 安裝BDB 15.5.3. BDB啟動(dòng)選項(xiàng) 15.5.4. BDB表的特性 15.5.5. 修改BDB所需的事宜 15.5.6. 對(duì)BDB表的限制 15.5.7. 使用BDB表時(shí)可能出現(xiàn)的錯(cuò)誤 15.6. EXAMPLE存儲(chǔ)引擎 15.7. FEDERATED存儲(chǔ)引擎 15.7.1. 安裝FEDERATED存儲(chǔ)引擎 15.7.2. FEDERATED存儲(chǔ)引擎介紹 15.7.3. 如何使用FEDERATED表 15.7.4. FEDERATED存儲(chǔ)引擎的局限性 15.8. ARCHIVE存儲(chǔ)引擎 15.9. CSV存儲(chǔ)引擎 15.10. BLACKHOLE存儲(chǔ)引擎 16. 編寫自定義存儲(chǔ)引擎 16.1. 前言 16.2. 概述 16.3. 創(chuàng)建存儲(chǔ)引擎源文件 NoName 16.5. 對(duì)處理程序進(jìn)行實(shí)例化處理 16.6. 定義表擴(kuò)展 16.7. 創(chuàng)建表 16.8. 打開表 16.9. 實(shí)施基本的表掃描功能 16.9.1. 實(shí)施store_lock()函數(shù) 16.9.2. 實(shí)施external_lock()函數(shù) 16.9.3. 實(shí)施rnd_init()函數(shù) 16.9.4. 實(shí)施info()函數(shù) 16.9.5. 實(shí)施extra()函數(shù) 16.9.6. 實(shí)施rnd_next()函數(shù) 16.10. 關(guān)閉表 NoName NoName NoName 16.14. API引用 16.14.1. bas_ext 16.14.2. close 16.14.3. create 16.14.4. delete_row 16.14.5. delete_table 16.14.6. external_lock 16.14.7. extra 16.14.8. info 16.14.9. open 16.14.10. rnd_init 16.14.11. rnd_next 16.14.12. store_lock 16.14.13. update_row 16.14.14. write_row 17. MySQL簇 17.1. MySQL簇概述 17.2. MySQL簇的基本概念 17.3. 多計(jì)算機(jī)的簡(jiǎn)單基礎(chǔ)知識(shí) 17.3.1. 硬件、軟件和聯(lián)網(wǎng) 17.3.2. 安裝 17.3.3. 配置 17.3.4. 首次啟動(dòng) 17.3.5. 加載示例數(shù)據(jù)并執(zhí)行查詢 17.3.6. 安全關(guān)閉和重啟 17.4. MySQL簇的配置 17.4.1. 從源碼創(chuàng)建MySQL簇 17.4.2. 安裝軟件 17.4.3. MySQL簇的快速測(cè)試設(shè)置 17.4.4. 配置文件 17.5. MySQL簇中的進(jìn)程管理 17.5.1. 用于MySQL簇的MySQL服務(wù)器進(jìn)程使用 17.5.2. ndbd,存儲(chǔ)引擎節(jié)點(diǎn)進(jìn)程 17.5.3. ndb_mgmd,“管理服務(wù)器”進(jìn)程 17.5.4. ndb_mgm,“管理客戶端”進(jìn)程 17.5.5. 用于MySQL簇進(jìn)程的命令選項(xiàng) 17.6. MySQL簇的管理 17.6.1. MySQL簇的啟動(dòng)階段 17.6.2. “管理客戶端”中的命令 17.6.3. MySQL簇中生成的事件報(bào)告 17.6.4. 單用戶模式 17.6.5. MySQL簇的聯(lián)機(jī)備份 17.7. 使用與MySQL簇的高速互連 17.7.1. 配置MySQL簇以使用SCI套接字 17.7.2. 理解簇互連的影響 17.8. MySQL簇的已知限制 17.9. MySQL簇發(fā)展的重要?dú)v程 17.9.1. MySQL 5.0中的MySQL簇變化 17.9.2. 關(guān)于MySQL簇的MySQL 5.1發(fā)展歷程 17.10. MySQL簇常見問題解答 17.11. MySQL簇術(shù)語(yǔ)表 18. 分區(qū) 18.1. MySQL中的分區(qū)概述 18.2. 分區(qū)類型 18.2.1. RANGE分區(qū) 18.2.2. LIST分區(qū) 18.2.3. HASH分區(qū) 18.2.4. KEY分區(qū) 18.2.5. 子分區(qū) 18.2.6. MySQL分區(qū)處理NULL值的方式 18.3. 分區(qū)管理 18.3.1. RANGE和LIST分區(qū)的管理 18.3.2. HASH和KEY分區(qū)的管理 18.3.3. 分區(qū)維護(hù) 18.3.4. 獲取關(guān)于分區(qū)的信息 19. MySQL中的空間擴(kuò)展 19.1. 前言 19.2. OpenGIS幾何模型 19.2.1. Geometry類的層次 19.2.2. 類Geometry 19.2.3. 類Point 19.2.4. 類Curve 19.2.5. 類LineString 19.2.6. 類Surface 19.2.7. 類Polygon 19.2.8. 類GeometryCollection 19.2.9. 類MultiPoint 19.2.10. 類MultiCurve 19.2.11. 類MultiLineString 19.2.12. 類MultiSurface 19.2.13. 類MultiPolygon 19.3. 支持的空間數(shù)據(jù)格式 19.3.1. 著名的文本(WKT)格式 19.3.2. 著名的二進(jìn)制(WKB)格式 19.4. 創(chuàng)建具備空間功能的MySQL數(shù)據(jù)庫(kù) 19.4.1. MySQL空間數(shù)據(jù)類型 19.4.2. 創(chuàng)建空間值 19.4.3. 創(chuàng)建空間列 19.4.4. 填充空間列 19.4.5. 獲取空間數(shù)據(jù) 19.5. 分析空間信息 19.5.1. Geometry格式轉(zhuǎn)換函數(shù) 19.5.2. Geometry函數(shù) 19.5.3. 從已有Geometry創(chuàng)建新Geometry的函數(shù) 19.5.4. 測(cè)試幾何對(duì)象間空間關(guān)系的函數(shù) 19.5.5. 關(guān)于幾何最小邊界矩形(MBR)的關(guān)系 19.5.6. 測(cè)試幾何類之間空間關(guān)系的函數(shù) 19.6. 優(yōu)化空間分析 19.6.1. 創(chuàng)建空間索引 19.6.2. 使用空間索引 19.7. MySQL的一致性和兼容性 19.7.1. 尚未實(shí)施的GIS特性 20. 存儲(chǔ)程序和函數(shù) 20.1. 存儲(chǔ)程序和授權(quán)表 20.2. 存儲(chǔ)程序的語(yǔ)法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER PROCEDURE和ALTER FUNCTION 20.2.3. DROP PROCEDURE和DROP FUNCTION 20.2.4.SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION 20.2.5.SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS 20.2.6. CALL語(yǔ)句 20.2.7. BEGIN ... END復(fù)合語(yǔ)句 20.2.8. DECLARE語(yǔ)句 20.2.9. 存儲(chǔ)程序中的變量 20.2.10. 條件和處理程序 20.2.11. 光標(biāo) 20.2.12. 流程控制構(gòu)造 20.3. 存儲(chǔ)程序、函數(shù)、觸發(fā)程序和復(fù)制:常見問題 20.4. 存儲(chǔ)子程序和觸發(fā)程序的二進(jìn)制日志功能 21. 觸發(fā)程序 21.1. CREATE TRIGGER語(yǔ)法 21.2. DROP TRIGGER語(yǔ)法 21.3. 使用觸發(fā)程序 22. 視圖 22.1. ALTER VIEW語(yǔ)法 22.2. CREATE VIEW語(yǔ)法 22.3. DROP VIEW語(yǔ)法 22.4. SHOW CREATE VIEW語(yǔ)法 23. INFORMATION_SCHEMA信息數(shù)據(jù)庫(kù) 23.1. INFORMATION_SCHEMA表 23.1.1. INFORMATION_SCHEMA SCHEMATA表 23.1.2. INFORMATION_SCHEMA TABLES表 23.1.3. INFORMATION_SCHEMA COLUMNS表 23.1.4. INFORMATION_SCHEMA STATISTICS表 23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES表 23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表 23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表 23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表 23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表 23.1.10. INFORMATION_SCHEMA COLLATIONS表 23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表 23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS表 23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE表 23.1.14. INFORMATION_SCHEMA ROUTINES表 23.1.15. INFORMATION_SCHEMA VIEWS表 23.1.16. INFORMATION_SCHEMA TRIGGERS表 23.1.17. 其他INFORMATION_SCHEMA表 NoName 24. 精度數(shù)學(xué) 24.1. 數(shù)值的類型 24.2. DECIMAL數(shù)據(jù)類型更改 24.3. 表達(dá)式處理 24.4. 四舍五入 24.5. 精度數(shù)學(xué)示例 25. API和庫(kù) 25.1. libmysqld,嵌入式MySQL服務(wù)器庫(kù) 25.1.1. 嵌入式MySQL服務(wù)器庫(kù)概述 25.1.2. 使用libmysqld編譯程序 25.1.3. 使用嵌入式MySQL服務(wù)器時(shí)的限制 25.1.4. 與嵌入式服務(wù)器一起使用的選項(xiàng) 25.1.5. 嵌入式服務(wù)器中尚需完成的事項(xiàng)(TODO) 25.1.6. 嵌入式服務(wù)器示例 25.1.7. 嵌入式服務(wù)器的許可 25.2. MySQL C API 25.2.1. C API數(shù)據(jù)類型 25.2.2. C API函數(shù)概述 25.2.3. C API函數(shù)描述 25.2.4. C API預(yù)處理語(yǔ)句 25.2.5. C API預(yù)處理語(yǔ)句的數(shù)據(jù)類型 25.2.6. C API預(yù)處理語(yǔ)句函數(shù)概述 25.2.7. C API預(yù)處理語(yǔ)句函數(shù)描述 25.2.8. C API預(yù)處理語(yǔ)句方面的問題 25.2.9. 多查詢執(zhí)行的C API處理 25.2.10. 日期和時(shí)間值的C API處理 25.2.11. C API線程函數(shù)介紹 25.2.12. C API嵌入式服務(wù)器函數(shù)介紹 25.2.13. 使用C API時(shí)的常見問題 25.2.14. 創(chuàng)建客戶端程序 25.2.15. 如何生成線程式客戶端 25.3. MySQL PHP API 25.3.1. 使用MySQL和PHP的常見問題 25.4. MySQL Perl API 25.5. MySQL C++ API 25.5.1. Borland C++ 25.6. MySQL Python API 25.7. MySQL Tcl API 25.8. MySQL Eiffel Wrapper 25.9. MySQL程序開發(fā)實(shí)用工具 25.9.1. msql2mysql:轉(zhuǎn)換mSQL程序以用于MySQL 25.9.2. mysql_config:獲取編譯客戶端的編譯選項(xiàng) 26. 連接器 26.1. MySQL Connector/ODBC 26.1.1. MyODBC介紹 26.1.2. 關(guān)于ODBC和MyODBC的一般信息 26.1.3. 如何安裝MyODBC 26.1.4. 在Windows平臺(tái)上從二進(jìn)制版本安裝MyODBC 26.1.5. I在Unix平臺(tái)上從二進(jìn)制版本安裝MyODBC 26.1.6. 在Windows平臺(tái)上從源碼版本安裝MyODBC 26.1.7. 在Unix平臺(tái)上從源碼版本安裝MyODBC 26.1.8. 從BitKeeper開發(fā)源碼樹安裝MyODBC 26.1.9. MyODBC配置 26.1.10. 與MyODBC連接相關(guān)的事宜 26.1.11. MyODBC和Microsoft Access 26.1.12. MyODBC和Microsoft VBA及ASP 26.1.13. MyODBC和第三方ODBC工具 26.1.14. MyODBC通用功能 26.1.15. 基本的MyODBC應(yīng)用步驟 26.1.16. MyODBC API引用 26.1.17. MyODBC數(shù)據(jù)類型 26.1.18. MyODBC錯(cuò)誤代碼 26.1.19. MyODBC與VB:ADO、DAO和RDO 26.1.20. MyODBC與Microsoft.NET 26.1.21. 感謝 26.2. MySQL Connector/NET 26.2.1. 前言 26.2.2. 下載并安裝MySQL Connector/NET 26.2.3. Connector/NET體系結(jié)構(gòu) 26.2.4. 使用MySQL Connector/NET 26.2.5. MySQL Connector/NET變更史 26.3. MySQL Connector/J 26.3.1. 基本的JDBC概念 26.3.2. 安裝 Connector/J 26.3.3. JDBC引用 26.3.4. 與J2EE和其他Java框架一起使用 Connector/J 26.3.5. 診斷 Connector/J方面的問題 26.3.6. Changelog 26.4. MySQL Connector/MXJ 26.4.1. 前言 26.4.2. 支持平臺(tái): 26.4.3. Junit測(cè)試要求 26.4.4. 運(yùn)行Junit測(cè)試 26.4.5. 作為JDBC驅(qū)動(dòng)程序的一部分運(yùn)行 26.4.6. 在Java對(duì)象中運(yùn)行 26.4.7. MysqldResource API 26.4.8. 在JMX代理(custom)中運(yùn)行 26.4.9. 部署在標(biāo)準(zhǔn)的JMX代理環(huán)境下 (JBoss) 26.4.10. 安裝 27. 擴(kuò)展MySQL 27.1. MySQL內(nèi)部控件 27.1.1. MySQL線程 27.1.2. MySQL測(cè)試套件 27.2. 為MySQL添加新函數(shù) 27.2.1. 自定義函數(shù)接口的特性 27.2.2. CREATE FUNCTION/DROP FUNCTION語(yǔ)法 27.2.3. 添加新的自定義函數(shù) 27.2.4. 添加新的固有函數(shù) 27.3. 為MySQL添加新步驟 27.3.1. 步驟分析 27.3.2. 編寫步驟 A. 問題和常見錯(cuò)誤 A.1. 如何確定導(dǎo)致問題的原因 A.2. 使用MySQL程序時(shí)的常見錯(cuò)誤 A.2.1. 拒絕訪問 A.2.2. 無(wú)法連接到[local] MySQL服務(wù)器 A.2.3. 客戶端不支持鑒定協(xié)議 A.2.4. 輸入密碼時(shí)出現(xiàn)密碼錯(cuò)誤 NoName A.2.6. 連接數(shù)過(guò)多 A.2.7. 內(nèi)存溢出 A.2.8. MySQL服務(wù)器不可用 A.2.9. 信息包過(guò)大 A.2.10. 通信錯(cuò)誤和失效連接 A.2.11. 表已滿 A.2.12. 無(wú)法創(chuàng)建文件/寫入文件 A.2.13. 命令不同步 A.2.14. 忽略用戶 A.2.15. 表tbl_name不存在 A.2.16. 無(wú)法初始化字符集 A.2.17. 文件未找到 A.3. 與安裝有關(guān)的事宜 A.3.1. 與MySQL客戶端庫(kù)的鏈接問題 A.3.2. 如何以普通用戶身份運(yùn)行MySQL A.3.3. 與文件許可有關(guān)的問題 A.4. 與管理有關(guān)的事宜 A.4.1. 如何復(fù)位根用戶密碼 A.4.2. 如果MySQL依然崩潰,應(yīng)作些什么 A.4.3. MySQL處理磁盤滿的方式 A.4.4. MySQL將臨時(shí)文件儲(chǔ)存在哪里 A.4.5. 如何保護(hù)或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 時(shí)區(qū)問題 A.5. 與查詢有關(guān)的事宜 A.5.1. 搜索中的大小寫敏感性 A.5.2. 使用DATE列方面的問題 A.5.3. 與NULL值有關(guān)的問題 A.5.4. 與列別名有關(guān)的問題 A.5.5. 非事務(wù)表回滾失敗 A.5.6. 從相關(guān)表刪除行 A.5.7. 解決與不匹配行有關(guān)的問題 A.5.8. 與浮點(diǎn)比較有關(guān)的問題 A.6. 與優(yōu)化器有關(guān)的事宜 A.7. 與表定義有關(guān)的事宜 A.7.1. 與ALTER TABLE有關(guān)的問題 A.7.2. 如何更改表中的列順序 A.7.3. TEMPORARY TABLE問題 A.8. MySQL中的已知事宜 A.8.1. MySQL中的打開事宜 B. 錯(cuò)誤代碼和消息 B.1. 服務(wù)器錯(cuò)誤代碼和消息 B.2. 客戶端錯(cuò)誤代碼和消息 C. 感謝 C.1. MySQL AB處的開發(fā)人 C.2. MySQL貢獻(xiàn)人 C.3. 資料員和譯員 C.4. MySQL使用和包含的庫(kù) C.5. 支持MySQL的軟件包 C.6. 用于創(chuàng)建MySQL的工具 C.7. MySQL支持人員 D. MySQL變更史 D.1. 5.1.x版中的變更情況(開發(fā)) D.1.1. 5.1.2版中的變更情況(尚未發(fā)布) D.1.2. 5.1.1版中的變更情況(尚未發(fā)布) D.2. MyODBC的變更情況 D.2.1. MyODBC 3.51.12的變更情況 D.2.2. MyODBC 3.51.11的變更情況 E. 移植到其他系統(tǒng) E.1. 調(diào)試MySQL服務(wù)器 E.1.1. 針對(duì)調(diào)試編譯MySQL E.1.2. 創(chuàng)建跟蹤文件 E.1.3. 在gdb環(huán)境下調(diào)試mysqld E.1.4. 使用堆棧跟蹤 E.1.5. 使用日志文件找出mysqld中的錯(cuò)誤原因 E.1.6. 如果出現(xiàn)表崩潰,請(qǐng)生成測(cè)試案例 E.2. 調(diào)試MySQL客戶端 E.3. DBUG軟件包 E.4. 關(guān)于RTS線程的注釋 E.5. 線程軟件包之間的差異 F. 環(huán)境變量 G. MySQL正則表達(dá)式 H. MySQL中的限制 H.1. 聯(lián)合的限制 I. 特性限制 I.1. 對(duì)存儲(chǔ)子程序和觸發(fā)程序的限制 I.2. 對(duì)服務(wù)器端光標(biāo)的限制 I.3. 對(duì)子查詢的限制 I.4. 對(duì)視圖的限制 I.5. 對(duì)XA事務(wù)的限制 J. GNU通用公共許可 K. MySQL FLOSS許可例外 索引
characters

第9章:語(yǔ)言結(jié)構(gòu)

目錄

9.1. 文字值
9.1.1. 字符串
9.1.2. 數(shù)值
9.1.3. 十六進(jìn)制值
9.1.4. 布爾值
9.1.5. 位字段值
9.1.6. NULL值
9.2. 數(shù)據(jù)庫(kù)、表、索引、列和別名
9.2.1. 識(shí)別符限制條件
9.2.2. 識(shí)別符大小寫敏感性
9.3. 用戶變量
9.4. 系統(tǒng)變量
9.4.1. 結(jié)構(gòu)式系統(tǒng)變量
9.5. 注釋語(yǔ)法
9.6. MySQL中保留字的處理

本章討論了使用MySQL編寫SQL語(yǔ)句的下面元素時(shí)所使用的規(guī)則:

·???????? 字符串和數(shù)字等文字值

·???????? 識(shí)別符,例如表和列名

·???????? 用戶和系統(tǒng)變量

·???????? 注釋

·???????? 保留字

9.1.?文字值

9.1.1. 字符串
9.1.2. 數(shù)值
9.1.3. 十六進(jìn)制值
9.1.4. 布爾值
9.1.5. 位字段值
9.1.6. NULL值

該節(jié)描述了如何在MySQL中寫文字值。包括字符串、數(shù)值、十六進(jìn)制值、布爾值和NULL。本節(jié)還包括在MySQL中處理這些基本類型時(shí)會(huì)遇到的各種細(xì)微差別和“影印版”。

9.1.1.?字符串

字符串指用單引號(hào)(')或雙引號(hào)(")引起來(lái)的字符序列。例如:

'a string'
"another string"

如果SQL服務(wù)器模式啟用了NSI_QUOTES,可以只用單引號(hào)引用字符串。用雙引號(hào)引用的字符串被解釋為一個(gè)識(shí)別符。

字符串可以有一個(gè)可選字符集引介詞和COLLATE子句:

[_charset_name]'string' [COLLATE collation_name]

例如:

SELECT _latin1'string';
SELECT _latin1'string' COLLATE latin1_danish_ci;

關(guān)于這些字符串語(yǔ)法形式的詳細(xì)信息,參見10.3.7節(jié),“字符串文字字符集和校對(duì)”。

在字符串中,某些序列具有特殊含義。這些序列均用反斜線(\)開始,即所謂的轉(zhuǎn)義字符。MySQL識(shí)別下面的轉(zhuǎn)義序列:

\0

ASCII 0(NUL)字符。

\'

單引號(hào)(')。

\"

雙引號(hào)(")。

\b

退格符。

\n

換行符。

\r

回車符。

\t

tab字符。

\Z

ASCII 26(控制(Ctrl-Z)。該字符可以編碼為‘\Z’,以允許你解決在WindowsASCII 26代表文件結(jié)尾這一問題。(如果你試圖使用mysql db_name < file_nameASCII 26會(huì)帶來(lái)問題)。

\\

反斜線(\)字符。

\%

%’字符。參見表后面的注解。

\_

_’字符。參見表后面的注解。

這些序列對(duì)大小寫敏感。例如,‘\b’解釋為退格,但‘\B’解釋為‘B’。

\%’和‘\_’序列用于搜索可能會(huì)解釋為通配符的模式匹配環(huán)境中的‘%’和‘_’文字實(shí)例。參見12.3.1節(jié),“字符串比較函數(shù)”。請(qǐng)注意如果你在其它環(huán)境中使用‘\%’或‘\_’,它們返回字符串‘\%’和‘\_’,而不是‘%’和‘_’。

在其它轉(zhuǎn)義序列中,反斜線被忽略。也就是說(shuō),轉(zhuǎn)義字符解釋為仿佛沒有轉(zhuǎn)義。

有幾種方式可以在字符串中包括引號(hào):

·???????? 在字符串內(nèi)用‘'’引用的‘'’可以寫成‘''’。

·???????? 在字符串內(nèi)用‘"’引用的‘"’可以寫成‘""’。

·???????? 可以在引號(hào)前加轉(zhuǎn)義字符(\)

·???????? 在字符串內(nèi)用‘"’引用的‘'’不需要特殊處理,不需要用雙字符或轉(zhuǎn)義。同樣,在字符串內(nèi)用‘'’引用的‘"’也不需要特殊處理。

下面的SELECT語(yǔ)句顯示了引用和轉(zhuǎn)義如何工作:

mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
?
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+
?
mysql> SELECT 'This\nIs\nFour\nLines';
+--------------------+
| This
Is
Four
Lines |
+--------------------+
?
mysql> SELECT 'disappearing\ backslash';
+------------------------+
| disappearing backslash |
+------------------------+

如果你想要在字符串列內(nèi)插入二進(jìn)制數(shù)據(jù)(例如BLOB),必須通過(guò)轉(zhuǎn)義序列表示下面的字符:

NUL

NUL字節(jié)(ASCII 0)。用‘\0表示該字符(反斜線后面跟一個(gè)ASCII0’字符)。

\

反斜線(ASCII 92)。用‘\\’表示該字符。

'

單引號(hào)(ASCII 39)。用‘\'’表示該字符。

"

雙引號(hào)(ASCII 34)。用‘\"’表示該字符。

當(dāng)編寫應(yīng)用程序時(shí),在包含這些特殊字符的字符串用于發(fā)送到MySQL服務(wù)器的SQL語(yǔ)句中的數(shù)據(jù)值之前,必須對(duì)它們正確進(jìn)行轉(zhuǎn)義。可以用兩種方法來(lái)完成:

·???????? 用轉(zhuǎn)義特殊字符的函數(shù)處理字符串。例如,在C程序中,可以使用mysql_real_escape_string() C API函數(shù)來(lái)轉(zhuǎn)義字符。參見25.2.3.52節(jié),“mysql_real_escape_string()”。Perl DBI接口提供一個(gè)quote方法來(lái)將特殊字符轉(zhuǎn)換為正確的轉(zhuǎn)義序列。參見25.4節(jié),“MySQL Perl API”。

·???????? 顯式轉(zhuǎn)義特殊字符,許多MySQL API提供了占位符功能,允許你在查詢字符串中插入特殊標(biāo)記,然后當(dāng)你發(fā)出查詢時(shí)將數(shù)據(jù)值同它們綁定起來(lái)。在這種情況下,API關(guān)注轉(zhuǎn)義值中的特殊字符。

9.1.2.?數(shù)值

整數(shù)用一系列阿拉伯?dāng)?shù)字表示。浮點(diǎn)數(shù)使用‘.’作為十進(jìn)制間隔符。兩種類型的數(shù)值均可以在前面加一個(gè)‘-’來(lái)表示負(fù)值。

合法整數(shù)的例子:

1221
0
-32

合法浮點(diǎn)數(shù)的例子:

294.42
-32032.6809e+10
148.00

整數(shù)可以用在浮點(diǎn)環(huán)境中;它被解釋為與浮點(diǎn)數(shù)等效。

9.1.3.?十六進(jìn)制值

MySQL支持十六進(jìn)制值。在數(shù)字上下文中,十六進(jìn)制數(shù)如同整數(shù)(64位精度)。在字符串上下文,如同二進(jìn)制字符串,每對(duì)十六進(jìn)制數(shù)字被轉(zhuǎn)換為一個(gè)字符:

mysql> SELECT x'4D7953514C'
??????? -> 'MySQL'
mysql> SELECT 0xa+0;
??????? -> 10
mysql> SELECT 0x5061756c
??????? -> 'Paul'

十六進(jìn)制值的默認(rèn)類型是字符串。如果想要確保該值作為數(shù)字處理,可以使用CAST(...AS UNSIGNED)

mysql> SELECT 0x41,CAST(0x41 AS UNSIGNED);
??????? -> 'A',65

0x語(yǔ)法基于ODBC。十六進(jìn)制字符串通常用于ODBC以便為BLOB列提供值。xhexstring語(yǔ)法基于標(biāo)準(zhǔn)SQL。

可以用HEX()函數(shù)將一個(gè)字符串或數(shù)字轉(zhuǎn)換為十六進(jìn)制格式的字符串:

mysql> SELECT HEX('cat');
??????? -> '636174'
mysql> SELECT 0x636174;
??????? -> 'cat'

9.1.4.?布爾值

常量TRUE等于1,常量FALSE等于0。常量名可以寫成大寫或小寫。

mysql> SELECT TRUE,true,FALSE,false;
??????? -> 1,10,0

9.1.5.?位字段值

可以使用b'value'符號(hào)寫位字段值。value是一個(gè)用01寫成的二進(jìn)制值。

位字段符號(hào)可以方便指定分配給BIT列的值:

mysql> CREATE TABLE t (b BIT(8));
mysql> INSERT INTO t SET b = b'11111111';
mysql> INSERT INTO t SET b = b'1010';
+------+----------+----------+----------+
| b+0? | BIN(b+0) | OCT(b+0) | HEX(b+0) |
+------+----------+----------+----------+
|? 255 | 11111111 | 377????? | FF?????? |
|?? 10 | 1010???? | 12?????? | A??????? |
+------+----------+----------+----------+

9.1.6.?NULL值

NULL值表示“沒有數(shù)據(jù)”。NULL可以寫成大寫或小寫。

請(qǐng)注意NULL值不同于數(shù)字類型的0或字符串類型的空字符串。參見A.5.3節(jié),“與NULL值有關(guān)的問題”。

對(duì)于用LOAD DATA INFILESELECT ...INTO OUTFILE執(zhí)行的文本文件導(dǎo)入或?qū)С霾僮鳎?span>NULL用序列\N表示。參見13.2.5節(jié),“LOAD DATA INFILE語(yǔ)法”。

9.2.?數(shù)據(jù)庫(kù)、表、索引、列和別名

9.2.1. 識(shí)別符限制條件
9.2.2. 識(shí)別符大小寫敏感性

數(shù)據(jù)庫(kù)、表、索引、列和別名是識(shí)別符。該節(jié)描述了在MySQL中識(shí)別符的允許的語(yǔ)法。

下面的表描述了每類識(shí)別符的最大長(zhǎng)度和允許的字符。

識(shí)別符

最大長(zhǎng)度(字節(jié))

允許的字符

數(shù)據(jù)庫(kù)

64

目錄名允許的任何字符,不包括‘/’、‘\’或者‘

64

文件名允許的任何字符,不包括‘/’、‘\’或者‘。

64

所有字符

索引

64

所有字符

別名

255

所有字符

除了表內(nèi)注明的限制,識(shí)別符不可以包含ASCII 0或值為255的字節(jié)。數(shù)據(jù)庫(kù)、表和列名不應(yīng)以空格結(jié)尾。在識(shí)別符中可以使用引號(hào)識(shí)別符,盡管應(yīng)盡可能避免這樣使用。

識(shí)別符用Unicode(UTF8)保存。在.frm文件中保存的表定義的識(shí)別符和在mysql數(shù)據(jù)庫(kù)中的授權(quán)表保存的識(shí)別符也用Unicode(UTF8)保存。在MySQL 5.1中授權(quán)表(和其它表)的字符串列的大小等于字符個(gè)數(shù);這說(shuō)明(不象以前版本的MySQL)你可以在這些列保存的值中使用多字節(jié)字符而不需要降低字符個(gè)數(shù)。

識(shí)別符可以引起來(lái)也可以不引起來(lái)。如果識(shí)別符是一個(gè)保留字或包含特殊字符,無(wú)論何時(shí)使用,必須將它引起來(lái)。關(guān)于保留字的列表參見9.6節(jié),“MySQL中保留字的處理”。特殊字符指那些當(dāng)前字符集、‘_’和‘$’之外的文字?jǐn)?shù)字字符集。

識(shí)別符的引用符是反勾號(hào)(`)

mysql> SELECT * FROM `select` WHERE `select`.id > 100;

如果SQL服務(wù)器模式包括ANSI_QUOTES模式選項(xiàng),還可以用雙引號(hào)將識(shí)別符引起來(lái):

mysql> CREATE TABLE "test" (col INT);
ERROR 1064: You have an error in your SQL syntax. (...)
mysql> SET sql_mode='ANSI_QUOTES';
mysql> CREATE TABLE "test" (col INT);
Query OK, 0 rows affected (0.00 sec)

參見5.3.2節(jié),“SQL服務(wù)器模式”。

如果你引用識(shí)別符,可以在識(shí)別符內(nèi)包括識(shí)別符引用符。如果識(shí)別符內(nèi)包括的字符與引用識(shí)別符的字符相同,則需要用雙字符。下面的語(yǔ)句創(chuàng)建一個(gè)名為a`b包含列c"d的表:

mysql> CREATE TABLE `a``b` (`c"d` INT)

建議不要使用XeX模式的名,例如1e2e2,因?yàn)轭愃?span>1e+1的表達(dá)式比較模糊。根據(jù)上下文,它可以解釋為表達(dá)式1e + 1或數(shù)字1e+1。

使用MD5產(chǎn)生表名時(shí)應(yīng)仔細(xì),因?yàn)樗赡墚a(chǎn)生不合法的表名,如上所述。

9.2.1.?識(shí)別符限制條件

MySQL允許使用由單個(gè)識(shí)別符或多個(gè)識(shí)別符組成的名字。多部分名各組件之間應(yīng)以句點(diǎn)(.)間隔開。多部分名的開頭部分作為限定詞,后面的識(shí)別符被解釋。

MySQL中可以引用下面形式的列:

列參考

含義

col_name

col_name,查詢中使用的表包含有此名字的列。

tbl_name.col_name

默認(rèn)數(shù)據(jù)庫(kù)中的表tbl_name的列col_name。

db_name.tbl_name.col_name

數(shù)據(jù)庫(kù)db_name中的表tbl_name的列col_name。

?

如果多部分名的組件需要引用,應(yīng)分別將它們引起來(lái)而不要將整個(gè)名引起來(lái)。例如,`my-tables`.`my-column` 有效,而`my-tables.my-column`無(wú)效。

不需要在語(yǔ)句中為列指定tbl_namedb_name.tbl_name前綴,除非列會(huì)很模糊。假定表t1t2各包含一個(gè)列c,你使用SELECT語(yǔ)句在t1t2中搜索c。在這種情況下,c很模糊,因?yàn)樗谡Z(yǔ)句中使用的表內(nèi)不唯一。你必須用表名t1.ct2.c限定它,表示指哪個(gè)表。同樣,要想用同一語(yǔ)句搜索數(shù)據(jù)庫(kù)db1中的表t和數(shù)據(jù)庫(kù)db2中的表t,你必須將那些表中的列指為db1.t.col_namedb2.t.col_name。

限定名中句點(diǎn)后面的字必須為一個(gè)識(shí)別符,因此不需要將它引起來(lái),即使是一個(gè)保留字。

語(yǔ)法.tbl_name表示當(dāng)前數(shù)據(jù)庫(kù)中的tbl_name。該語(yǔ)法與ODBC兼容,因?yàn)槟承?span>ODBC程序在表名前面加前綴‘.’字符。

9.2.2.?識(shí)別符大小寫敏感性

MySQL中,數(shù)據(jù)庫(kù)對(duì)應(yīng)數(shù)據(jù)目錄中的目錄。數(shù)據(jù)庫(kù)中的每個(gè)表至少對(duì)應(yīng)數(shù)據(jù)庫(kù)目錄中的一個(gè)文件(也可能是多個(gè),取決于存儲(chǔ)引擎)。因此,所使用操作系統(tǒng)的大小寫敏感性決定了數(shù)據(jù)庫(kù)名和表名的大小寫敏感性。這說(shuō)明在大多數(shù)Unix中數(shù)據(jù)庫(kù)名和表名對(duì)大小寫敏感,而在Windows中對(duì)大小寫不敏感。一個(gè)顯著的例外情況是Mac OS X,它基于Unix但使用默認(rèn)文件系統(tǒng)類型(HFS+),對(duì)大小寫不敏感。然而,Mac OS X也支持UFS卷,該卷對(duì)大小寫敏感,就像Unix一樣。參見1.8.4節(jié),“MySQL對(duì)標(biāo)準(zhǔn)SQL的擴(kuò)展”。

注釋:盡管在某些平臺(tái)中數(shù)據(jù)庫(kù)名和表名對(duì)大小寫不敏感,不應(yīng)在同一查詢中使用不同的大小寫來(lái)引用給定的數(shù)據(jù)庫(kù)或表。下面的查詢不會(huì)工作,因?yàn)樗瑫r(shí)引用了表my_tablesas MY_tables

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

列、索引、存儲(chǔ)子程序和觸發(fā)器名在任何平臺(tái)上對(duì)大小寫不敏感,列的別名也不敏感。

默認(rèn)情況,表別名在Unix中對(duì)大小寫敏感,但在WindowsMac OS X中對(duì)大小寫不敏感。下面的查詢?cè)?span>Unix中不會(huì)工作,因?yàn)樗瑫r(shí)引用了別名aA

mysql> SELECT col_name FROM tbl_name AS a
??? -> WHERE a.col_name = 1 OR A.col_name = 2;

然而,該查詢?cè)?span>Windows中是可以的。要想避免出現(xiàn)差別,最好采用一致的轉(zhuǎn)換,例如總是用小寫創(chuàng)建并引用數(shù)據(jù)庫(kù)名和表名。在大多數(shù)移植和使用中建議使用該轉(zhuǎn)換。

MySQL中如何在硬盤上保存和使用表名和數(shù)據(jù)庫(kù)名由lower_case_tables_name系統(tǒng)變量確定,可以在啟動(dòng)mysqld時(shí)設(shè)置。lower_case_tables_name可以采用下面的任一值:

含義

0

使用CREATE TABLECREATE DATABASE語(yǔ)句指定的大寫和小寫在硬盤上保存表名和數(shù)據(jù)庫(kù)名。名稱比較對(duì)大小寫敏感。在Unix系統(tǒng)中的默認(rèn)設(shè)置即如此。請(qǐng)注意如果在大小寫不敏感的文件系統(tǒng)上用--lower-case-table-names=0強(qiáng)制設(shè)為0,并且使用不同的大小寫訪問MyISAM表名,會(huì)導(dǎo)致索引破壞。

1

表名在硬盤上以小寫保存,名稱比較對(duì)大小寫敏感。MySQL將所有表名轉(zhuǎn)換為小寫以便存儲(chǔ)和查找。該行為也適合數(shù)據(jù)庫(kù)名和表的別名。該值為WindowsMac OS X系統(tǒng)中的默認(rèn)值。

2

表名和數(shù)據(jù)庫(kù)名在硬盤上使用CREATE TABLECREATE DATABASE語(yǔ)句指定的大小寫進(jìn)行保存,但MySQL將它們轉(zhuǎn)換為小寫以便查找。名稱比較對(duì)大小寫敏感。釋:在對(duì)大小寫不敏感的文件系統(tǒng)上適用! InnoDB表名以小寫保存,例如lower_case_tables_name=1。

WindowsMac OS X中,lower_case_tables_name的 默認(rèn)值是1。

如果只在一個(gè)平臺(tái)上使用MySQL,通常不需要更改lower_case_tables_name變量。然而,如果你想要在對(duì)大小寫敏感不同的文件系統(tǒng)的平臺(tái)之間轉(zhuǎn)移表,會(huì)遇到困難。例如,在Unix中,my_tablesMY_tables是兩個(gè)不同的表,但在Windows中,這兩個(gè)表名相同。要想避免由于數(shù)據(jù)庫(kù)或表名的大小寫造成的數(shù)據(jù)轉(zhuǎn)移問題,可使用兩個(gè)選項(xiàng):

·???????? 在任何系統(tǒng)中可以使用lower_case_tables_name=1。使用該選項(xiàng)的不利之處是當(dāng)使用SHOW TABLESSHOW DATABASES時(shí),看不出名字原來(lái)是用大寫還是小寫。

·???????? Unix中使用lower_case_tables_name=0,在Windows中使用lower_case_tables_name=2。這樣了可以保留數(shù)據(jù)庫(kù)名和表名的大小寫。不利之處是必須確保在Windows中查詢總是用正確大小寫引用數(shù)據(jù)庫(kù)名和表名。如果將查詢轉(zhuǎn)移到Unix中,由于在Unix中大小寫很重要,如果大小寫不正確,它們不工作。

例外:如果你正使用InnoDB表,在任何平臺(tái)上均應(yīng)將lower_case_tables_name設(shè)置為1,以強(qiáng)制將名轉(zhuǎn)換為小寫。

請(qǐng)注意在Unix中將lower_case_tables_name設(shè)置為1之前,重啟mysqld之前,必須先將舊的數(shù)據(jù)庫(kù)名和表名轉(zhuǎn)換為小寫。

9.3.?用戶變量

可以先在用戶變量中保存值然后在以后引用它;這樣可以將值從一個(gè)語(yǔ)句傳遞到另一個(gè)語(yǔ)句。用戶變量與連接有關(guān)。也就是說(shuō),一個(gè)客戶端定義的變量不能被其它客戶端看到或使用。當(dāng)客戶端退出時(shí),該客戶端連接的所有變量將自動(dòng)釋放。

用戶變量的形式為@var_name,其中變量名var_name可以由當(dāng)前字符集的文字?jǐn)?shù)字字符、‘.’、‘_’和‘$’組成。 默認(rèn)字符集是cp1252 (Latin1)??梢杂?strong>mysqld--default-character-set選項(xiàng)更改字符集。參見5.10.1節(jié),“數(shù)據(jù)和排序用字符集”。用戶變量名對(duì)大小寫不敏感。

設(shè)置用戶變量的一個(gè)途徑是執(zhí)行SET語(yǔ)句:

SET @var_name = expr [, @var_name = expr] ...

對(duì)于SET,可以使用=:=作為分配符。分配給每個(gè)變量的expr可以為整數(shù)、實(shí)數(shù)、字符串或者NULL值。

也可以用語(yǔ)句代替SET來(lái)為用戶變量分配一個(gè)值。在這種情況下,分配符必須為:=而不能用=,因?yàn)樵诜?span>SET語(yǔ)句中=被視為一個(gè)比較 操作符:

mysql> SET @t1=0, @t2=0, @t3=0;
mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1? | @t2? | @t3? |
+----------------------+------+------+------+
|????????????????? ??5 |??? 5 |??? 1 |??? 4 |
+----------------------+------+------+------+

用戶變量可以用于表達(dá)式中。目前不包括明顯需要文字值的上下文中,例如SELECT語(yǔ)句的LIMIT子句,或者LOAD DATA語(yǔ)句的IGNORE number LINES子句。

如果使用沒有初始化的變量,其值是NULL。

如果用戶變量分配了一個(gè)字符串值,其字符集和校對(duì)規(guī)則與該字符串的相同。用戶變量的可壓縮性(coercibility)是隱含的。(即為表列值的相同的可壓縮性(coercibility)。

注釋:SELECT語(yǔ)句中,表達(dá)式發(fā)送到客戶端后才進(jìn)行計(jì)算。這說(shuō)明在HAVING、GROUP BY或者ORDER BY子句中,不能使用包含SELECT列表中所設(shè)的變量的表達(dá)式。例如,下面的語(yǔ)句不能按期望工作:

mysql> SELECT (@aa:=id) AS a,(@aa+3) AS b tbl_name HAVING b=5

HAVING子句中引用了SELECT列表中的表達(dá)式的別名,使用@aa。不能按期望工作:@aa不包含當(dāng)前行的值,而是前面所選的行的id值。

一般原則是不要在語(yǔ)句的一個(gè)部分為用戶變量分配一個(gè)值而在同一語(yǔ)句的其它部分使用該變量??赡軙?huì)得到期望的結(jié)果,但不能保證。

設(shè)置變量并在同一語(yǔ)句中使用它的另一個(gè)問題是變量的默認(rèn)結(jié)果的類型取決于語(yǔ)句前面的變量類型。下面的例子說(shuō)明了該點(diǎn):

mysql> SET @a='test';
mysql> SELECT @a,(@a:=20) FROM tbl_name;

對(duì)于該 SELECT語(yǔ)句,MySQL向客戶端報(bào)告第1列是一個(gè)字符串,并且將@a的所有訪問轉(zhuǎn)換為字符串,即使@a在第2行中設(shè)置為一個(gè)數(shù)字。執(zhí)行完SELECT語(yǔ)句后,@a被視為下一語(yǔ)句的一個(gè)數(shù)字。

要想避免這種問題,要么不在同一個(gè)語(yǔ)句中設(shè)置并使用相同的變量,要么在使用前將變量設(shè)置為0、0.0或者''以定義其類型。

未分配的變量有一個(gè)值NULL,類型為字符串。

9.4.?系統(tǒng)變量

9.4.1. 結(jié)構(gòu)式系統(tǒng)變量

MySQL可以訪問許多系統(tǒng)和連接變量。當(dāng)服務(wù)器運(yùn)行時(shí)許多變量可以動(dòng)態(tài)更改。這樣通常允許你修改服務(wù)器操作而不需要停止并重啟服務(wù)器。

mysqld服務(wù)器維護(hù)兩種變量。全局變量影響服務(wù)器整體操作。會(huì)話變量影響具體客戶端連接的操作。

當(dāng)服務(wù)器啟動(dòng)時(shí),它將所有全局變量初始化為默認(rèn)值。這些默認(rèn)值可以在選項(xiàng)文件中或在命令行中指定的選項(xiàng)進(jìn)行更改。服務(wù)器啟動(dòng)后,通過(guò)連接服務(wù)器并執(zhí)行SET GLOBAL var_name語(yǔ)句,可以動(dòng)態(tài)更改這些全局變量。要想更改全局變量,必須具有SUPER權(quán)限。

服務(wù)器還為每個(gè)連接的客戶端維護(hù)一系列會(huì)話變量。在連接時(shí)使用相應(yīng)全局變量的當(dāng)前值對(duì)客戶端的會(huì)話變量進(jìn)行初始化。對(duì)于動(dòng)態(tài)會(huì)話變量,客戶端可以通過(guò)SET SESSION var_name語(yǔ)句更改它們。設(shè)置會(huì)話變量不需要特殊權(quán)限,但客戶端只能更改自己的會(huì)話變量,而不能更改其它客戶端的會(huì)話變量。

對(duì)于全局變量的更改可以被訪問該全局變量的任何客戶端看見。然而,它只影響更改后連接的客戶的從該全局變量初始化的相應(yīng)會(huì)話變量。不影響目前已經(jīng)連接的客戶端的會(huì)話變量(即使客戶端執(zhí)行SET GLOBAL語(yǔ)句也不影響)。

可以使用幾種語(yǔ)法形式來(lái)設(shè)置或檢索全局或會(huì)話變量。下面的例子使用了sort_buffer_sizeas作為示例變量名。

要想設(shè)置一個(gè)GLOBAL變量的值,使用下面的語(yǔ)法:

mysql> SET GLOBAL sort_buffer_size=value;
mysql> SET @@global.sort_buffer_size=value;

要想設(shè)置一個(gè)SESSION變量的值,使用下面的語(yǔ)法:

mysql> SET SESSION sort_buffer_size=value;
mysql> SET @@session.sort_buffer_size=value;
mysql> SET sort_buffer_size=value;

LOCALSESSION的同義詞。

如果設(shè)置變量時(shí)不指定GLOBAL、SESSION或者LOCAL,默認(rèn)使用SESSION。參見13.5.3節(jié),“SET語(yǔ)法”。

要想檢索一個(gè)GLOBAL變量的值,使用下面的語(yǔ)法:

mysql> SELECT @@global.sort_buffer_size;
mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';

要想檢索一個(gè)SESSION變量的值,使用下面的語(yǔ)法:

mysql> SELECT @@sort_buffer_size;
mysql> SELECT @@session.sort_buffer_size;
mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';

這里,LOCAL也是SESSION的同義詞。

當(dāng)你用SELECT @@var_name搜索一個(gè)變量時(shí)(也就是說(shuō),不指定global.、session.或者local.),MySQL返回SESSION值(如果存在),否則返回GLOBAL值。

對(duì)于SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。

當(dāng)設(shè)置GLOBAL變量需要GLOBAL關(guān)鍵字但檢索時(shí)不需要它們的原因是防止將來(lái)出現(xiàn)問題。如果我們移除一個(gè)與某個(gè)GLOBAL變量具有相同名字的SESSION變量,具有SUPER權(quán)限的客戶可能會(huì)意外地更改GLOBAL變量而不是它自己的連接的SESSION變量。如果我們添加一個(gè)與某個(gè)GLOBAL變量具有相同名字的SESSION變量,想更改GLOBAL變量的客戶可能會(huì)發(fā)現(xiàn)只有自己的SESSION變量被更改了。

關(guān)于系統(tǒng)啟動(dòng)選項(xiàng)和系統(tǒng)變量的詳細(xì)信息參見5.3.1節(jié),“mysqld命令行選項(xiàng)”和5.3.3節(jié),“服務(wù)器系統(tǒng)變量”。在5.3.3.1節(jié),“動(dòng)態(tài)系統(tǒng)變量”中列出了可以在運(yùn)行時(shí)設(shè)置的變量。

9.4.1.?結(jié)構(gòu)式系統(tǒng)變量

結(jié)構(gòu)式變量在兩個(gè)方面不同于常規(guī)系統(tǒng)變量:

·???????? 其值是一個(gè)含組件的結(jié)構(gòu),可以指定服務(wù)器參數(shù),一般緊密相關(guān)。

·???????? 可能是給定類型的結(jié)構(gòu)式變量的幾個(gè)實(shí)例。每個(gè)實(shí)例有一個(gè)不同的名,指向服務(wù)器維護(hù)的不同的資源。

MySQL 5.1支持結(jié)構(gòu)式變量類型,可以指定監(jiān)控鍵值緩存操作的參數(shù)。鍵值緩存結(jié)構(gòu)式變量有以下組件:

·???????? key_buffer_size

·???????? key_cache_block_size

·???????? key_cache_division_limit

·???????? key_cache_age_threshold

該節(jié)描述了引用結(jié)構(gòu)式變量的語(yǔ)法。在語(yǔ)法的例子中使用了鍵值緩存變量,但關(guān)于鍵值緩存如何操作的具體詳情在其它章節(jié)中,如 7.4.6節(jié),“MyISAM鍵高速緩沖”。

要引用結(jié)構(gòu)式變量實(shí)例的組件,可以使用instance_name.component_name格式的復(fù)合名。例如:

hot_cache.key_buffer_size
hot_cache.key_cache_block_size
cold_cache.key_cache_block_size

對(duì)于每個(gè)結(jié)構(gòu)式系統(tǒng)變量,總是預(yù)定義名為default的一個(gè)實(shí)例。如果不使用任何實(shí)例名引用結(jié)構(gòu)式變量的一個(gè)組件,default實(shí)例被使用。這樣,default.key_buffer_sizekey_buffer_sizeboth均指向同一系統(tǒng)變量。

結(jié)構(gòu)式變量實(shí)例和組件的命名規(guī)則為:

·???????? 對(duì)于給定類型的結(jié)構(gòu)式變量,每個(gè)實(shí)例必須有一個(gè)在該類變量中唯一的一個(gè)名。但是,在不同類型的結(jié)構(gòu)式變量中實(shí)例名不需要唯一。例如,每個(gè)結(jié)構(gòu)式變量有一個(gè)實(shí)例default,因此在不同的變量類型中default不是唯一的。

·???????? 每個(gè)結(jié)構(gòu)式變量類型的組件名在所有系統(tǒng)變量名中必須是唯一的。如果不是這樣(也就是說(shuō),如果兩個(gè)不同類型的結(jié)構(gòu)式變量能夠共享組件成員名),將不清楚使用哪個(gè)默認(rèn)結(jié)構(gòu)式變量來(lái)用作沒有使用實(shí)例名限定的成員名。

·???????? 如果結(jié)構(gòu)式變量實(shí)例名作為未引起來(lái)的識(shí)別符不合法,將它用反勾號(hào)引起來(lái)作為識(shí)別符。例如,hot-cache不合法,但`hot-cache` 合法。

·???????? global、sessionlocal不是合法實(shí)例名。這樣可以避免與引用非結(jié)構(gòu)式系統(tǒng)變量的符號(hào)的沖突,例如@@global.var_name。

目前,這前兩個(gè)規(guī)則不可能違背,因?yàn)槲ㄒ坏慕Y(jié)構(gòu)式變量類型是鍵值緩存。在將來(lái)創(chuàng)建其它類型的結(jié)構(gòu)式變量,這些規(guī)則將有重要的意義。

一個(gè)例外是,可以在可能出現(xiàn)簡(jiǎn)單變量名的上下文中使用復(fù)合名引用結(jié)構(gòu)式變量組件。例如,可以使用一個(gè)命令行選項(xiàng)未某個(gè)結(jié)構(gòu)式變量分配一個(gè)值:

shell> mysqld --hot_cache.key_buffer_size=64K

在選項(xiàng)文件中,使用:

[mysqld]
hot_cache.key_buffer_size=64K

如果用該選項(xiàng)啟動(dòng)服務(wù)器,除了默認(rèn)大小為8MB的默認(rèn)鍵值緩存,還創(chuàng)建一個(gè)名為hot_cache的鍵值緩存,大小為64KB。

假定你這樣啟動(dòng)服務(wù)器:

shell> mysqld --key_buffer_size=256K \
???????? --extra_cache.key_buffer_size=128K \
???????? --extra_cache.key_cache_block_size=2048

在這種情況下,服務(wù)器將默認(rèn)鍵值緩存的大小設(shè)定為256KB。(也可以寫成--default.key_buffer_size=256K并且,服務(wù)器創(chuàng)建一個(gè)名為extra_cache的第2個(gè)鍵值緩存,大小為128KB,緩存表索引塊的塊緩存區(qū)的大小設(shè)置為2048字節(jié)。

在下面的例子中,用3個(gè)不同的鍵值緩存(大小比例為3:1:1)啟動(dòng)服務(wù)器:

shell> mysqld --key_buffer_size=6M \
??????? ?--hot_cache.key_buffer_size=2M \
???????? --cold_cache.key_buffer_size=2M

也可以在運(yùn)行時(shí)設(shè)置和檢索結(jié)構(gòu)式變量值。例如,要想將名為hot_cache的一個(gè)鍵值緩存的大小設(shè)置為10MB,使用下面任何一個(gè)語(yǔ)句:

mysql> SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql> SET @@global.hot_cache.key_buffer_size = 10*1024*1024;

要想檢索緩存大小,執(zhí)行:

mysql> SELECT @@global.hot_cache.key_buffer_size;

但是,下面的語(yǔ)句不工作。變量不解釋為一個(gè)復(fù)合名,而是解釋為LIKE模式匹配操作的簡(jiǎn)單字符串:

mysql> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';

這是一個(gè)在可能出現(xiàn)簡(jiǎn)單的變量名時(shí)使用結(jié)構(gòu)式變量名的例子。

9.5.?注釋語(yǔ)法

MySQL服務(wù)器支持3種注釋風(fēng)格:

·???????? 從‘#’字符從行尾。

·???????? 從‘-- ’序列到行尾。請(qǐng)注意‘-- (雙破折號(hào))注釋風(fēng)格要求第2個(gè)破折號(hào)后面至少跟一個(gè)空格符(例如空格、tab、換行符等等)。該語(yǔ)法與標(biāo)準(zhǔn)SQL注釋語(yǔ)法稍有不同,后者將在1.8.5.7, “‘--’作為注釋起始標(biāo)記”中討論。

·???????? 序列。結(jié)束序列不一定在同一行中,因此該語(yǔ)法允許注釋跨越多行。

下面的例子顯示了3種風(fēng)格的注釋:

mysql> SELECT 1+1;???? # This comment continues to the end of line
mysql> SELECT 1+1;???? -- This comment continues to the end of line
mysql> SELECT 1  + 1;
mysql> SELECT 1+
1;

上述的注釋語(yǔ)法適用于mysqld服務(wù)器如何分析SQL語(yǔ)句。發(fā)送到服務(wù)器之前,mysql客戶程序也執(zhí)行部分語(yǔ)句解析。(例如,它通過(guò)解析來(lái)確定在多語(yǔ)句行中的語(yǔ)句邊界)。

MySQL 5.1中,mysql解析注釋的唯一局限性是結(jié)合該風(fēng)格的注釋定界符使用的嘆號(hào)標(biāo)記了有條件執(zhí)行的SQL語(yǔ)句部分。適用于交互式運(yùn)行mysql和將命令放入一個(gè)文件中,并以批處理模式使用mysql來(lái)處理mysql < file_name的文件。詳細(xì)信息和例子參見1.8.4節(jié),“MySQL對(duì)標(biāo)準(zhǔn)SQL的擴(kuò)展”。

9.6.?MySQL中保留字的處理

嘗試使用一個(gè)識(shí)別符,例如使用嵌入式MySQL數(shù)據(jù)類型或函數(shù)名作為表名或列名,例如TIMESTAMPGROUP,會(huì)造成一個(gè)常見問題。允許你這樣操作(例如,ABS可以作為一個(gè)列名)。但是,默認(rèn)情況下,在數(shù)調(diào)用中在函數(shù)名和后面的‘(’字符之間不允許有空格。該要求使函數(shù)調(diào)用與列名引用不同。

該行為的不利結(jié)果是在某些上下文中省略一個(gè)空格會(huì)使識(shí)別符解釋為函數(shù)名。例如,該語(yǔ)句合法:

mysql> CREATE TABLE abs (val INT);

但省略abs后面的空格會(huì)造成語(yǔ)法錯(cuò)誤,因?yàn)槭÷院笤撜Z(yǔ)句好像要調(diào)用ABS()函數(shù):

mysql> CREATE TABLE abs(val INT);

如果SQL服務(wù)器模式包括IGNORE_SPACE模式值,服務(wù)器允許函數(shù)調(diào)用時(shí)在函數(shù)名和后面的‘(’字符之間有空格。這樣使函數(shù)名被視為保留字。結(jié)果是,與函數(shù)名相同的識(shí)別符必須按照9.2節(jié),“數(shù)據(jù)庫(kù)、表、索引、列和別名”中所描述的引起來(lái)。SQL服務(wù)器模式按照5.3.2節(jié),“SQL服務(wù)器模式”中所描述的進(jìn)行控制。

限定名中句點(diǎn)后面的字必須為一個(gè)識(shí)別符,因此不需要將它引起來(lái),即使它是一個(gè)保留字。

MySQL中,下表中的字顯式被保留。其中大多數(shù)字進(jìn)制被標(biāo)準(zhǔn)SQL用作列名和/或表名(例如,GROUP)。少數(shù)被保留了,因?yàn)?span>MySQL需要它們,(目前)使用yacc解析程序。保留字被引起來(lái)后可以用作識(shí)別符。

ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE BEFORE
BETWEEN BIGINT BINARY
BLOB BOTH BY
CALL CASCADE CASE
CHANGE CHAR CHARACTER
CHECK COLLATE COLUMN
CONDITION CONNECTION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GOTO GRANT GROUP
HAVING HIGH_PRIORITY HOUR_MICROSECOND
HOUR_MINUTE HOUR_SECOND IF
IGNORE IN INDEX
INFILE INNER INOUT
INSENSITIVE INSERT INT
INT1 INT2 INT3
INT4 INT8 INTEGER
INTERVAL INTO IS
ITERATE JOIN KEY
KEYS KILL LABEL
LEADING LEAVE LEFT
LIKE LIMIT LINEAR
LINES LOAD LOCALTIME
LOCALTIMESTAMP LOCK LONG
LONGBLOB LONGTEXT LOOP
LOW_PRIORITY MATCH MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_MICROSECOND MINUTE_SECOND MOD
MODIFIES NATURAL NOT
NO_WRITE_TO_BINLOG NULL NUMERIC
ON OPTIMIZE OPTION
OPTIONALLY OR ORDER
OUT OUTER OUTFILE
PRECISION PRIMARY PROCEDURE
PURGE RAID0 RANGE
READ READS REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SPATIAL SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING STRAIGHT_JOIN
TABLE TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRIGGER
TRUE UNDO UNION
UNIQUE UNLOCK UNSIGNED
UPDATE USAGE USE
USING UTC_DATE UTC_TIME
UTC_TIMESTAMP VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WHEN WHERE WHILE
WITH WRITE X509
XOR YEAR_MONTH ZEROFILL

MySQL允許部分關(guān)鍵字用做未引起來(lái)的識(shí)別符,因?yàn)樵S多人以前曾使用過(guò)它們。下面列出了一些例子:

  • ACTION

  • BIT

  • DATE

  • ENUM

  • NO

  • TEXT

  • TIME

  • TIMESTAMP


這是MySQL參考手冊(cè)的翻譯版本,關(guān)于MySQL參考手冊(cè),請(qǐng)?jiān)L問dev.mysql.com.。原始參考手冊(cè)為英文版,與英文版參考手冊(cè)相比,本翻譯版可能不是最新的。

Previous article: Next article: