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

目錄 搜索
目錄 前言 1. 一般信息 1.1. 關(guān)于本手冊 1.2. 本手冊采用的慣例 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對標(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. 用自動安裝器安裝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. 首次啟動服務(wù)器 2.3.11. 從Windows命令行啟動MySQL 2.3.12. 以Windows服務(wù)方式啟動MySQL 2.3.13. 測試MySQL安裝 2.3.14. 在Windows環(huán)境下對MySQL安裝的故障診斷與排除 2.3.15. 在Windows下升級MySQL 2.3.16. Windows版MySQL同Unix版MySQL對比 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. 升級MySQL 2.10.1. 從5.0版升級 2.10.2. 升級授權(quán)表 2.10.3. 將MySQL數(shù)據(jù)庫拷貝到另一臺機(jī)器 2.11. 降級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. 擁有某個列的最大值的行 3.6.3. 列的最大值:按組 3.6.4. 擁有某個字段的組間最大值的行 3.6.5. 使用用戶變量 3.6.6. 使用外鍵 3.6.7. 根據(jù)兩個鍵搜索 3.6.8. 根據(jù)天計(jì)算訪問量 3.6.9. 使用AUTO_INCREMENT 3.7. 孿生項(xiàng)目的查詢 3.7.1. 查找所有未分發(fā)的孿生項(xiàng) 3.7.2. 顯示孿生對狀態(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ù)器啟動腳本 5.1.1. 服務(wù)器端腳本和實(shí)用工具概述 5.1.2. mysqld-max擴(kuò)展MySQL服務(wù)器 5.1.3. mysqld_safe:MySQL服務(wù)器啟動腳本 5.1.4. mysql.server:MySQL服務(wù)器啟動腳本 5.1.5. mysqld_multi:管理多個MySQL服務(wù)器的程序 5.2. mysqlmanager:MySQL實(shí)例管理器 5.2.1. 用MySQL實(shí)例管理器啟動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í)例管理器識別的命令 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:升級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)啟動選項(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)限更改何時生效 5.7.8. 拒絕訪問錯誤的原因 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. 自動恢復(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è)置錯誤消息語言 5.10.3. 添加新的字符集 5.10.4. 字符定義數(shù)組 5.10.5. 字符串比較支持 5.10.6. 多字節(jié)字符支持 5.10.7. 字符集問題 5.10.8. MySQL服務(wù)器時區(qū)支持 5.11. MySQL日志文件 5.11.1. 錯誤日志 5.11.2. 通用查詢?nèi)罩?/a> 5.11.3. 二進(jìn)制日志 5.11.4. 慢速查詢?nèi)罩?/a> 5.11.5. 日志文件維護(hù) 5.12. 在同一臺機(jī)器上運(yùn)行多個MySQL服務(wù)器 5.12.1. 在Windows下運(yùn)行多個服務(wù)器 5.12.2. 在Unix中運(yùn)行多個服務(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. 升級復(fù)制設(shè)置 6.6.1. 將復(fù)制升級到5.0版 6.7. 復(fù)制特性和已知問題 6.8. 復(fù)制啟動選項(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. 在同一個數(shù)據(jù)庫中創(chuàng)建多個表的缺陷 7.5. 優(yōu)化MySQL服務(wù)器 7.5.1. 系統(tǒ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. 使用符號鏈接 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:解釋錯誤代碼 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. 識別符限制條件 9.2.2. 識別符大小寫敏感性 9.3. 用戶變量 9.4. 系統(tǒng)變量 9.4.1. 結(jié)構(gòu)式系統(tǒng)變量 9.5. 注釋語法 9.6. MySQL中保留字的處理 10. 字符集支持 10.1. 常規(guī)字符集和校對 10.2. MySQL中的字符集和校對 10.3. 確定默認(rèn)字符集和校對 10.3.1. 服務(wù)器字符集和校對 10.3.2. 數(shù)據(jù)庫字符集和校對 10.3.3. 表字符集和校對 10.3.4. 列字符集和校對 10.3.5. 字符集和校對分配示例 10.3.6. 連接字符集和校對 10.3.7. 字符串文字字符集和校對 10.3.8. 在SQL語句中使用COLLATE 10.3.9. COLLATE子句優(yōu)先 10.3.10. BINARY操作符 10.3.11. 校對確定較為復(fù)雜的一些特殊情況 10.3.12. 校對必須適合字符集 10.3.13. 校對效果的示例 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支持的字符集和校對 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. 日期和時間類型概述 11.1.3. 字符串類型概述 11.2. 數(shù)值類型 11.3. 日期和時間類型 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. 列類型存儲需求 11.6. 選擇正確的列類型 11.7. 使用來自其他數(shù)據(jù)庫引擎的列類型 12. 函數(shù)和操作符 12.1. 操作符 12.1.1. 操作符優(yōu)先級 12.1.2. 圓括號 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ù) 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. 會造成隱式提交的語句 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. 插件式存儲引擎體系結(jié)構(gòu) 14.1. 前言 14.2. 概述 14.3. 公共MySQL數(shù)據(jù)庫服務(wù)器層 14.4. 選擇存儲引擎 14.5. 將存儲引擎指定給表 14.6. 存儲引擎和事務(wù) 14.7. 插入存儲引擎 14.8. 拔出存儲引擎 14.9. 插件式存儲器的安全含義 15. 存儲引擎和表類型 15.1. MyISAM存儲引擎 15.1.1. MyISAM啟動選項(xiàng) 15.1.2. 鍵所需的空間 15.1.3. MyISAM表的存儲格式 15.1.4. MyISAM表方面的問題 15.2. InnoDB存儲引擎 15.2.1. InnoDB概述 15.2.2. InnoDB聯(lián)系信息 15.2.3. InnoDB配置 15.2.4. InnoDB啟動選項(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ù)庫移到另一臺機(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錯誤處理 15.2.16. 對InnoDB表的限制 15.2.17. InnoDB故障診斷與排除 15.3. MERGE存儲引擎 15.3.1. MERGE表方面的問題 15.4. MEMORY (HEAP)存儲引擎 15.5. BDB (BerkeleyDB)存儲引擎 15.5.1. BDB支持的操作系統(tǒng) 15.5.2. 安裝BDB 15.5.3. BDB啟動選項(xiàng) 15.5.4. BDB表的特性 15.5.5. 修改BDB所需的事宜 15.5.6. 對BDB表的限制 15.5.7. 使用BDB表時可能出現(xiàn)的錯誤 15.6. EXAMPLE存儲引擎 15.7. FEDERATED存儲引擎 15.7.1. 安裝FEDERATED存儲引擎 15.7.2. FEDERATED存儲引擎介紹 15.7.3. 如何使用FEDERATED表 15.7.4. FEDERATED存儲引擎的局限性 15.8. ARCHIVE存儲引擎 15.9. CSV存儲引擎 15.10. BLACKHOLE存儲引擎 16. 編寫自定義存儲引擎 16.1. 前言 16.2. 概述 16.3. 創(chuàng)建存儲引擎源文件 NoName 16.5. 對處理程序進(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ǔ)知識 17.3.1. 硬件、軟件和聯(lián)網(wǎng) 17.3.2. 安裝 17.3.3. 配置 17.3.4. 首次啟動 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,存儲引擎節(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簇的啟動階段 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. 測試幾何對象間空間關(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. 存儲程序和函數(shù) 20.1. 存儲程序和授權(quán)表 20.2. 存儲程序的語法 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. 存儲程序中的變量 20.2.10. 條件和處理程序 20.2.11. 光標(biāo) 20.2.12. 流程控制構(gòu)造 20.3. 存儲程序、函數(shù)、觸發(fā)程序和復(fù)制:常見問題 20.4. 存儲子程序和觸發(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ù)器時的限制 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. 日期和時間值的C API處理 25.2.11. C API線程函數(shù)介紹 25.2.12. C API嵌入式服務(wù)器函數(shù)介紹 25.2.13. 使用C API時的常見問題 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平臺上從二進(jìn)制版本安裝MyODBC 26.1.5. I在Unix平臺上從二進(jìn)制版本安裝MyODBC 26.1.6. 在Windows平臺上從源碼版本安裝MyODBC 26.1.7. 在Unix平臺上從源碼版本安裝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錯誤代碼 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. 支持平臺: 26.4.3. Junit測試要求 26.4.4. 運(yùn)行Junit測試 26.4.5. 作為JDBC驅(qū)動程序的一部分運(yùn)行 26.4.6. 在Java對象中運(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. 問題和常見錯誤 A.1. 如何確定導(dǎo)致問題的原因 A.2. 使用MySQL程序時的常見錯誤 A.2.1. 拒絕訪問 A.2.2. 無法連接到[local] MySQL服務(wù)器 A.2.3. 客戶端不支持鑒定協(xié)議 A.2.4. 輸入密碼時出現(xiàn)密碼錯誤 NoName A.2.6. 連接數(shù)過多 A.2.7. 內(nèi)存溢出 A.2.8. MySQL服務(wù)器不可用 A.2.9. 信息包過大 A.2.10. 通信錯誤和失效連接 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將臨時文件儲存在哪里 A.4.5. 如何保護(hù)或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 時區(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. 錯誤代碼和消息 B.1. 服務(wù)器錯誤代碼和消息 B.2. 客戶端錯誤代碼和消息 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. 針對調(diào)試編譯MySQL E.1.2. 創(chuàng)建跟蹤文件 E.1.3. 在gdb環(huán)境下調(diào)試mysqld E.1.4. 使用堆棧跟蹤 E.1.5. 使用日志文件找出mysqld中的錯誤原因 E.1.6. 如果出現(xiàn)表崩潰,請生成測試案例 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. 對存儲子程序和觸發(fā)程序的限制 I.2. 對服務(wù)器端光標(biāo)的限制 I.3. 對子查詢的限制 I.4. 對視圖的限制 I.5. 對XA事務(wù)的限制 J. GNU通用公共許可 K. MySQL FLOSS許可例外 索引
文字

第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. 識別符限制條件
9.2.2. 識別符大小寫敏感性
9.3. 用戶變量
9.4. 系統(tǒng)變量
9.4.1. 結(jié)構(gòu)式系統(tǒng)變量
9.5. 注釋語法
9.6. MySQL中保留字的處理

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

·???????? 字符串和數(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中處理這些基本類型時會遇到的各種細(xì)微差別和“影印版”。

9.1.1.?字符串

字符串指用單引號(')或雙引號(")引起來的字符序列。例如:

'a string'
"another string"

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

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

[_charset_name]'string' [COLLATE collation_name]

例如:

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

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

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

\0

ASCII 0(NUL)字符。

\'

單引號(')。

\"

雙引號(")

\b

退格符。

\n

換行符。

\r

回車符。

\t

tab字符。

\Z

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

\\

反斜線(\)字符。

\%

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

\_

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

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

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

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

有幾種方式可以在字符串中包括引號:

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

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

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

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

下面的SELECT語句顯示了引用和轉(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),必須通過轉(zhuǎn)義序列表示下面的字符:

NUL

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

\

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

'

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

"

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

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

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

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

9.1.2.?數(shù)值

整數(shù)用一系列阿拉伯?dāng)?shù)字表示。浮點(diǎn)數(shù)使用‘.’作為十進(jìn)制間隔符。兩種類型的數(shù)值均可以在前面加一個‘-’來表示負(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)制字符串,每對十六進(jìn)制數(shù)字被轉(zhuǎn)換為一個字符:

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語法基于ODBC。十六進(jìn)制字符串通常用于ODBC以便為BLOB列提供值。xhexstring語法基于標(biāo)準(zhǔn)SQL。

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

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

9.1.4.?布爾值

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

mysql> SELECT TRUE,trueFALSE,false;
??????? -> 1,1,00

9.1.5.?位字段值

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

位字段符號可以方便指定分配給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可以寫成大寫或小寫。

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

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

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

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

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

下面的表描述了每類識別符的最大長度和允許的字符。

識別符

最大長度(字節(jié))

允許的字符

數(shù)據(jù)庫

64

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

64

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

64

所有字符

索引

64

所有字符

別名

255

所有字符

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

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

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

識別符的引用符是反勾號(`)

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

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

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ù)器模式”。

如果你引用識別符,可以在識別符內(nèi)包括識別符引用符。如果識別符內(nèi)包括的字符與引用識別符的字符相同,則需要用雙字符。下面的語句創(chuàng)建一個名為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)生表名時應(yīng)仔細(xì),因?yàn)樗赡墚a(chǎn)生不合法的表名,如上所述。

9.2.1.?識別符限制條件

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

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

列參考

含義

col_name

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

tbl_name.col_name

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

db_name.tbl_name.col_name

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

?

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

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

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

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

9.2.2.?識別符大小寫敏感性

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

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

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

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

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

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

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

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

含義

0

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

1

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

2

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

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

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

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

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

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

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

9.3.?用戶變量

可以先在用戶變量中保存值然后在以后引用它;這樣可以將值從一個語句傳遞到另一個語句。用戶變量與連接有關(guān)。也就是說,一個客戶端定義的變量不能被其它客戶端看到或使用。當(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ù)和排序用字符集”。用戶變量名對大小寫不敏感。

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

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

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

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

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語句的LIMIT子句,或者LOAD DATA語句的IGNORE number LINES子句。

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

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

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

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

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

一般原則是不要在語句的一個部分為用戶變量分配一個值而在同一語句的其它部分使用該變量??赡軙玫狡谕慕Y(jié)果,但不能保證。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LOCALSESSION的同義詞。

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

要想檢索一個GLOBAL變量的值,使用下面的語法:

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

要想檢索一個SESSION變量的值,使用下面的語法:

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搜索一個變量時(也就是說,不指定global.、session.或者local.),MySQL返回SESSION值(如果存在),否則返回GLOBAL值。

對于SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCALMySQL返回SESSION值。

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

關(guān)于系統(tǒ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é),“動態(tài)系統(tǒng)變量”中列出了可以在運(yùn)行時設(shè)置的變量。

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

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

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

·???????? 可能是給定類型的結(jié)構(gòu)式變量的幾個實(shí)例。每個實(shí)例有一個不同的名,指向服務(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)式變量的語法。在語法的例子中使用了鍵值緩存變量,但關(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

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

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

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

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

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

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

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

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

shell> mysqld --hot_cache.key_buffer_size=64K

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

[mysqld]
hot_cache.key_buffer_size=64K

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

假定你這樣啟動服務(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)建一個名為extra_cache的第2個鍵值緩存,大小為128KB,緩存表索引塊的塊緩存區(qū)的大小設(shè)置為2048字節(jié)。

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

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

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

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;

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

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

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

9.5.?注釋語法

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

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

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

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

下面的例子顯示了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;

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

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

9.6.?MySQL中保留字的處理

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

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

mysql> CREATE TABLE abs (val INT);

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

mysql> CREATE TABLE abs(val INT);

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

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

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

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)鍵字用做未引起來的識別符,因?yàn)樵S多人以前曾使用過它們。下面列出了一些例子:

  • ACTION

  • BIT

  • DATE

  • ENUM

  • NO

  • TEXT

  • TIME

  • TIMESTAMP


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

上一篇: 下一篇: