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

directory search
目錄 前言 1. 一般信息 1.1. 關(guān)于本手冊(cè) 1.2. 本手冊(cè)采用的慣例 1.3. MySQL AB概述 1.4. MySQL數(shù)據(jù)庫管理系統(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ù)庫管理系統(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. 通過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. 通過非安裝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. 測試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è)置和測試 2.9.1. Windows下安裝后的過程 2.9.2. Unix下安裝后的過程 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ù)庫拷貝到另一臺(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ù)庫 3.3.1. 創(chuàng)建并選擇數(shù)據(jù)庫 3.3.2. 創(chuàng)建表 3.3.3. 將數(shù)據(jù)裝入表中 3.3.4. 從表檢索信息 3.4. 獲得數(shù)據(jù)庫和表的信息 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ù)庫管理 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ù)庫備份 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本地化和國際應(yīng)用 5.10.1. 數(shù)據(jù)和排序用字符集 5.10.2. 設(shè)置錯(cuò)誤消息語言 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語句和其它查詢 7.2.1. EXPLAIN語法(獲取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如何簡化外部聯(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語句的速度 7.2.17. UPDATE語句的速度 7.2.18. DELETE語句的速度 7.2.19. 其它優(yōu)化技巧 7.3. 鎖定事宜 7.3.1. 鎖定方法 7.3.2. 表鎖定事宜 7.4. 優(yōu)化數(shù)據(jù)庫結(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ù)庫中創(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語句 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ù)庫備份程序 8.9. mysqlhotcopy:數(shù)據(jù)庫備份程序 8.10. mysqlimport:數(shù)據(jù)導(dǎo)入程序 8.11. mysqlshow-顯示數(shù)據(jù)庫、表和列信息 8.12. myisamlog:顯示MyISAM日志文件內(nèi)容 8.13. perror:解釋錯(cuò)誤代碼 8.14. replace:字符串替換實(shí)用工具 8.15. mysql_zap:殺死符合某一模式的進(jìn)程 9. 語言結(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ù)庫、表、索引、列和別名 9.2.1. 識(shí)別符限制條件 9.2.2. 識(shí)別符大小寫敏感性 9.3. 用戶變量 9.4. 系統(tǒng)變量 9.4.1. 結(jié)構(gòu)式系統(tǒng)變量 9.5. 注釋語法 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ù)庫字符集和校對(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語句中使用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語句 10.5. Unicode支持 10.6. 用于元數(shù)據(jù)的UTF8 10.7. 與其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 國家特有字符集 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. 使用來自其他數(shù)據(jù)庫引擎的列類型 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語句語法 13.1. 數(shù)據(jù)定義語句 13.1.1. ALTER DATABASE語法 13.1.2. ALTER TABLE語法 13.1.3. CREATE DATABASE語法 13.1.4. CREATE INDEX語法 13.1.5. CREATE TABLE語法 13.1.6. DROP DATABASE語法 13.1.7. DROP INDEX語法 13.1.8. DROP TABLE語法 13.1.9. RENAME TABLE語法 13.2. 數(shù)據(jù)操作語句 13.2.1. DELETE語法 13.2.2. DO語法 13.2.3. HANDLER語法 13.2.4. INSERT語法 13.2.5. LOAD DATA INFILE語法 13.2.6. REPLACE語法 13.2.7. SELECT語法 13.2.8. Subquery語法 13.2.9. TRUNCATE語法 13.2.10. UPDATE語法 13.3. MySQL實(shí)用工具語句 13.3.1. DESCRIBE語法(獲取有關(guān)列的信息) 13.3.2. USE語法 13.4. MySQL事務(wù)處理和鎖定語句 13.4.1. START TRANSACTION 13.4.2. 不能回滾的語句 13.4.3. 會(huì)造成隱式提交的語句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT語法 13.4.5. LOCK TABLES和UNLOCK TABLES語法 13.4.6. SET TRANSACTION語法 13.4.7. XA事務(wù) 13.5. 數(shù)據(jù)庫管理語句 13.5.1. 賬戶管理語句 13.5.2. 表維護(hù)語句 13.5.3. SET語法 13.5.4. SHOW語法 13.5.5. 其它管理語句 13.6. 復(fù)制語句 13.6.1. 用于控制主服務(wù)器的SQL語句 13.6.2. 用于控制從服務(wù)器的SQL語句 13.7. 用于預(yù)處理語句的SQL語法 14. 插件式存儲(chǔ)引擎體系結(jié)構(gòu) 14.1. 前言 14.2. 概述 14.3. 公共MySQL數(shù)據(jù)庫服務(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ù)庫的備份和恢復(fù) 15.2.9. 將InnoDB數(shù)據(jù)庫移到另一臺(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ī)的簡單基礎(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簇的快速測試設(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ù)語表 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ù)庫 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. 測試幾何對(duì)象間空間關(guān)系的函數(shù) 19.5.5. 關(guān)于幾何最小邊界矩形(MBR)的關(guān)系 19.5.6. 測試幾何類之間空間關(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ǔ)程序的語法 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語句 20.2.7. BEGIN ... END復(fù)合語句 20.2.8. DECLARE語句 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語法 21.2. DROP TRIGGER語法 21.3. 使用觸發(fā)程序 22. 視圖 22.1. ALTER VIEW語法 22.2. CREATE VIEW語法 22.3. DROP VIEW語法 22.4. SHOW CREATE VIEW語法 23. INFORMATION_SCHEMA信息數(shù)據(jù)庫 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和庫 25.1. libmysqld,嵌入式MySQL服務(wù)器庫 25.1.1. 嵌入式MySQL服務(wù)器庫概述 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ù)處理語句 25.2.5. C API預(yù)處理語句的數(shù)據(jù)類型 25.2.6. C API預(yù)處理語句函數(shù)概述 25.2.7. C API預(yù)處理語句函數(shù)描述 25.2.8. C API預(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測試要求 26.4.4. 運(yùn)行Junit測試 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測試套件 27.2. 為MySQL添加新函數(shù) 27.2.1. 自定義函數(shù)接口的特性 27.2.2. CREATE FUNCTION/DROP FUNCTION語法 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. 無法連接到[local] MySQL服務(wù)器 A.2.3. 客戶端不支持鑒定協(xié)議 A.2.4. 輸入密碼時(shí)出現(xiàn)密碼錯(cuò)誤 NoName A.2.6. 連接數(shù)過多 A.2.7. 內(nèi)存溢出 A.2.8. MySQL服務(wù)器不可用 A.2.9. 信息包過大 A.2.10. 通信錯(cuò)誤和失效連接 A.2.11. 表已滿 A.2.12. 無法創(chuàng)建文件/寫入文件 A.2.13. 命令不同步 A.2.14. 忽略用戶 A.2.15. 表tbl_name不存在 A.2.16. 無法初始化字符集 A.2.17. 文件未找到 A.3. 與安裝有關(guān)的事宜 A.3.1. 與MySQL客戶端庫的鏈接問題 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使用和包含的庫 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)生成測試案例 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

附錄I:特性限制

目錄

I.1. 對(duì)存儲(chǔ)子程序和觸發(fā)程序的限制
I.2. 對(duì)服務(wù)器端光標(biāo)的限制
I.3. 對(duì)子查詢的限制
I.4. 對(duì)視圖的限制
I.5. 對(duì)XA事務(wù)的限制

在本附錄中,介紹了使用諸如子查詢或視圖等MySQL特性時(shí)存在的限制。

I.1.?對(duì)存儲(chǔ)子程序和觸發(fā)程序的限制

這里介紹的某些限制適用于所有的存儲(chǔ)子程序,即存儲(chǔ)程序和存儲(chǔ)函數(shù)。某些限制僅適用于存儲(chǔ)函數(shù)而不是存儲(chǔ)程序。

對(duì)存儲(chǔ)函數(shù)的的所有限制也適用于觸發(fā)程序。

注釋:如果SQL語句,如SELECT ... INTO語句包含具有相同名稱的對(duì)列的引用以及聲明的局部變量,MySQL會(huì)將引用解釋為變量的名稱。這是一種非標(biāo)準(zhǔn)的行為,優(yōu)先順序通常是列名、然后是SQL變量和參數(shù)。請(qǐng)參見20.2.9.3節(jié),“SELECT ... INTO語句”。

存儲(chǔ)子程序不能包含任意SQL語句。在存儲(chǔ)子程序中,禁止使用下述語句:

·???????? CHECK TABLES

·???????? LOCK TABLES, UNLOCK TABLES

·???????? LOAD DATA, LOAD TABLE

·???????? SQL預(yù)處理語句(PREPARE、EXECUTE、DEALLOCATE PREPARE)。隱含意義:不能在存儲(chǔ)子程序中使用動(dòng)態(tài)SQL語句(其中,能夠以字符串形式構(gòu)造動(dòng)態(tài)語句,然后執(zhí)行它們)。從MySQL 5.0.13開始,對(duì)于存儲(chǔ)程序放寬了該限制,但該限制仍適用于存儲(chǔ)函數(shù)和觸發(fā)程序。

·???????? OPTIMIZE TABLE

對(duì)于存儲(chǔ)函數(shù)(而不是存儲(chǔ)程序),禁止下述額外語句:

·???????? 執(zhí)行顯式或隱式提交或回滾操作的語句。

·???????? 返回結(jié)果集的語句。包括沒有INFO子句的SELECT語句,以及SHOW語句。能夠用SELECT … INTO,或使用光標(biāo)和FETCH語句處理結(jié)果集的函數(shù)。

·???????? FLUSH語句。注意,盡管能夠在存儲(chǔ)程序中使用FLUSH,但不能從存儲(chǔ)函數(shù)或觸發(fā)程序調(diào)用這類存儲(chǔ)程序。

注意,盡管某些限制在正常情況下適用于存儲(chǔ)函數(shù)和觸發(fā)程序,不適用于存儲(chǔ)程序,如果它們是從存儲(chǔ)函數(shù)或觸發(fā)程序中調(diào)用的,這些限制也適用于存儲(chǔ)程序。

使用存儲(chǔ)子程序會(huì)導(dǎo)致復(fù)制問題。關(guān)于這方面的進(jìn)一步討論,請(qǐng)參見20.4節(jié),“存儲(chǔ)子程序和觸發(fā)程序的二進(jìn)制日志功能”。

INFORMATION_SCHEMA尚不包含PARAMETERS表,因此,對(duì)于需要在運(yùn)行時(shí)獲取子程序參數(shù)信息的應(yīng)用程序來說,必須采用相應(yīng)的規(guī)避錯(cuò)誤,如解析SHOW CREATE語句的輸出。

沒有存儲(chǔ)子程序調(diào)試工具。

存儲(chǔ)子程序使用了具體化的光標(biāo),而不是固有光標(biāo)(在服務(wù)器端生成結(jié)果集并對(duì)結(jié)果集進(jìn)行高速緩沖處理,然后在客戶端獲取結(jié)果集時(shí)按行返回)。

不能提前處理CALL語句。無論是對(duì)服務(wù)器端預(yù)處理語句還是SQL預(yù)處理語句,均成立。

為了防止服務(wù)器線程間的交互問題,當(dāng)客戶端發(fā)出語句時(shí),服務(wù)器將使用可用的、用于語句執(zhí)行的子程序和觸發(fā)程序快照。也就是說,服務(wù)器將計(jì)算出可在語句執(zhí)行期間使用的存儲(chǔ)程序、函數(shù)和觸發(fā)程序的列表,加載它們,然后進(jìn)入語句執(zhí)行。這意味著,在語句執(zhí)行的同時(shí),它不會(huì)看到其他線程對(duì)子程序所作的變更。

I.2.?對(duì)服務(wù)器端光標(biāo)的限制

MySQL 5.0.2開始,通過mysql_stmt_attr_set() C API函數(shù)實(shí)現(xiàn)了服務(wù)器端光標(biāo)。服務(wù)器端光標(biāo)允許在服務(wù)器端生成結(jié)果集,但不會(huì)將其傳輸?shù)娇蛻舳?,除非客戶端?qǐng)求這些行。例如,如果客戶端執(zhí)行了查詢,但僅對(duì)第1行感興趣,那么不會(huì)傳輸剩余的行。

光標(biāo)是只讀的,不能使用光標(biāo)來更新行。

未實(shí)施UPDATE WHERE CURRENT OFDELETE WHERE CURRENT OF,這是因?yàn)椴恢С挚筛碌墓鈽?biāo)。

光標(biāo)是不可保持的(提交后不再保持打開)。

光標(biāo)是不敏感的。

光標(biāo)是不可滾動(dòng)的。

光標(biāo)是未命名的。語句處理程序起著光標(biāo)ID的作用。

對(duì)于每條預(yù)處理語句,僅能打開1個(gè)光標(biāo)。如果需要多個(gè)光標(biāo),必須處理多條語句。

如果在預(yù)處理模式下不支持語句,不能在生成結(jié)果集的語句上使用光標(biāo)。包括CHECK TABLES、HANDLER READSHOW BINLOG EVENTS語句。

I.3.?對(duì)子查詢的限制

隨后將更正的一致缺陷:如果將NULL值與使用ALL、ANYSOME的子查詢進(jìn)行比較,而且子查詢返回空結(jié)果,比較操作將對(duì)NULL的非標(biāo)準(zhǔn)結(jié)果進(jìn)行評(píng)估,而不是TRUEFALSE

子查詢的外部語句可以是SELECT、INSERTUPDATE、DELETE、SETDO中的任何一個(gè)。

僅部分支持行比較操作:

·???????? 對(duì)于expr IN (subquery),expr可以是n-tuple(通過行構(gòu)造程序語法指定),而且子查詢能返回n-tuples個(gè)行。

·???????? 對(duì)于expr op {ALL|ANY|SOME} (subquery)expr必須是標(biāo)度值,子查詢必須是列子查詢,不能返回多列行。

換句話講,對(duì)于返回n-tuples行的子查詢,支持:

(val_1, ..., val_n) IN (subquery)

但不支持:

(val_1, ..., val_n) op {ALL|ANY|SOME} (subquery)

支持針對(duì)IN的行比較,但不支持針對(duì)其他的行比較,原因在于,IN實(shí)施是通過將其重新編寫為“=”比較和AND操作的序列完成的。該方法不能用于ALL、ANYSOME。

未良好優(yōu)化行構(gòu)造程序。下面的兩個(gè)表達(dá)式是等效的,但只有第2個(gè)表達(dá)式能被優(yōu)化:

(col1, col2, ...) = (val1, val2, ...)
col1 = val1 AND col2 = val2 AND ...

對(duì)于IN的子查詢優(yōu)化不如對(duì)“=”的優(yōu)化那樣有效。

對(duì)于不良IN性能的一種典型情況是,當(dāng)子查詢返回少量行,但外部查詢返回將與子查詢結(jié)果相比較的大量行。

FROM子句中的子查詢不能與子查詢有關(guān)系。在評(píng)估外部查詢之前,將對(duì)它們進(jìn)行具體化處理(執(zhí)行以生成結(jié)果集),因此,不能按照外部查詢的行對(duì)它們進(jìn)行評(píng)估。

一般而言,不能更改表,并從子查詢內(nèi)的相同表進(jìn)行選擇。例如,該限制適用于具有下述形式的語句:

DELETE FROM t WHERE ... (SELECT ... FROM t ...);
UPDATE t ... WHERE col = (SELECT ... FROM t ...);
{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);

例外:如果為FROM子句中更改的表使用子查詢,前述禁令將不再適用。例如:

UPDATE t ... WHERE col = (SELECT (SELECT ... FROM t...) AS _t ...);

禁令在此不適用,這是因?yàn)?span>FROM中的子查詢已被具體化為臨時(shí)表,因此“t”中的相關(guān)行已在滿足“t”條件的情況下、在更新時(shí)被選中。

與子查詢相比,針對(duì)聯(lián)合的優(yōu)化程序更成熟,因此,在很多情況下,如果將其改寫為join(聯(lián)合),使用子查詢的語句能夠更有效地執(zhí)行。

但下述情形例外:IN子查詢可被改寫SELECT DISTINCT聯(lián)合。例如:

SELECT col FROM t1 WHERE id_col IN (SELECT id_col2 FROM t2 WHERE condition);

可將該語句改寫為:

SELECT DISTINCT col FROM t1, t2 WHERE t1.id_col = t2.id_col AND condition;

但在該情況下,聯(lián)合需要額外的DISTINCT操作,而且與子查詢相比,效率并不高。

可能的未來優(yōu)化:MySQL不改寫針對(duì)子查詢?cè)u(píng)估的聯(lián)合順序。在某些情況下,如果MySQL將其改寫為聯(lián)合,能夠更有效地執(zhí)行子查詢。這樣,優(yōu)化程序就能在更多的執(zhí)行方案間進(jìn)行選擇。例如,它能決定是否首先讀取某一表或其他。

例如:

SELECT a FROM outer_table AS ot
WHERE a IN (SELECT a FROM inner_table AS it WHERE ot.b = it.b);

對(duì)于該查詢,MySQL總會(huì)首先掃描outer_table,如然后針對(duì)每一行在inner_table上執(zhí)行子查詢。如果outer_table有很多行而inner_table只有少量行,查詢的執(zhí)行速度或許要慢于本應(yīng)有的速度。

前述查詢可改寫為:

SELECT a FROM outer_table AS ot, inner_table AS it
WHERE ot.a = it.a AND ot.b = it.b;

在該情況下,我們能掃描小的表(inner_table)并查詢outer_table中的行,如果在“ot.a,ot.b”上有索引,速度會(huì)更快。

可能的未來優(yōu)化:對(duì)外部查詢的每一行評(píng)估關(guān)聯(lián)的子查詢。更好的方法是,如果外部行的值與之前的行相比沒有變化,不對(duì)子查詢進(jìn)行再次評(píng)估,而是使用以前的結(jié)果。

可能的未來優(yōu)化:通過將結(jié)果具體化到臨時(shí)表,而且該表不使用索引,對(duì)FROM子句中的子查詢進(jìn)行評(píng)估。在查詢中與其他表進(jìn)行比較時(shí),盡管可能是有用的,但不允許使用索引。

可能的未來優(yōu)化:如果FROM子句中的子查詢類似于可施加MERGE算法的視圖,改寫查詢并采用MERGE算法,以便能夠使用索引。下述語句包含這類子查詢:

SELECT * FROM (SELECT * FROM t1 WHERE t1.t1_col) AS _t1, t2 WHERE t2.t2_col;

該語句可被改寫為聯(lián)合,如下所示:

SELECT * FROM t1, t2 WHERE t1.t1_col AND t2.t2_col;

這類改寫具有兩個(gè)優(yōu)點(diǎn):

1.??? 避免使用那些不能使用索引的臨時(shí)表。在改寫的查詢中,優(yōu)化程序可在t1上使用索引。

2.??? 優(yōu)化程序在選擇不同的執(zhí)行計(jì)劃方面具有更大的自由。例如,將查詢改寫為聯(lián)合,那么就允許優(yōu)化程序首先使用t1t2。

可能的未來優(yōu)化:對(duì)于沒有關(guān)聯(lián)子查詢的IN、= ANY、<> ANY、= ALL、以及<> ALL,為結(jié)果使用內(nèi)存中哈希處理,或?qū)^大的結(jié)果使用具有索引的臨時(shí)表。例如:

SELECT a FROM big_table AS bt
WHERE non_key_field IN (SELECT non_key_field FROM table WHERE condition)

在該情況下,可創(chuàng)建臨時(shí)表:

CREATE TABLE t (key (non_key_field))
(SELECT non_key_field FROM table WHERE condition)

然后,對(duì)big_table中的每一行,根據(jù)bt.non_key_field,在“t”中進(jìn)行鍵查找。

I.4.?對(duì)視圖的限制

視圖處理功能概念未優(yōu)化:

·???????? 不能在視圖上創(chuàng)建索引。

·???????? 對(duì)于使用MERGE算法處理的視圖,可以使用索引。但是,對(duì)于使用臨時(shí)表算法處理的視圖,不能在其基表上利用索引提供的優(yōu)點(diǎn)(盡管能夠在臨時(shí)表的生成過程中使用索引)。

在視圖的FROM子句中不能使用子查詢。未來該限制將被放寬。

存在一個(gè)一般原則,不能更改某一表并在子查詢的相同表內(nèi)進(jìn)行選擇。請(qǐng)參見I.3節(jié),“對(duì)子查詢的限制”。

如果從表選擇了視圖并接著從視圖進(jìn)行了選擇,同樣的原理也適用,如果在子查詢中從表選擇了視圖并使用MERGE算法評(píng)估了視圖,也同樣。例如:

CREATE VIEW v1 AS
SELECT * FROM t2 WHERE EXISTS (SELECT 1 FROM t1 WHERE t1.a = t2.a);
?
UPDATE t1, v2 SET t1.a = 1 WHERE t1.b = v2.b;

如果視圖是使用臨時(shí)表評(píng)估的,可從視圖子查詢中的表進(jìn)行選擇,并仍能更改外部查詢中的表。在該情況下,視圖將被具體化,因此,你實(shí)際上不能從子查詢的表中進(jìn)行選擇并“同時(shí)”更改它(這是你打算強(qiáng)制MySQL使用臨時(shí)表算法的另一原因,其方法是在視圖定義中指定ALGORITHM = TEMPTABLE關(guān)鍵字)。

可以使用DROP TABLEALTER TABLE來舍棄或更改視圖定義中使用的表(它會(huì)是視圖失效),而且舍棄或更改操作不會(huì)導(dǎo)致告警。但在以后使用視圖時(shí)會(huì)出錯(cuò)。

視圖定義是通過特定語句“凍結(jié)”的:

·???????? 如果PREPARE預(yù)處理的語句引用了視圖,以后每次執(zhí)行語句時(shí)看到的視圖內(nèi)容與預(yù)處理視圖時(shí)的內(nèi)容相同。即使在語句預(yù)處理完成之后、在執(zhí)行語句之前更改了視圖定義,情況也同樣。例如:

·??????????????? CREATE VIEW v AS SELECT 1;
·??????????????? PREPARE s FROM 'SELECT * FROM v';
·??????????????? ALTER VIEW v AS SELECT 2;
·??????????????? EXECUTE s;

EXECUTE語句返回的結(jié)果是1,而不是2。

·???????? 如果存儲(chǔ)子程序中的語句引用了視圖,語句所見到的視圖內(nèi)容與首次執(zhí)行語句時(shí)的相同。這意味著,如果語句是以循環(huán)方式執(zhí)行的,進(jìn)一步的語句迭代見到的視圖內(nèi)容是相同的,即使在循環(huán)過程中更改了視圖定義也同樣。例如:

·??????????????? CREATE VIEW v AS SELECT 1;
·??????????????? delimiter //
·??????????????? CREATE PROCEDURE p ()
·??????????????? BEGIN
·??????????????? ??DECLARE i INT DEFAULT 0;
·??????????????? ??WHILE i < 5 DO
·??????????????? ????SELECT * FROM v;
·??????????????? ????SET i = i + 1;
·??????????????? ????ALTER VIEW v AS SELECT 2;
·??????????????? ??END WHILE;
·??????????????? END;
·??????????????? //
·??????????????? delimiter ;
·??????????????? CALL p();

如果調(diào)用了程序p(),每次通過循環(huán)時(shí)SELECT返回1,即使在循環(huán)內(nèi)更改了視圖定義也同樣。

關(guān)于視圖的可更新性,對(duì)于視圖,其總體目標(biāo)是,如果任何視圖從理論上講是可更新的,在實(shí)際上也應(yīng)是可更新的。這包括在其定義中有UNION的視圖。目前,并非所有理論上可更新的視圖均能被更新。最初的視圖實(shí)施有意采用該方式,為的是盡快地在MySQL中獲得有用的可更新視圖。很多理論上可更新的視圖現(xiàn)已能更新,但限制依然存在:

·???????? 其子查詢位于WHERE子句之外任何位置的可更新視圖。對(duì)于某些其子查詢位于SELECT列表中的視圖,也是可更新的。

·???????? 不能使用UPDATE來更新定義為Join的視圖的1個(gè)以上的基表。

·???????? 不能使用DELETE來更新定義為Join的視圖。

I.5.?對(duì)XA事務(wù)的限制

XA事務(wù)支持限于InnoDB存儲(chǔ)引擎。

MySQL XA實(shí)施是針對(duì)外部XA的,其中,MySQL服務(wù)器作為資源管理器,而客戶端程序作為事務(wù)管理器。未實(shí)施“內(nèi)部XA”。這樣,就允許MySQL服務(wù)器內(nèi)的單獨(dú)存儲(chǔ)引擎作為RM(資源管理器),而服務(wù)器本身作為TM(事務(wù)管理器)。處理包含1個(gè)以上存儲(chǔ)引擎的XA事務(wù)時(shí),需要內(nèi)部XA。內(nèi)部XA的實(shí)施是不完整的,這是因?yàn)椋蟠鎯?chǔ)引擎在表處理程序?qū)用嫔现С謨呻A段提交,目前僅對(duì)InnoDB實(shí)現(xiàn)了該特性。

對(duì)于XA START,不支持JOINRESUME子句。

對(duì)于XA END,不支持SUSPEND [FOR MIGRATE]子句。

在全局事務(wù)內(nèi),對(duì)于每個(gè)XA事務(wù),xid值的bqual部分應(yīng)是不同的,該要求是對(duì)當(dāng)前MySQL XA實(shí)施的限制。它不是XA規(guī)范的組成部分。

如果XA事務(wù)達(dá)到PREPARED狀態(tài)而且MySQL服務(wù)器宕機(jī),當(dāng)服務(wù)器重啟后,能夠繼續(xù)處理事務(wù)。就像原本應(yīng)當(dāng)?shù)哪菢?。但是,如果客戶端連接中止而服務(wù)器繼續(xù)運(yùn)行,服務(wù)器將回滾任何未完成的XA事務(wù),即使該事務(wù)已達(dá)到PREPARED狀態(tài)也同樣。它應(yīng)能提交或回滾PREPARED XA事務(wù),但在不更改二進(jìn)制日志機(jī)制的情況下不能這樣。


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

Previous article: Next article: