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

目錄 搜索
目錄 前言 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. 一般安裝問(wèn)題 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ù)器類(lèi)型 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. 在其它類(lèi)Unix系統(tǒng)中安裝MySQL 2.8. 使用源碼分發(fā)版安裝MySQL 2.8.1. 源碼安裝概述 2.8.2. 典型配置選項(xiàng) 2.8.3. 從開(kāi)發(fā)源碼樹(shù)安裝 2.8.4. 處理MySQL編譯問(wèn)題 2.8.5. MIT-pthreads注意事項(xiàng) 2.8.6. 在Windows下從源碼安裝MySQL 2.8.7. 在Windows下編譯MySQL客戶(hù)端 2.9. 安裝后的設(shè)置和測(cè)試 2.9.1. Windows下安裝后的過(guò)程 2.9.2. Unix下安裝后的過(guò)程 2.9.3. 使初始MySQL賬戶(hù)安全 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接口的問(wèn)題 3. 教程 3.1. 連接與斷開(kāi)服務(wù)器 3.2. 輸入查詢(xún) 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. 常用查詢(xún)的例子 3.6.1. 列的最大值 3.6.2. 擁有某個(gè)列的最大值的行 3.6.3. 列的最大值:按組 3.6.4. 擁有某個(gè)字段的組間最大值的行 3.6.5. 使用用戶(hù)變量 3.6.6. 使用外鍵 3.6.7. 根據(jù)兩個(gè)鍵搜索 3.6.8. 根據(jù)天計(jì)算訪問(wèn)量 3.6.9. 使用AUTO_INCREMENT 3.7. 孿生項(xiàng)目的查詢(xún) 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)建用戶(hù)賬戶(hù) 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. 一般安全問(wèn)題 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻擊者面前保持安全 5.6.3. Mysqld安全相關(guān)啟動(dòng)選項(xiàng) 5.6.4. LOAD DATA LOCAL安全問(wèn)題 5.7. MySQL訪問(wèn)權(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. 訪問(wèn)控制 5.7.6. 訪問(wèn)控制 5.7.7. 權(quán)限更改何時(shí)生效 5.7.8. 拒絕訪問(wèn)錯(cuò)誤的原因 5.7.9. MySQL 4.1中的密碼哈希處理 5.8. MySQL用戶(hù)賬戶(hù)管理 5.8.1. MySQL用戶(hù)名和密碼 5.8.2. 向MySQL增加新用戶(hù)賬戶(hù) 5.8.3. 從MySQL刪除用戶(hù)賬戶(hù) 5.8.4. 限制賬戶(hù)資源 5.8.5. 設(shè)置賬戶(hù)密碼 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. 字符集問(wèn)題 5.10.8. MySQL服務(wù)器時(shí)區(qū)支持 5.11. MySQL日志文件 5.11.1. 錯(cuò)誤日志 5.11.2. 通用查詢(xún)?nèi)罩?/a> 5.11.3. 二進(jìn)制日志 5.11.4. 慢速查詢(xún)?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)境中使用客戶(hù)端程序 5.13. MySQL查詢(xún)高速緩沖 5.13.1. 查詢(xún)高速緩沖如何工作 5.13.2. 查詢(xún)高速緩沖SELECT選項(xiàng) 5.13.3. 查詢(xún)高速緩沖配置 5.13.4. 查詢(xún)高速緩沖狀態(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ù)制特性和已知問(wèn)題 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ǔ)句和其它查詢(xún) 7.2.1. EXPLAIN語(yǔ)法(獲取SELECT相關(guān)信息) 7.2.2. 估計(jì)查詢(xún)性能 7.2.3. SELECT查詢(xún)的速度 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ì)算打開(kāi)的表 7.4.9. MySQL如何打開(kāi)和關(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. 控制查詢(xún)優(yōu)化器的性能 7.5.4. 編譯和鏈接怎樣影響MySQL的速度 7.5.5. MySQL如何使用內(nèi)存 7.5.6. MySQL如何使用DNS 7.6. 磁盤(pán)事宜 7.6.1. 使用符號(hào)鏈接 8. 客戶(hù)端和實(shí)用工具程序 8.1. 客戶(hù)端腳本和實(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:用于檢查訪問(wèn)權(quán)限的客戶(hù)端 8.5. mysqladmin:用于管理MySQL服務(wù)器的客戶(hù)端 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í)別符大小寫(xiě)敏感性 9.3. 用戶(hù)變量 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. 列類(lèi)型 11.1. 列類(lèi)型概述 11.1.1. 數(shù)值類(lèi)型概述 11.1.2. 日期和時(shí)間類(lèi)型概述 11.1.3. 字符串類(lèi)型概述 11.2. 數(shù)值類(lèi)型 11.3. 日期和時(shí)間類(lèi)型 11.3.1. DATETIME、DATE和TIMESTAMP類(lèi)型 11.3.2. TIME類(lèi)型 11.3.3. YEAR類(lèi)型 11.3.4. Y2K事宜和日期類(lèi)型 11.4. String類(lèi)型 11.4.1. CHAR和VARCHAR類(lèi)型 11.4.2. BINARY和VARBINARY類(lèi)型 11.4.3. BLOB和TEXT類(lèi)型 11.4.4. ENUM類(lèi)型 11.4.5. SET類(lèi)型 11.5. 列類(lèi)型存儲(chǔ)需求 11.6. 選擇正確的列類(lèi)型 11.7. 使用來(lái)自其他數(shù)據(jù)庫(kù)引擎的列類(lèi)型 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. 全文搜索帶查詢(xún)擴(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. 賬戶(hù)管理語(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ǔ)引擎和表類(lèi)型 15.1. MyISAM存儲(chǔ)引擎 15.1.1. MyISAM啟動(dòng)選項(xiàng) 15.1.2. 鍵所需的空間 15.1.3. MyISAM表的存儲(chǔ)格式 15.1.4. MyISAM表方面的問(wèn)題 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. 文件空間管理和磁盤(pán)I/O 15.2.15. InnoDB錯(cuò)誤處理 15.2.16. 對(duì)InnoDB表的限制 15.2.17. InnoDB故障診斷與排除 15.3. MERGE存儲(chǔ)引擎 15.3.1. MERGE表方面的問(wèn)題 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. 編寫(xiě)自定義存儲(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. 打開(kāi)表 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í)行查詢(xún) 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,“管理客戶(hù)端”進(jìn)程 17.5.5. 用于MySQL簇進(jìn)程的命令選項(xiàng) 17.6. MySQL簇的管理 17.6.1. MySQL簇的啟動(dòng)階段 17.6.2. “管理客戶(hù)端”中的命令 17.6.3. MySQL簇中生成的事件報(bào)告 17.6.4. 單用戶(hù)模式 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簇常見(jiàn)問(wèn)題解答 17.11. MySQL簇術(shù)語(yǔ)表 18. 分區(qū) 18.1. MySQL中的分區(qū)概述 18.2. 分區(qū)類(lèi)型 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類(lèi)的層次 19.2.2. 類(lèi)Geometry 19.2.3. 類(lèi)Point 19.2.4. 類(lèi)Curve 19.2.5. 類(lèi)LineString 19.2.6. 類(lèi)Surface 19.2.7. 類(lèi)Polygon 19.2.8. 類(lèi)GeometryCollection 19.2.9. 類(lèi)MultiPoint 19.2.10. 類(lèi)MultiCurve 19.2.11. 類(lèi)MultiLineString 19.2.12. 類(lèi)MultiSurface 19.2.13. 類(lèi)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ù)類(lèi)型 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è)試幾何類(lèi)之間空間關(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ù)制:常見(jiàn)問(wèn)題 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ù)值的類(lèi)型 24.2. DECIMAL數(shù)據(jù)類(lèi)型更改 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ù)類(lèi)型 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ù)類(lèi)型 25.2.6. C API預(yù)處理語(yǔ)句函數(shù)概述 25.2.7. C API預(yù)處理語(yǔ)句函數(shù)描述 25.2.8. C API預(yù)處理語(yǔ)句方面的問(wèn)題 25.2.9. 多查詢(xún)執(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í)的常見(jiàn)問(wèn)題 25.2.14. 創(chuàng)建客戶(hù)端程序 25.2.15. 如何生成線程式客戶(hù)端 25.3. MySQL PHP API 25.3.1. 使用MySQL和PHP的常見(jiàn)問(wèn)題 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程序開(kāi)發(fā)實(shí)用工具 25.9.1. msql2mysql:轉(zhuǎn)換mSQL程序以用于MySQL 25.9.2. mysql_config:獲取編譯客戶(hù)端的編譯選項(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開(kāi)發(fā)源碼樹(shù)安裝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ù)類(lèi)型 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方面的問(wèn)題 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. 編寫(xiě)步驟 A. 問(wèn)題和常見(jiàn)錯(cuò)誤 A.1. 如何確定導(dǎo)致問(wèn)題的原因 A.2. 使用MySQL程序時(shí)的常見(jiàn)錯(cuò)誤 A.2.1. 拒絕訪問(wèn) A.2.2. 無(wú)法連接到[local] MySQL服務(wù)器 A.2.3. 客戶(hù)端不支持鑒定協(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. 表已滿(mǎn) A.2.12. 無(wú)法創(chuàng)建文件/寫(xiě)入文件 A.2.13. 命令不同步 A.2.14. 忽略用戶(hù) A.2.15. 表tbl_name不存在 A.2.16. 無(wú)法初始化字符集 A.2.17. 文件未找到 A.3. 與安裝有關(guān)的事宜 A.3.1. 與MySQL客戶(hù)端庫(kù)的鏈接問(wèn)題 A.3.2. 如何以普通用戶(hù)身份運(yùn)行MySQL A.3.3. 與文件許可有關(guān)的問(wèn)題 A.4. 與管理有關(guān)的事宜 A.4.1. 如何復(fù)位根用戶(hù)密碼 A.4.2. 如果MySQL依然崩潰,應(yīng)作些什么 A.4.3. MySQL處理磁盤(pán)滿(mǎn)的方式 A.4.4. MySQL將臨時(shí)文件儲(chǔ)存在哪里 A.4.5. 如何保護(hù)或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 時(shí)區(qū)問(wèn)題 A.5. 與查詢(xún)有關(guān)的事宜 A.5.1. 搜索中的大小寫(xiě)敏感性 A.5.2. 使用DATE列方面的問(wèn)題 A.5.3. 與NULL值有關(guān)的問(wèn)題 A.5.4. 與列別名有關(guān)的問(wèn)題 A.5.5. 非事務(wù)表回滾失敗 A.5.6. 從相關(guān)表刪除行 A.5.7. 解決與不匹配行有關(guān)的問(wèn)題 A.5.8. 與浮點(diǎn)比較有關(guān)的問(wèn)題 A.6. 與優(yōu)化器有關(guān)的事宜 A.7. 與表定義有關(guān)的事宜 A.7.1. 與ALTER TABLE有關(guān)的問(wèn)題 A.7.2. 如何更改表中的列順序 A.7.3. TEMPORARY TABLE問(wèn)題 A.8. MySQL中的已知事宜 A.8.1. MySQL中的打開(kāi)事宜 B. 錯(cuò)誤代碼和消息 B.1. 服務(wù)器錯(cuò)誤代碼和消息 B.2. 客戶(hù)端錯(cuò)誤代碼和消息 C. 感謝 C.1. MySQL AB處的開(kāi)發(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版中的變更情況(開(kāi)發(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客戶(hù)端 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ì)子查詢(xún)的限制 I.4. 對(duì)視圖的限制 I.5. 對(duì)XA事務(wù)的限制 J. GNU通用公共許可 K. MySQL FLOSS許可例外 索引
文字

第19章:MySQL中的空間擴(kuò)展

目錄

19.1. 前言
19.2. OpenGIS幾何模型
19.2.1. Geometry類(lèi)的層次
19.2.2. 類(lèi)Geometry
19.2.3. 類(lèi)Point
19.2.4. 類(lèi)Curve
19.2.5. 類(lèi)LineString
19.2.6. 類(lèi)Surface
19.2.7. 類(lèi)Polygon
19.2.8. 類(lèi)GeometryCollection
19.2.9. 類(lèi)MultiPoint
19.2.10. 類(lèi)MultiCurve
19.2.11. 類(lèi)MultiLineString
19.2.12. 類(lèi)MultiSurface
19.2.13. 類(lèi)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ù)類(lèi)型
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è)試幾何類(lèi)之間空間關(guān)系的函數(shù)
19.6. 優(yōu)化空間分析
19.6.1. 創(chuàng)建空間索引
19.6.2. 使用空間索引
19.7. MySQL的一致性和兼容性
19.7.1. 尚未實(shí)施的GIS特性

MySQL支持空間擴(kuò)展,允許生成、保存和分析地理特征。這些特征可用于MyISAM、InnoDBNDB、BDBARCHIVE表(但是,ARCHIVE引擎不支持索引功能,因此,不能為ARCHIVE列中的空間列編制索引)。

本章介紹了下述議題:

·???????? OpenGIS幾何模型中這些空間擴(kuò)展的基礎(chǔ)。

·???????? 用于表示空間數(shù)據(jù)的數(shù)據(jù)格式。

·???????? 如何在MySQL中使用空間數(shù)據(jù)。

·???????? 使用關(guān)于空間數(shù)據(jù)的索引功能。

·???????? MySQLOpenGIS規(guī)范的差異。

如果在MySQL空間擴(kuò)展的使用方面有任何問(wèn)題,可在我們網(wǎng)站的GIS論壇 中討論。

19.1.?前言

遵從OpenGIS聯(lián)盟(OGC)的規(guī)范,MySQL實(shí)施了空間擴(kuò)展。OGC是一個(gè)由250多家公司、代理機(jī)構(gòu)和大學(xué)參與的國(guó)際聯(lián)盟,負(fù)責(zé)開(kāi)發(fā)公開(kāi)的概念解決方案,這類(lèi)解決方案對(duì)所有用來(lái)管理空間數(shù)據(jù)的應(yīng)用都是有用的。OGC的網(wǎng)站是http://www.opengis.org/

1997年,OpenGIS聯(lián)盟(OGC)發(fā)布了針對(duì)SQLOpenGIS?簡(jiǎn)單特征規(guī)范,在該文檔中,提出了擴(kuò)展SQL RDBMS以支持空間數(shù)據(jù)的一些概念性方法。該規(guī)范可從OpenGIS網(wǎng)站上獲得http://www.opengis.org/docs/99-049.pdf。其中包含與本章有關(guān)的額外信息。

MySQL實(shí)施了OGC建議的具有Geometry類(lèi)型的SQL環(huán)境的一個(gè)子集。該術(shù)語(yǔ)指的是用一組集合類(lèi)型擴(kuò)展的環(huán)境。具有幾何值的SQL列是作為擁有集合類(lèi)型的列實(shí)施的。該規(guī)范描述了SQL幾何類(lèi)型集合,以及作用在這些類(lèi)型上用于創(chuàng)建和分析幾何值的函數(shù)。

地理特征指的是世界上具有地理位置的任何事物。它可以是:

·???????? 實(shí)體,如山、池溏、城市。

·???????? 空間,如郵政區(qū)域、熱帶。

·???????? 可定義的位置,如兩條街道相交的十字路口。

有些文件采用術(shù)語(yǔ)地理空間特征來(lái)指代地理特征。

幾何是另一個(gè)表示地理特征的術(shù)語(yǔ)。最初,單詞幾何表示的是對(duì)大地的測(cè)量。來(lái)自制圖學(xué)的另一個(gè)含義指的是制圖人員用于繪制世界地圖的地理特征。

本章將所有這些術(shù)語(yǔ)當(dāng)作同義詞對(duì)待:地理特征、地理空間特征、或幾何。最常使用的術(shù)語(yǔ)是幾何。

我們將幾何定義為世界上具有地理位置的點(diǎn)或點(diǎn)的集合。

19.2.?OpenGIS幾何模型

19.2.1. Geometry類(lèi)的層次
19.2.2. 類(lèi)Geometry
19.2.3. 類(lèi)Point
19.2.4. 類(lèi)Curve
19.2.5. 類(lèi)LineString
19.2.6. 類(lèi)Surface
19.2.7. 類(lèi)Polygon
19.2.8. 類(lèi)GeometryCollection
19.2.9. 類(lèi)MultiPoint
19.2.10. 類(lèi)MultiCurve
19.2.11. 類(lèi)MultiLineString
19.2.12. 類(lèi)MultiSurface
19.2.13. 類(lèi)MultiPolygon

OGC具有幾何類(lèi)型的SQL環(huán)境建議的幾何類(lèi)型集合,基于OpenGIS幾何模型。在本模型中,每個(gè)幾何對(duì)象均具有下述一般屬性:

·???????? 與空間參考系統(tǒng)相關(guān),其中介紹了定義對(duì)象的坐標(biāo)空間。

·???????? 屬于某種幾何類(lèi)。

19.2.1.?Geometry類(lèi)的層次

幾何類(lèi)定義了下述層次:

·???????? Geometry(非實(shí)例化)

o??????? Point(可實(shí)例化的)

o??????? Curve(非實(shí)例化)

§???????? LineString(可實(shí)例化的)

·???????? Line

·???????? LinearRing

o??????? Surface(非實(shí)例化)

§???????? Polygon(可實(shí)例化的)

o??????? GeometryCollection(可實(shí)例化的)

§???????? MultiPoint(可實(shí)例化的)

§???????? MultiCurve(非實(shí)例化)

·???????? MultiLineString(可實(shí)例化的)

§???????? MultiSurface(非實(shí)例化)

·???????? MultiPolygon(可實(shí)例化的)

不能在非實(shí)例化類(lèi)中創(chuàng)建對(duì)象。能夠在可實(shí)例化類(lèi)中創(chuàng)建對(duì)象。所有類(lèi)均有屬性,可實(shí)例化類(lèi)還可以包含聲明(定義有效類(lèi)實(shí)例的規(guī)則)。

Geometry是一種基本類(lèi)。它是一種抽象類(lèi)。Geometry的可實(shí)例化子類(lèi)限制為可在2維坐標(biāo)空間中存在的0、1、2維幾何對(duì)象。所有的可實(shí)例化幾何類(lèi)是這樣定義的,從而使得幾何類(lèi)的實(shí)例從拓?fù)湟饬x上講是閉合的(也就是說(shuō),所有定義的幾何類(lèi)包含其邊界)。

基本Geometry類(lèi)具有關(guān)于Point、Curve、SurfaceGeometryCollection的子類(lèi):

·???????? Point表示0維對(duì)象。

·???????? Curve表示1維對(duì)象,具有子類(lèi)LineString,以及次級(jí)子類(lèi)LineLinearRing。

·???????? Surface是為2維對(duì)象設(shè)計(jì)的,具有子類(lèi)Polygon。

·???????? GeometryCollection具有特殊的0維、1維和2維類(lèi)集合,名為MultiPoint、MultiLineStringMultiPolygon,分別用于為對(duì)應(yīng)的Points、LineStringsPolygons集合進(jìn)行幾何建模。MultiCurveMultiSurface是作為抽象超類(lèi)引入的,它們歸納了用于處理CurvesSurfaces的集合接口。

Geometry、CurveSurface、MultiCurveMultiSurface定義為非實(shí)例化類(lèi)。它們?yōu)槠渥宇?lèi)定義了公用方法集合,而且是為擴(kuò)展而包含在內(nèi)的。

PointLineString、Polygon、GeometryCollectionMultiPoint、MultiLineStringMultiPolygon定義為可實(shí)例化類(lèi)。

19.2.2.?類(lèi)Geometry

Geometry是層次結(jié)構(gòu)的根類(lèi)。它是一種非實(shí)例化類(lèi),但具有很多屬性,這些屬性對(duì)由任何Geometry子類(lèi)創(chuàng)建的所有幾何值來(lái)說(shuō)是共同的。下面介紹了這些屬性(尤其是具有自己特殊屬性的子類(lèi))。

Geometry屬性

Geometry值具有下述屬性:

·???????? type(類(lèi)型)。每個(gè)geometry屬于層次結(jié)構(gòu)中可實(shí)例化類(lèi)之一。

·???????? SRID,或空間參考ID。該值確定了用于描述定義幾何對(duì)象的坐標(biāo)空間的空間坐標(biāo)系統(tǒng)。

MySQL中,SRID值僅是與geometry值相關(guān)的整數(shù)值。所有計(jì)算均是在歐幾里得幾何系(平面)中進(jìn)行的。

·???????? 它在其空間坐標(biāo)系統(tǒng)中的coordinates(坐標(biāo)),表示為雙精度數(shù)值(8字節(jié))。所有的非空幾何對(duì)象至少包含一對(duì)坐標(biāo)(X、Y)??諑缀螌?duì)象不含坐標(biāo)。

坐標(biāo)與SRID相關(guān)。例如,在不同的坐標(biāo)系內(nèi),兩個(gè)對(duì)象之間的距離會(huì)有所不同,即使這兩個(gè)對(duì)象具有相同的坐標(biāo)也同樣。這是因?yàn)椋矫孀鴺?biāo)系中的距離和地心坐標(biāo)系(地球表面上的坐標(biāo))中的距離是不同的事項(xiàng)。

·???????? interior(內(nèi)部)、boundary(邊界)和exterior(外部)。

每個(gè)幾何對(duì)象均占據(jù)空間中的某一位置。幾何對(duì)象的exterior(外部)指的是未被該對(duì)象占據(jù)的所有空間。其interior(內(nèi)部)指的是被該對(duì)象占據(jù)的空間。其boundary(邊界)指的是幾何對(duì)象內(nèi)部和外部之間的界面。

·???????? MBR(最小邊界矩形)或包絡(luò)面。這是一種邊界幾何值,由最小和最大坐標(biāo)(X,Y)構(gòu)成。

·??????????????? ((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))

·???????? 無(wú)論值是簡(jiǎn)單的非簡(jiǎn)單的。類(lèi)型(LineString、MultiPoint、MultiLineString)的幾何值或是簡(jiǎn)單的,或是非簡(jiǎn)單的。每個(gè)類(lèi)型決定了其自己的簡(jiǎn)單或非簡(jiǎn)單聲明。

·???????? 無(wú)論值是封閉的非封閉的。類(lèi)型(LineString、MultiPoint)的幾何值或是封閉的,或是非封閉的。每個(gè)類(lèi)型決定了其自己的封閉或非封閉聲明。

·???????? 無(wú)論值是空的非空的。如果沒(méi)有任何點(diǎn),幾何對(duì)象是空的。空幾何對(duì)象的內(nèi)部、外部和邊界未定義(也就是說(shuō),它們由Null值表示)??盏膸缀螌?duì)象定義為總是簡(jiǎn)單的,面積為0。

·???????? dimension(維數(shù))。幾何對(duì)象的維數(shù)為?1、0、12

o??????? ?1用于空幾何對(duì)象。

o??????? 0用于無(wú)長(zhǎng)度、無(wú)面積的幾何對(duì)象。

o??????? 1用于具有非0長(zhǎng)度和0面積的幾何對(duì)象。

o??????? 2用于具有非0面積的幾何對(duì)象。

Point對(duì)象的維數(shù)為0LineString對(duì)象的維數(shù)為1。Polygon對(duì)象的維數(shù)為2。MultiPoint、MultiLineStringMultiPolygon對(duì)象的維數(shù)與構(gòu)成它們的元素的維數(shù)相同。

19.2.3.?類(lèi)Point

Point(點(diǎn))指的是代表坐標(biāo)空間中單個(gè)位置的幾何類(lèi)。

Point示例

·???????? 想像一張具有眾多城市的大世界地圖。每個(gè)Point對(duì)象可代表1個(gè)城市。

·???????? 在城市地圖上,Point對(duì)象可代表1個(gè)公共汽車(chē)站。

Point屬性

·???????? X-坐標(biāo)值。

·???????? Y-坐標(biāo)值。

·???????? Point定義為0維幾何對(duì)象。

·???????? Point的邊界為空集合。

19.2.4.?類(lèi)Curve

Curve(曲線)是一種1幾何對(duì)象,通常由一系列點(diǎn)表示。Curve的特殊子類(lèi)定義了點(diǎn)之間的內(nèi)插類(lèi)型。Curve是一種非實(shí)例化類(lèi)。

Curve屬性

·???????? Curve具有其點(diǎn)的坐標(biāo)。

·???????? Curve定義為1維幾何對(duì)象。

·???????? 如果未通過(guò)相同的點(diǎn)兩次,Curve就是簡(jiǎn)單的。

·???????? 如果其起點(diǎn)等于其終點(diǎn),Curve就是封閉的。

·???????? 封閉Curve的邊界為空。

·???????? 非封閉Curve的邊界由其兩個(gè)端點(diǎn)構(gòu)成。

·???????? 簡(jiǎn)單且封閉的CurveLinearRing

19.2.5.?類(lèi)LineString

LineString是具有點(diǎn)之間線性?xún)?nèi)插特性的Curve。

LineString示例

·???????? 在世界地圖上,LineString對(duì)象可表示河流。

·???????? 在城市地圖上,LineString對(duì)象可表示街道。

LineString屬性

·???????? LineString具有線段的坐標(biāo),由每個(gè)連續(xù)的點(diǎn)對(duì)(兩點(diǎn))定義。

·???????? 如果僅包含兩點(diǎn),LineStringLine。

·???????? 如果它既是簡(jiǎn)單的也是封閉的,LineStringLinearRing

19.2.6.?類(lèi)Surface

Surface是一種2維幾何對(duì)象。它是一種非實(shí)例化類(lèi)。其唯一的可實(shí)例化子類(lèi)是Polygon.

Surface屬性

·???????? Surface定義為2維幾何對(duì)象。

·???????? OpenGIS規(guī)范中,將簡(jiǎn)單的Surface定義為由單一patch”構(gòu)成的幾何對(duì)象,它與單個(gè)外部邊界以及0或多個(gè)內(nèi)部邊界有關(guān)。

·???????? 簡(jiǎn)單Surface的邊界是一組與其內(nèi)部和外部邊界對(duì)應(yīng)的封閉曲線的集合。

19.2.7.?類(lèi)Polygon

Polygon是代表多邊幾何對(duì)象的平面Surface。它由單個(gè)外部邊界以及0或多個(gè)內(nèi)部邊界定義,其中,每個(gè)內(nèi)部邊界定義為Polygon中的1個(gè)孔。

Polygon示例

·???????? 在地區(qū)地圖上,Polygon對(duì)象可表示森林、區(qū)等。

Polygon聲明

·???????? Polygon的邊界由一組構(gòu)成其外部邊界和比內(nèi)部邊界的LinearRing歸向集合構(gòu)成(即,簡(jiǎn)單且封閉的LineString對(duì)象)。

·???????? Polygon沒(méi)有交叉的環(huán)。Polygon邊界中的環(huán)可能會(huì)在Point處相交,但僅以切線方式相交。

·???????? Polygon沒(méi)有線、尖峰或穿孔。

·???????? Polygon有由連接點(diǎn)集合構(gòu)成的內(nèi)部。

·???????? Polygon可能包含孔。對(duì)于具有孔的Polygon,其外部不連接。每個(gè)孔定義了連接的外部部件。

前述聲明使得Polygon成為簡(jiǎn)單的幾何對(duì)象。

19.2.8.?類(lèi)GeometryCollection

GeometryCollection是由1個(gè)或多個(gè)任意類(lèi)幾何對(duì)象構(gòu)成的幾何對(duì)象。

GeometryCollection中的所有元素必須具有相同的空間參考系(即相同的坐標(biāo)系)。對(duì)GeometryCollection的元素?zé)o任何限制,但下面介紹的GeometryCollection的子類(lèi)會(huì)限制其成員。這類(lèi)限制可能基于:

·???????? 元素類(lèi)型(例如,MultiPoint可能僅包含Point元素)。

·???????? 維數(shù)。

·???????? 對(duì)元素間空間交迭程度的限制。

19.2.9.?類(lèi)MultiPoint

MultiPoint是一種由Point元素構(gòu)成的幾何對(duì)象集合。這些點(diǎn)未以任何方式連接或排序。

MultiPoint示例

·???????? 在世界地圖上,MultiPoint可以代表島鏈。

·???????? 在城市地圖上,MultiPoint可以表示售票處的出口。

MultiPoint屬性

·???????? MultiPoint0維幾何對(duì)象。

·???????? 如果沒(méi)有兩個(gè)Point是相同的(具有等同的坐標(biāo)值),MultiPoint是簡(jiǎn)單的。

·???????? MultiPoint的邊界為空集合。

19.2.10.?類(lèi)MultiCurve

MultiCurve是一種由Curve元素構(gòu)成的幾何對(duì)象集合。MultiCurve是一種非實(shí)例化類(lèi)。

MultiCurve屬性

·???????? MultiCurve1維幾何對(duì)象。

·???????? 當(dāng)且僅當(dāng)其所有元素均是簡(jiǎn)單的時(shí),MultiCurve才是簡(jiǎn)單的。任意兩元素的唯一交叉僅出現(xiàn)在兩元素邊界的點(diǎn)上。

·???????? MultiCurve邊界是通過(guò)采用“模2聯(lián)合規(guī)則”(也稱(chēng)為奇偶規(guī)則)獲得的:如果某一點(diǎn)位于奇數(shù)編號(hào)MultiCurve元素的邊界內(nèi),它將位于MultiCurve的邊界內(nèi)。

·???????? 如果其所有元素均是封閉的,則MultiCurve為封閉的。

·???????? 封閉MultiCurve的邊界總為空。

19.2.11.?類(lèi)MultiLineString

MultiLineString是一種由 LineString元素構(gòu)成的MultiCurve幾何對(duì)象集合。

MultiLineString示例

·???????? 在地區(qū)地圖上,MultiLineString可表示河流體系或高速路系統(tǒng)。

19.2.12.?類(lèi)MultiSurface

MultiSurface是一種由Surface元素構(gòu)成的幾何對(duì)象集合。MultiSurface是一種非實(shí)例化類(lèi)。其唯一的可實(shí)例化子類(lèi)是MultiPolygon

MultiSurface聲明

·???????? 2個(gè)MultiSurface面沒(méi)有相交的內(nèi)部。

·???????? 2個(gè)MultiSurface元素具有最多在有限點(diǎn)上相交的邊界。

19.2.13.?類(lèi)MultiPolygon

MultiPolygon是一種由Polygon元素構(gòu)成的幾何對(duì)象集合。

MultiPolygon示例

·???????? 在地區(qū)地圖上,MultiPolygon可表示湖泊系統(tǒng)。

MultiPolygon聲明

·???????? MultiPolygon沒(méi)有內(nèi)部相交的的2個(gè)Polygon元素。

·???????? MultiPolygon沒(méi)有2個(gè)交叉的Polygon元素(前述聲明也禁止交叉),也沒(méi)有在無(wú)數(shù)點(diǎn)處相接觸的2個(gè)Polugon元素。

·???????? MultiPolygon不能含有有斷開(kāi)的線、尖峰或穿孔。MultiPolygon是一種正常的封閉點(diǎn)集合。

·???????? 對(duì)于有1個(gè)以上Polygon元素的MultiPolygon,具有不連接的內(nèi)部。MultiPolygon內(nèi)部已連接部件的數(shù)目等于MultiPolygonPolygon值的數(shù)目。

MultiPolygon屬性

·???????? MultiPolygon2維幾何對(duì)象。

·???????? MultiPolygon邊界是與其Polygon元素的邊界對(duì)應(yīng)的封閉曲線集合LineString值)。

·???????? MultiPolygon邊界中的每個(gè)Curve準(zhǔn)確位于1個(gè)Polygon元素的邊界內(nèi)。

·???????? Polygon元素邊界中的每個(gè)Curve位于MultiPolygon的邊界中。

19.3.?支持的空間數(shù)據(jù)格式

19.3.1. 著名的文本(WKT)格式
19.3.2. 著名的二進(jìn)制(WKB)格式
在本節(jié)中,介紹了用于表示查詢(xún)中幾何對(duì)象的標(biāo)準(zhǔn)空間數(shù)據(jù)格式。它們是:

·???????? 著名的文本(WKT)格式

·???????? 著名的二進(jìn)制(WKB)格式

從其內(nèi)部看,MySQL以不完全等同于WKTWKB的格式保存幾何對(duì)象值。

19.3.1.?著名的文本(WKT)格式

對(duì)于Geometry的著名文本(WKT)表示,它是為與采用ASCII格式的幾何數(shù)據(jù)進(jìn)行交換而設(shè)計(jì)的。

幾何對(duì)象WKT表示的示例:

·???????? Point

·??????????????? POINT(15 20)

注意,指定點(diǎn)坐標(biāo)時(shí)不使用分隔用逗號(hào)。

·???????? 具有4個(gè)點(diǎn)的LineString

·??????????????? LINESTRING(0 0, 10 10, 20 25, 50 60)

注意,點(diǎn)坐標(biāo)對(duì)采用逗號(hào)隔開(kāi)。

·???????? 具有1個(gè)外部環(huán)和1個(gè)內(nèi)部環(huán)的Polygon

·??????????????? POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))

·???????? 具有三個(gè)Point值的MultiPoint

·??????????????? MULTIPOINT(0 0, 20 20, 60 60)

·???????? 具有2個(gè)LineString值的MultiLineString

·??????????????? MULTILINESTRING((10 10, 20 20), (15 15, 30 15))

·???????? 具有2個(gè)Polygon值的MultiPolygon

·??????????????? MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))

·???????? 2個(gè)Point值和1個(gè)LineString構(gòu)成的GeometryCollection

·??????????????? GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

在本章開(kāi)始處給出的OGC規(guī)范文檔中,可找到相應(yīng)的Backus-Naur語(yǔ)法,它指定了用于編寫(xiě)WKT值的正式生產(chǎn)規(guī)則。

19.3.2.?著名的二進(jìn)制(WKB)格式

用于幾何值的著名二進(jìn)制(WKB)表示是由OpenGIS規(guī)范定義的。它還定義在ISO SQL/MM Part 3: Spatial”標(biāo)準(zhǔn)中。

WKB用于以二進(jìn)制流的形式交換幾何數(shù)據(jù),二進(jìn)制流由含幾何WKB信息的BLOB值表示。

WKB使用1字節(jié)無(wú)符號(hào)整數(shù)、4字節(jié)無(wú)符號(hào)整數(shù)、以及8字節(jié)雙精度數(shù)(IEEE 754格式)。1字節(jié)等于8比特。

例如,與POINT(1 1)對(duì)應(yīng)的WKB值由下述21字節(jié)序列構(gòu)成(在此,每個(gè)字節(jié)由2個(gè)十六進(jìn)制數(shù)值表示):

0101000000000000000000F03F000000000000F03F

該序列可分為下述部分:

Byte order : 01
WKB type?? : 01000000
X????????? : 000000000000F03F
Y????????? : 000000000000F03F

表示如下:

·???????? 字節(jié)順序(Byte order)可以是01,分別表明little-endianbig-endian存儲(chǔ)。little-endianbig-endian字節(jié)順序也分別稱(chēng)為網(wǎng)絡(luò)數(shù)據(jù)表示(NDR)和外部數(shù)據(jù)表示(XDR)。

·???????? WKB type”(WKB類(lèi)型)是指明幾何類(lèi)型的代碼。取值從17,分別表示Point、LineString、PolygonMultiPoint、MultiLineString、MultiPolygon、和GeometryCollection

·???????? Point值具有XY坐標(biāo),每個(gè)值均用雙精度值表示。

對(duì)于更復(fù)雜幾何值的WKB值,它們是由更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)表示的,詳情請(qǐng)參見(jiàn)OpenGIS規(guī)范。

19.4.?創(chuàng)建具備空間功能的MySQL數(shù)據(jù)庫(kù)

19.4.1. MySQL空間數(shù)據(jù)類(lèi)型
19.4.2. 創(chuàng)建空間值
19.4.3. 創(chuàng)建空間列
19.4.4. 填充空間列
19.4.5. 獲取空間數(shù)據(jù)
本節(jié)介紹了可用于表示MySQL中空間數(shù)據(jù)的數(shù)據(jù)類(lèi)型,以及用于創(chuàng)建和檢索空間值的函數(shù)。

19.4.1.?MySQL空間數(shù)據(jù)類(lèi)型

MySQL具有與OpenGIS類(lèi)對(duì)應(yīng)的數(shù)據(jù)類(lèi)型。某些類(lèi)型只能保存單個(gè)幾何值:

·???????? GEOMETRY

·???????? POINT

·???????? LINESTRING

·???????? POLYGON

GEOMETRY能夠保存任何類(lèi)型的幾何值。其他的單值類(lèi)型POINT、LINESTRING以及POLYGON只能保存特定幾何類(lèi)型的值。

其他數(shù)據(jù)類(lèi)型能保存多個(gè)值:

·???????? MULTIPOINT

·???????? MULTILINESTRING

·???????? MULTIPOLYGON

·???????? GEOMETRYCOLLECTION

GEOMETRYCOLLECTION能保存任意類(lèi)型的對(duì)象集合。對(duì)于其他集合類(lèi)型,MULTIPOINTMULTILINESTRING、MULTIPOLYGONGEOMETRYCOLLECTION,僅限于具有特定幾何類(lèi)型的集合成員。

19.4.2.?創(chuàng)建空間值

19.4.2.1. 使用WKT函數(shù)創(chuàng)建Geometry(幾何)值
19.4.2.2. 使用WKB函數(shù)創(chuàng)建Geometry(幾何)值
19.4.2.3. 使用MySQL函數(shù)創(chuàng)建幾何值
在本節(jié)中,介紹了使用OpenGIS標(biāo)準(zhǔn)中定義的WKTWKB函數(shù)創(chuàng)建空間值的方法,以及使用相應(yīng)MySQL函數(shù)的方法。

19.4.2.1.?使用WKT函數(shù)創(chuàng)建Geometry(幾何)值

MySQL提供了眾多以WKT表達(dá)式、以及可選的空間參考系IDSRID)為輸入?yún)?shù)的函數(shù)。它們將返回對(duì)應(yīng)的幾何對(duì)象。

GeomFromText()接受任何幾何類(lèi)型的WKT作為其第1個(gè)參量。在實(shí)施方案中也提供了與類(lèi)型相關(guān)的構(gòu)造函數(shù),用于構(gòu)造每一種幾何類(lèi)型的幾何值。

  • GeomCollFromText(wkt[,srid]) , GeometryCollectionFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造GEOMETRYCOLLECTION值。

  • GeomFromText(wkt[,srid]) , GeometryFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造任何類(lèi)型的幾何值。

  • LineFromText(wkt[,srid]) , LineStringFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造LINESTRING值。

  • MLineFromText(wkt[,srid]) , MultiLineStringFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造MULTILINESTRING值。

  • MPointFromText(wkt[,srid]) , MultiPointFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造MULTIPOINT值。

  • MPolyFromText(wkt[,srid]) , MultiPolygonFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造MULTIPOLYGON值。

  • PointFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造POINT值。

  • PolyFromText(wkt[,srid]) , PolygonFromText(wkt[,srid])

    使用其WKT表示和SRID構(gòu)造POLYGON值。

OpenGIS規(guī)范還介紹了用于構(gòu)造PolygonMultiPolygon值的可選函數(shù),這些值基于環(huán)和封閉LineString值集合的WKT表達(dá)式。這些值可以相交。MySQL未實(shí)施下述函數(shù):

  • BdMPolyFromText(wkt,srid)

    以包含已關(guān)閉LineString值任意集合的WKT格式,從MultiLineString值構(gòu)造MultiPolygon值。

  • BdPolyFromText(wkt,srid)

    以包含已關(guān)閉LineString值任意集合的WKT格式,從MultiLineString值構(gòu)造Polygon值。

19.4.2.2.?使用WKB函數(shù)創(chuàng)建Geometry(幾何)值

MySQL提供了眾多函數(shù),它們將包含WKT表達(dá)式、或可選的空間參考系統(tǒng)IDSRID)的BLOB作為輸入?yún)?shù)。它們返回對(duì)應(yīng)的幾何對(duì)象。

GeomFromWKB()接受任何幾何類(lèi)型的WKB作為其第1個(gè)參量。在實(shí)施方案中也提供了與類(lèi)型相關(guān)的構(gòu)造函數(shù),用于構(gòu)造每一種幾何類(lèi)型的幾何值。
  • GeomCollFromWKB(wkb[,srid]) , GeometryCollectionFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造GEOMETRYCOLLECTION值。

  • GeomFromWKB(wkb[,srid]) , GeometryFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造任意類(lèi)型的幾何值。

  • LineFromWKB(wkb[,srid]) , LineStringFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造LINESTRING值。

  • MLineFromWKB(wkb[,srid]) , MultiLineStringFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造MULTILINESTRING值。

  • MPointFromWKB(wkb[,srid]) , MultiPointFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造MULTIPOINT值。

  • MPolyFromWKB(wkb[,srid]) , MultiPolygonFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造MULTIPOLYGON值。

  • PointFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造POINT值。

  • PolyFromWKB(wkb[,srid]) , PolygonFromWKB(wkb[,srid])

    使用其WKB表示和SRID構(gòu)造POLYGON值。

OpenGIS規(guī)范還介紹了用于構(gòu)造PolygonMultiPolygon值的可選函數(shù),這些值基于環(huán)和封閉LineString值集合的WKB表達(dá)式。這些值可以相交。MySQL未實(shí)施下述函數(shù):

  • BdMPolyFromWKB(wkb,srid)

    以包含已關(guān)閉LineString值任意集合的WKB格式,從MultiLineString值構(gòu)造MultiPolygon值。

  • BdPolyFromWKB(wkb,srid)

    以包含已關(guān)閉LineString值任意集合的WKB格式,從MultiLineString值構(gòu)造Polygon值。

19.4.2.3.?使用MySQL函數(shù)創(chuàng)建幾何值

注釋?zhuān)?/span>MySQL未實(shí)施本節(jié)所列的函數(shù)。

MySQL為創(chuàng)建幾何WKB表達(dá)式提供了有用的函數(shù)集合。本節(jié)介紹的函數(shù)是對(duì)OpenGIS規(guī)范的MySQL擴(kuò)展。這些函數(shù)的結(jié)果是包含幾何值(無(wú)SRID)的BLOB值。這些函數(shù)的結(jié)果可被GeomFromWKB()函數(shù)系列中任意函數(shù)的第1個(gè)參量取代。
  • GeometryCollection(g1,g2,...)

    構(gòu)造WKB GeometryCollection。如果任何參量不是構(gòu)造良好的幾何對(duì)象WKB表達(dá)式,返回值為NULL。

  • LineString(pt1,pt2,...)

    從多個(gè)WKB Point參量構(gòu)造WKB LineString。如果任何參量不是WKB Point,返回值為NULL。如果Point參量的數(shù)目小于2,返回值為NULL。

  • MultiLineString(ls1,ls2,...)

    使用WKB LineString參量構(gòu)造WKB MultiLineString。如果任何參量不是WKB LineString,返回值為NULL。

  • MultiPoint(pt1,pt2,...)

    使用WKB Point參量構(gòu)造WKB MultiPoint值。如果任何參量不是WKB Point,返回值為NULL

  • MultiPolygon(poly1,poly2,...)

    從一組WKB Polygon參量構(gòu)造WKB MultiPolygon值。如果任何參量不是WKB Polygon,返回值為NULL。

  • Point(x,y)

    使用其坐標(biāo)構(gòu)造WKB Point。

  • Polygon(ls1,ls2,...)

    從多個(gè)WKB LineString參量構(gòu)造WKB Polygon值。如果任何參量未表示為LinearRingWKB形式(即,非封閉和簡(jiǎn)單LineString,返回值為NULL

19.4.3.?創(chuàng)建空間列

MySQL提供了為幾何類(lèi)型創(chuàng)建空間列的標(biāo)準(zhǔn)方法,例如,使用CREATE TABLEALTER TABLE。目前,僅對(duì)MyISAM標(biāo)支持空間列。

·???????? 使用CREATE TABLE語(yǔ)句創(chuàng)建具有空間列的表:

·??????????????? mysql> CREATE TABLE geom (g GEOMETRY);
·??????????????? Query OK, 0 rows affected (0.02 sec)

·???????? 使用ALTER TABLE語(yǔ)句在已有表中增加空間列,或?qū)⒖臻g列從已有表中刪除:

·??????????????? mysql> ALTER TABLE geom ADD pt POINT;
·??????????????? Query OK, 0 rows affected (0.00 sec)
·??????????????? Records: 0? Duplicates: 0? Warnings: 0
·??????????????? mysql> ALTER TABLE geom DROP pt;
·??????????????? Query OK, 0 rows affected (0.00 sec)
·??????????????? Records: 0? Duplicates: 0? Warnings: 0

19.4.4.?填充空間列

創(chuàng)建了空間列后,可用空間數(shù)據(jù)填充它們。

值應(yīng)以?xún)?nèi)部幾何格式保存,但你也能將其從WKTWKB格式轉(zhuǎn)換為內(nèi)部幾何格式。在下面的示例中,介紹了通過(guò)將WKT值轉(zhuǎn)換為內(nèi)部幾何格式以便將幾何值插入表中的方法。

你可以在INSERT語(yǔ)句中執(zhí)行直接轉(zhuǎn)換操作:

INSERT INTO geom VALUES (GeomFromText('POINT(1 1)'));
?
SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (GeomFromText(@g));

也可以在INSERT之前執(zhí)行轉(zhuǎn)換操作:

SET @g = GeomFromText('POINT(1 1)');
INSERT INTO geom VALUES (@g);

在下面的示例中,將多個(gè)復(fù)雜的幾何值插入到了表中:

SET @g = 'LINESTRING(0 0,1 1,2 2)';
INSERT INTO geom VALUES (GeomFromText(@g));
?
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
INSERT INTO geom VALUES (GeomFromText(@g));
?
SET @g =
'GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))';
INSERT INTO geom VALUES (GeomFromText(@g));

在前面的所有示例中,均采用了GeomFromText()來(lái)創(chuàng)建幾何值。你也可以使用與類(lèi)型相關(guān)的函數(shù):

SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (PointFromText(@g));
?
SET @g = 'LINESTRING(0 0,1 1,2 2)';
INSERT INTO geom VALUES (LineStringFromText(@g));
?
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
INSERT INTO geom VALUES (PolygonFromText(@g));
?
SET @g =
'GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))';
INSERT INTO geom VALUES (GeomCollFromText(@g));

注意,如果客戶(hù)端應(yīng)用程序打算使用幾何值的WKB表示,它需要在隊(duì)列中將正確構(gòu)造的WKB發(fā)送至服務(wù)器。但是,存在數(shù)種滿(mǎn)足該要求的方法。例如:

·???????? 用十六進(jìn)制文字語(yǔ)法插入POINT(1 1)值:

·??????????????? mysql> INSERT INTO geom VALUES
·??????????????? ????-> (GeomFromWKB(0x0101000000000000000000F03F000000000000F03F));

·???????? ODBC應(yīng)用程序能夠發(fā)送WKB表達(dá)式,并使用具有BLOB類(lèi)型的參量將其綁定到占位符:

·??????????????? INSERT INTO geom VALUES (GeomFromWKB(?))

其他編程接口或許也支持類(lèi)似的占位符機(jī)制。

C程序中,可以使用mysql_real_escape_string()轉(zhuǎn)義二進(jìn)制值,并將結(jié)果包含在將發(fā)送至服務(wù)器的查詢(xún)字符串。請(qǐng)參見(jiàn)25.2.3.52節(jié),“mysql_real_escape_string()”

19.4.5.?獲取空間數(shù)據(jù)

19.4.5.1. 以?xún)?nèi)部格式獲取空間數(shù)據(jù)
19.4.5.2. 以WKT格式獲取空間數(shù)據(jù)
19.4.5.3. 以格式獲取空間數(shù)據(jù)
對(duì)于表中保存的幾何值,能夠以?xún)?nèi)部格式獲取。你也能將其轉(zhuǎn)換為WKTWKB格式。

19.4.5.1.?以?xún)?nèi)部格式獲取空間數(shù)據(jù)

在表對(duì)表傳輸中,使用內(nèi)部格式來(lái)獲取幾何值可能是有用的。
CREATE TABLE geom2 (g GEOMETRY) SELECT g FROM geom;

19.4.5.2.?以WKT格式獲取空間數(shù)據(jù)

AsText()函數(shù)能夠?qū)缀沃祻膬?nèi)部格式轉(zhuǎn)換為WKT字符串。
SELECT AsText(g) FROM geom;

19.4.5.3.?以格式獲取空間數(shù)據(jù)

AsBinary()函數(shù)能夠?qū)缀沃祻膬?nèi)部格式轉(zhuǎn)換為包含WKB值的BLOB。
SELECT AsBinary(g) FROM geom;

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è)試幾何類(lèi)之間空間關(guān)系的函數(shù)
用值填充了空間列后,即可查詢(xún)和分析它們。MySQL提供了一組在空間數(shù)據(jù)上執(zhí)行各種操作的函數(shù)。根據(jù)它們所執(zhí)行的操作類(lèi)型,可以將這些函數(shù)分為四種主要類(lèi)別:

·???????? 用于在各種格式間轉(zhuǎn)換幾何值的函數(shù)。

·???????? 用于訪問(wèn)幾何值定性或定量屬性的函數(shù)。

·???????? 描述兩種幾何值之間關(guān)系的函數(shù)。

·???????? 從已有Geometry創(chuàng)建新Geometry的函數(shù)

空間分析函數(shù)可用于很多場(chǎng)合下,如:

·???????? 任何交互式SQL程序,如mysqlMySQLCC。

·???????? 以任何語(yǔ)言編寫(xiě)的、支持MySQL客戶(hù)端API的應(yīng)用程序。

19.5.1.?Geometry格式轉(zhuǎn)換函數(shù)

MySQL支持下述用于在內(nèi)部格式和WKTWKB格式間轉(zhuǎn)換幾何值的函數(shù):

  • AsBinary(g)

    將采用內(nèi)部幾何格式的值轉(zhuǎn)換為其WKB表示,并返回二進(jìn)制結(jié)果。

    SELECT AsBinary(g) FROM geom;
    
  • AsText(g)

    將采用內(nèi)部幾何格式的值轉(zhuǎn)換為其WKT表示,并返回字符串結(jié)果。

    mysql> SET @g = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT AsText(GeomFromText(@g));
    +--------------------------+
    | AsText(GeomFromText(@g)) |
    +--------------------------+
    | LINESTRING(1 1,2 2,3 3)  |
    +--------------------------+
    
  • GeomFromText(wkt[,srid])

    將字符串值從其WKT表示轉(zhuǎn)換為內(nèi)部幾何格式,并返回結(jié)果。也支持多種與類(lèi)型相關(guān)的函數(shù),如PointFromText()LineFromText(),請(qǐng)參見(jiàn)19.4.2.1節(jié),“使用WKT函數(shù)創(chuàng)建Geometry(幾何)值”。

  • GeomFromWKB(wkb[,srid])

    將二進(jìn)制值從其WKB表示轉(zhuǎn)換為內(nèi)部幾何格式,并返回結(jié)果。也支持多種與類(lèi)型相關(guān)的函數(shù),如PointFromWKB()LineFromWKB(),請(qǐng)參見(jiàn)19.4.2.2節(jié),“使用WKB函數(shù)創(chuàng)建Geometry(幾何)值”。

19.5.2.?Geometry函數(shù)

19.5.2.1. 通用幾何函數(shù)
19.5.2.2. Point函數(shù)
?
19.5.2.3. LineString函數(shù)
19.5.2.4. MultiLineString函數(shù)
19.5.2.5. Polygon函數(shù)
19.5.2.6. MultiPolygon函數(shù)
19.5.2.7. GeometryCollection函數(shù)
屬于該組的每個(gè)函數(shù)均將幾何值作為其參量,并返回幾何值的定性或定量屬性。某些函數(shù)限制了其參量類(lèi)型。如果參量是不正確的幾何類(lèi)型,這類(lèi)函數(shù)將返回NULL。例如,如果對(duì)象類(lèi)型既不是Polygon也不是MultiPolygon,Area()將返回NULL。

19.5.2.1.?通用幾何函數(shù)

本節(jié)列出的函數(shù)不限制其參量,可接受任何類(lèi)型的幾何值。

  • Dimension(g)

    返回幾何值g的固有維數(shù)。結(jié)果可以是-1、012。(關(guān)于這些值的含義,請(qǐng)參見(jiàn)19.2.2節(jié),“類(lèi)Geometry”)。

    mysql> SELECT Dimension(GeomFromText('LineString(1 1,2 2)'));
    +------------------------------------------------+
    | Dimension(GeomFromText('LineString(1 1,2 2)')) |
    +------------------------------------------------+
    |                                              1 |
    +------------------------------------------------+
    
  • Envelope(g)

    返回幾何值g的最小邊界矩形(MBR)。結(jié)果以Polygon值的形式返回。

    多邊形(polygon)是由邊界框的頂點(diǎn)定義的:
    POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
    
    mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));
    +-------------------------------------------------------+
    | AsText(Envelope(GeomFromText('LineString(1 1,2 2)'))) |
    +-------------------------------------------------------+
    | POLYGON((1 1,2 1,2 2,1 2,1 1))                        |
    +-------------------------------------------------------+
    
  • GeometryType(g)

    以字符串形式返回幾何類(lèi)型的名稱(chēng),幾何實(shí)例g是幾何類(lèi)型的成員。該名稱(chēng)與可實(shí)例化幾何子類(lèi)之一對(duì)應(yīng)。

    mysql> SELECT GeometryType(GeomFromText('POINT(1 1)'));
    +------------------------------------------+
    | GeometryType(GeomFromText('POINT(1 1)')) |
    +------------------------------------------+
    | POINT                                    |
    +------------------------------------------+
    
  • SRID(g)

    返回指明了幾何值g的空間參考系統(tǒng)ID的整數(shù)。

    MySQL中,SRID值僅是與幾何值相關(guān)的整數(shù)。所有計(jì)算均是在歐幾里得(平面)幾何中進(jìn)行的。

    mysql> SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
    +-----------------------------------------------+
    | SRID(GeomFromText('LineString(1 1,2 2)',101)) |
    +-----------------------------------------------+
    |                                           101 |
    +-----------------------------------------------+
    

OpenGIS規(guī)范還定義了下述函數(shù),MySQL未實(shí)施這類(lèi)函數(shù):

  • Boundary(g)

    返回幾何值g的組合邊界的閉包的幾何對(duì)象。

  • IsEmpty(g)

    如果幾何值g為空的幾何對(duì)象,返回1,如果非空,返回0,如果參量為NULL,返回-1。如果幾何對(duì)象是空的,它表示空的點(diǎn)集合。

  • IsSimple(g)

    目前該函數(shù)是占位符,不應(yīng)使用它。如果實(shí)施了它,其行為與下段所給出的描述類(lèi)似。

    如果幾何值g沒(méi)有異常的幾何點(diǎn)(如自相交或自相切),返回1。如果參量不是簡(jiǎn)單參量,IsSimple()返回0,如果參量是NULL,返回-1。

    對(duì)于本章前面介紹的每個(gè)可實(shí)例化幾何類(lèi),均包含特定的條件,這類(lèi)條件會(huì)使類(lèi)實(shí)例被分類(lèi)為非簡(jiǎn)單的。

19.5.2.2.?Point函數(shù)
?

PointXY坐標(biāo)構(gòu)成,可使用下述函數(shù)獲得它們:

  • X(p)

    以雙精度數(shù)值返回點(diǎn)pX坐標(biāo)值。

    mysql> SELECT X(GeomFromText('Point(56.7 53.34)'));
    +--------------------------------------+
    | X(GeomFromText('Point(56.7 53.34)')) |
    +--------------------------------------+
    |                                 56.7 |
    +--------------------------------------+
    
  • Y(p)

    以雙精度數(shù)值返回點(diǎn)pY坐標(biāo)值。

    mysql> SELECT Y(GeomFromText('Point(56.7 53.34)'));
    +--------------------------------------+
    | Y(GeomFromText('Point(56.7 53.34)')) |
    +--------------------------------------+
    |                                53.34 |
    +--------------------------------------+
    

19.5.2.3.?LineString函數(shù)

LineStringPoint值組成。你可以提取LineString的特定點(diǎn),計(jì)數(shù)它所包含的點(diǎn)數(shù),或獲取其長(zhǎng)度。

  • EndPoint(ls)

    返回LineString1s的最后一個(gè)點(diǎn)的Point

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT AsText(EndPoint(GeomFromText(@ls)));
    +-------------------------------------+
    | AsText(EndPoint(GeomFromText(@ls))) |
    +-------------------------------------+
    | POINT(3 3)                          |
    +-------------------------------------+
    
  • GLength(ls)

    以雙精度數(shù)值返回LineString1s在相關(guān)的空間參考系中的長(zhǎng)度。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT GLength(GeomFromText(@ls));
    +----------------------------+
    | GLength(GeomFromText(@ls)) |
    +----------------------------+
    |            2.8284271247462 |
    +----------------------------+
    
  • NumPoints(ls)

    返回LineString1s中的點(diǎn)數(shù)。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT NumPoints(GeomFromText(@ls));
    +------------------------------+
    | NumPoints(GeomFromText(@ls)) |
    +------------------------------+
    |                            3 |
    +------------------------------+
    
  • PointN(ls,n)

    返回LineString1s中的第n個(gè)點(diǎn)。點(diǎn)編號(hào)從1開(kāi)始。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT AsText(PointN(GeomFromText(@ls),2));
    +-------------------------------------+
    | AsText(PointN(GeomFromText(@ls),2)) |
    +-------------------------------------+
    | POINT(2 2)                          |
    +-------------------------------------+
    
  • StartPoint(ls)

    返回LineString1s的第一個(gè)點(diǎn)的Point。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT AsText(StartPoint(GeomFromText(@ls)));
    +---------------------------------------+
    | AsText(StartPoint(GeomFromText(@ls))) |
    +---------------------------------------+
    | POINT(1 1)                            |
    +---------------------------------------+
    

OpenGIS規(guī)范還定義了下述函數(shù),MySQL尚未實(shí)施這些函數(shù):

  • IsRing(ls)

    如果LineStringls是封閉的(即其StartPoint()EndPoint()值相同)和簡(jiǎn)單的(未通過(guò)相同的點(diǎn)1次以上)返回1。如果ls不是環(huán),返回0,如果它是NULL,返回-1。

19.5.2.4.?MultiLineString函數(shù)

  • GLength(mls)

    以雙精度數(shù)值形式返回MultiLineStringm1s的長(zhǎng)度。mls的長(zhǎng)度等于其元素的長(zhǎng)度之和。

    mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
    mysql> SELECT GLength(GeomFromText(@mls));
    +-----------------------------+
    | GLength(GeomFromText(@mls)) |
    +-----------------------------+
    |             4.2426406871193 |
    +-----------------------------+
    
  • IsClosed(mls)

    如果MultiLineStringm1s是封閉的(即StartPoint()EndPoint()值對(duì)m1s中的每個(gè)LineString是相同的)返回1。如果mls是非封閉的,返回0,如果它是NULL,返回-1

    mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
    mysql> SELECT IsClosed(GeomFromText(@mls));
    +------------------------------+
    | IsClosed(GeomFromText(@mls)) |
    +------------------------------+
    |                            0 |
    +------------------------------+
    

19.5.2.5.?Polygon函數(shù)

  • Area(poly)

    以雙精度數(shù)值形式返回Polygonpoly的面積,根據(jù)在其空間參考系中的測(cè)量值。

    mysql> SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
    mysql> SELECT Area(GeomFromText(@poly));
    +---------------------------+
    | Area(GeomFromText(@poly)) |
    +---------------------------+
    |                         4 |
    +---------------------------+
    
  • ExteriorRing(poly)

    LineString形式返回Polygonpoly的外環(huán)。

    mysql> SET @poly =
        -> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
    mysql> SELECT AsText(ExteriorRing(GeomFromText(@poly)));
    +-------------------------------------------+
    | AsText(ExteriorRing(GeomFromText(@poly))) |
    +-------------------------------------------+
    | LINESTRING(0 0,0 3,3 3,3 0,0 0)           |
    +-------------------------------------------+
    
  • InteriorRingN(poly,n)

    LineString形式返回Polygonpoly的第n個(gè)內(nèi)環(huán)。環(huán)編號(hào)從1開(kāi)始。

    mysql> SET @poly =
        -> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
    mysql> SELECT AsText(InteriorRingN(GeomFromText(@poly),1));
    +----------------------------------------------+
    | AsText(InteriorRingN(GeomFromText(@poly),1)) |
    +----------------------------------------------+
    | LINESTRING(1 1,1 2,2 2,2 1,1 1)              |
    +----------------------------------------------+
    
  • NumInteriorRings(poly)

    返回Polygonpoly的內(nèi)環(huán)的數(shù)目。

    mysql> SET @poly =
        -> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
    mysql> SELECT NumInteriorRings(GeomFromText(@poly));
    +---------------------------------------+
    | NumInteriorRings(GeomFromText(@poly)) |
    +---------------------------------------+
    |                                     1 |
    +---------------------------------------+
    

19.5.2.6.?MultiPolygon函數(shù)

  • Area(mpoly)

    以雙精度數(shù)值形式返回MultiPolygonmpoly的面積,根據(jù)在其空間參考系中的測(cè)量結(jié)果。

    mysql> SET @mpoly =
        -> 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
    mysql> SELECT Area(GeomFromText(@mpoly));
    +----------------------------+
    | Area(GeomFromText(@mpoly)) |
    +----------------------------+
    |                          8 |
    +----------------------------+
    

OpenGIS規(guī)范還定義了下述函數(shù),MySQL未實(shí)施這類(lèi)函數(shù):

  • Centroid(mpoly)

    Point形式返回用于MultiPolygonmpoly的數(shù)學(xué)質(zhì)心。不保證結(jié)果位于MultiPolygon上。

  • PointOnSurface(mpoly)

    返回Point值,保證該值位于MultiPolygonmpoly上。

19.5.2.7.?GeometryCollection函數(shù)

  • GeometryN(gc,n)

    返回GeometryCollectiongc中第n個(gè)幾何對(duì)象。幾何對(duì)象的編號(hào)從1開(kāi)始。

    mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
    mysql> SELECT AsText(GeometryN(GeomFromText(@gc),1));
    +----------------------------------------+
    | AsText(GeometryN(GeomFromText(@gc),1)) |
    +----------------------------------------+
    | POINT(1 1)                             |
    +----------------------------------------+
    
  • NumGeometries(gc)

    返回GeometryCollectiongc中幾何對(duì)象的數(shù)目。

    mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
    mysql> SELECT NumGeometries(GeomFromText(@gc));
    +----------------------------------+
    | NumGeometries(GeomFromText(@gc)) |
    +----------------------------------+
    |                                2 |
    +----------------------------------+
    

19.5.3.?從已有Geometry創(chuàng)建新Geometry的函數(shù)

19.5.3.1. 生成新Geometry的Geometry函數(shù)
19.5.3.2. 空間操作符

19.5.3.1.?生成新Geometry的Geometry函數(shù)

19.5.2節(jié),“Geometry函數(shù)”中,我們討論了一些可從已有幾何對(duì)象構(gòu)造新幾何對(duì)象的函數(shù):

  • Envelope(g)

  • StartPoint(ls)

  • EndPoint(ls)

  • PointN(ls,n)

  • ExteriorRing(poly)

  • InteriorRingN(poly,n)

  • GeometryN(gc,n)

19.5.3.2.?空間操作符

OpenGIS建議了很多可生成幾何對(duì)象的其他函數(shù)。它們是為實(shí)施空間操作符而設(shè)計(jì)的。

MySQL中未實(shí)施這些函數(shù)。它們或許會(huì)在未來(lái)的版本中出現(xiàn)。

  • Buffer(g,d)

    返回幾何對(duì)象,該對(duì)象代表所有距幾何值g的距離小于或等于d的所有點(diǎn)。

  • ConvexHull(g)

    返回幾何對(duì)象,該對(duì)象代表幾何值g的凸包。

  • Difference(g1,g2)

    返回幾何對(duì)象,該對(duì)象表示了幾何值g1g2的點(diǎn)集合差異。

  • Intersection(g1,g2)

    返回幾何對(duì)象,該對(duì)象表示了幾何值g1g2的點(diǎn)集合交集。

  • SymDifference(g1,g2)

    返回幾何對(duì)象,該對(duì)象表示了幾何值g1g2的點(diǎn)集合對(duì)稱(chēng)差。

  • Union(g1,g2)

    返回幾何對(duì)象,該對(duì)象表示了幾何值g1g2的點(diǎn)集合聯(lián)合。

19.5.4.?測(cè)試幾何對(duì)象間空間關(guān)系的函數(shù)

這些節(jié)中所介紹的函數(shù)以2個(gè)幾何對(duì)象作為輸入?yún)?shù),并返回它們之間的定量或定性關(guān)系。

19.5.5.?關(guān)于幾何最小邊界矩形(MBR)的關(guān)系

MySQL提供了一些可測(cè)試兩個(gè)幾何對(duì)象g1g2最小邊界矩形之間關(guān)系的函數(shù)。它們包括:

  • MBRContains(g1,g2)

    返回10以指明g1的最小邊界矩形是否包含g2的最小邊界矩形。

    mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
    mysql> SET @g2 = GeomFromText('Point(1 1)');
    mysql> SELECT MBRContains(@g1,@g2), MBRContains(@g2,@g1);
    ----------------------+----------------------+
    | MBRContains(@g1,@g2) | MBRContains(@g2,@g1) |
    +----------------------+----------------------+
    |                    1 |                    0 |
    +----------------------+----------------------+
    
  • MBRDisjoint(g1,g2)

    返回10以指明兩個(gè)幾何變量g1g2的最小邊界矩形是否不相交。

  • MBREqual(g1,g2)

    返回10以指明兩個(gè)幾何變量g1g2的最小邊界矩形是否相同。

  • MBRIntersects(g1,g2)

    返回10以指明兩個(gè)幾何變量g1g2的最小邊界矩形是否相交。

  • MBROverlaps(g1,g2)

    返回10以指明兩個(gè)幾何變量g1g2的最小邊界矩形是否交迭。

  • MBRTouches(g1,g2)

    返回10以指明兩個(gè)幾何變量g1g2的最小邊界矩形是否接觸。

  • MBRWithin(g1,g2)

    返回10以指明g1的最小邊界矩形是否位于g2的最小邊界矩形內(nèi)。

    mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
    mysql> SET @g2 = GeomFromText('Polygon((0 0,0 5,5 5,5 0,0 0))');
    mysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1);
    +--------------------+--------------------+
    | MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) |
    +--------------------+--------------------+
    |                  1 |                  0 |
    +--------------------+--------------------+
    

19.5.6.?測(cè)試幾何類(lèi)之間空間關(guān)系的函數(shù)

OpenGIS規(guī)范定義了下述函數(shù)。目前在MySQL尚未按照規(guī)范實(shí)施它們。對(duì)于那些已實(shí)施的函數(shù),它們返回的結(jié)果與對(duì)應(yīng)的基于MBR的函數(shù)返回的相同。包括下面列出的函數(shù),但Distance()Related()除外。

在未來(lái)的版本中,可能會(huì)實(shí)施這些函數(shù),為空間分析提供全部支持,而不僅僅是基于MBR的支持。

這些函數(shù)作用在2個(gè)幾何值g1g2上。

  • Contains(g1,g2)

    返回10以指明g1是否完全包含g2。

  • Crosses(g1,g2)

    如果g1在空間上與g2相交,返回1。如果g1為PolygonMultiPolygon,返回NULL,或如果g2PointMultiPoint返回NULL。否則,返回0。

    術(shù)語(yǔ)“空間上交叉”指的是2個(gè)給定幾何對(duì)象之間的空間關(guān)系,它具有下述屬性:

    o??????? 2個(gè)結(jié)合對(duì)象交叉。

    o??????? 其交叉結(jié)果將導(dǎo)致其維數(shù)小于兩個(gè)給定幾何對(duì)象最大維數(shù)的幾何對(duì)象。

    o??????? 其交叉不等于兩個(gè)幾何對(duì)象中的任何1個(gè)。

  • Disjoint(g1,g2)

    返回10以指明g1是否與g2從空間上不相交。

  • Distance(g1,g2)

    以雙精度數(shù)值形式返回2個(gè)幾何對(duì)象中2點(diǎn)間的最短距離。

  • Equals(g1,g2)

    返回10以指明g1是否從空間上等同于g2。

  • Intersects(g1,g2)

    返回10以指明g1是否從空間上與g2相交。

  • Overlaps(g1,g2)

    返回10以指明g1是否從空間上與g2交迭。如果2個(gè)幾何對(duì)象交叉而且其交叉將導(dǎo)致具有相同維數(shù)但并不等同于任一幾何對(duì)象的幾何對(duì)象,將使用術(shù)語(yǔ)“空間交迭”。

  • Related(g1,g2,pattern_matrix)

    返回10以指明由pattern_matrix指定的空間關(guān)系是否在g1g2間存在。如果參量為NULL返回-1。模式矩形為字符串。如果實(shí)施了該函數(shù),其規(guī)范將在此給出。

  • Touches(g1,g2)

    返回10以指明g1是否從空間上與g2接觸。如果幾何對(duì)象的內(nèi)部不交叉,但1個(gè)幾何對(duì)象的邊界與另一個(gè)的邊界或內(nèi)部交叉,這兩個(gè)幾何對(duì)象是從空間上接觸的。

  • Within(g1,g2)

    返回10以指明g1是否從空間上位于g2內(nèi)。

19.6.?優(yōu)化空間分析

19.6.1. 創(chuàng)建空間索引
19.6.2. 使用空間索引
可以使用索引對(duì)2個(gè)非空間數(shù)據(jù)庫(kù)中的搜索操作進(jìn)行優(yōu)化。對(duì)于空間數(shù)據(jù)庫(kù),這同樣成立。有了以前設(shè)計(jì)的大量多維索引功能的幫助,能夠?qū)臻g搜索進(jìn)行優(yōu)化。最典型的情況如下:

·???????? 搜索包含給定點(diǎn)的所有對(duì)象的Point查詢(xún)。

·???????? 搜索與給定地區(qū)交迭的所有對(duì)象的地區(qū)查詢(xún)。

MySQL采用了具有2次分裂特性的R-Trees來(lái)為空間列編制索引。使用幾何對(duì)象的MBR來(lái)創(chuàng)建空間索引。對(duì)于大多數(shù)幾何對(duì)象,MBR是包圍幾何對(duì)象的最小矩形。對(duì)于水平或垂直linestring,MBR退化為linestring的矩形。對(duì)于點(diǎn),MBR是退化為點(diǎn)的矩形。

此外,還能在空間列上創(chuàng)建正常索引。需要為除POINT列之外的空間列上的任何索引(非空間)聲明前綴。

19.6.1.?創(chuàng)建空間索引

MySQL能夠使用與創(chuàng)建正規(guī)索引類(lèi)似的語(yǔ)法創(chuàng)建空間索引,但使用了SPATIAL關(guān)鍵字進(jìn)行了擴(kuò)展。對(duì)于目前編制了索引的空間列,必須將其聲明為NOT NULL。在下面的示例中,介紹了創(chuàng)建空間索引的方法。

·???????? 對(duì)于CREATE TABLE

·??????????????? mysql> CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));

·???????? 對(duì)于ALTER TABLE

·??????????????? mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);

·???????? 對(duì)于CREATE INDEX

·??????????????? mysql> CREATE SPATIAL INDEX sp_index ON geom (g);

對(duì)于MyISAM表,SPATIAL INDEX負(fù)責(zé)創(chuàng)建R-tree索引。對(duì)于支持空間索引的其他存儲(chǔ)引擎,SPATIAL INDEX能夠創(chuàng)建B-tree索引。對(duì)于準(zhǔn)確的值查找而不是范圍掃描,作用在空間值上的B-tree索引很有用。

要想撤銷(xiāo)空間索引,可使用ALTER TABLEDROP INDEX

·???????? 對(duì)于ALTER TABLE

·??????????????? mysql> ALTER TABLE geom DROP INDEX g;

·???????? 對(duì)于DROP INDEX

·??????????????? mysql> DROP INDEX sp_index ON geom;

示例:假定表geom包含32000以上的幾何對(duì)象,它們保存在類(lèi)型為GEOMETRY的列g中。該表還有用于保存對(duì)象ID值的AUTO_INCREMENT列。

mysql> DESCRIBE geom;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| fid   | int(11)  |      | PRI | NULL    | auto_increment |
| g     | geometry |      |     |         |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> SELECT COUNT(*) FROM geom;
+----------+
| count(*) |
+----------+
|    32376 |
+----------+
1 row in set (0.00 sec)

要想在列g上添加空間索引,可使用下述語(yǔ)句:

mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);
Query OK, 32376 rows affected (4.05 sec)
Records: 32376  Duplicates: 0  Warnings: 0

19.6.2.?使用空間索引

優(yōu)化程序?qū)⒄{(diào)查可用的空間索引是否能包含在使用某些函數(shù)的查詢(xún)搜索中,如WHERE子句中的MBRContains()MBRWithin()函數(shù)。例如,假定我們打算找出位于給定矩形中的所有對(duì)象:

mysql> SELECT fid,AsText(g) FROM geom WHERE
mysql> MBRContains(GeomFromText('Polygon((30000 15000,31000 15000,31000 16000,30000 16000,30000 15000))'),g);
+-----+-----------------------------------------------------------------------------+
| fid | AsText(g)                                                                   |
+-----+-----------------------------------------------------------------------------+
|  21 | LINESTRING(30350.4 15828.8,30350.6 15845,30333.8 15845,30333.8 15828.8)     |
|  22 | LINESTRING(30350.6 15871.4,30350.6 15887.8,30334 15887.8,30334 15871.4)     |
|  23 | LINESTRING(30350.6 15914.2,30350.6 15930.4,30334 15930.4,30334 15914.2)     |
|  24 | LINESTRING(30290.2 15823,30290.2 15839.4,30273.4 15839.4,30273.4 15823)     |
|  25 | LINESTRING(30291.4 15866.2,30291.6 15882.4,30274.8 15882.4,30274.8 15866.2) |
|  26 | LINESTRING(30291.6 15918.2,30291.6 15934.4,30275 15934.4,30275 15918.2)     |
| 249 | LINESTRING(30337.8 15938.6,30337.8 15946.8,30320.4 15946.8,30320.4 15938.4) |
|   1 | LINESTRING(30250.4 15129.2,30248.8 15138.4,30238.2 15136.4,30240 15127.2)   |
|   2 | LINESTRING(30220.2 15122.8,30217.2 15137.8,30207.6 15136,30210.4 15121)     |
|   3 | LINESTRING(30179 15114.4,30176.6 15129.4,30167 15128,30169 15113)           |
|   4 | LINESTRING(30155.2 15121.4,30140.4 15118.6,30142 15109,30157 15111.6)       |
|   5 | LINESTRING(30192.4 15085,30177.6 15082.2,30179.2 15072.4,30194.2 15075.2)   |
|   6 | LINESTRING(30244 15087,30229 15086.2,30229.4 15076.4,30244.6 15077)         |
|   7 | LINESTRING(30200.6 15059.4,30185.6 15058.6,30186 15048.8,30201.2 15049.4)   |
|  10 | LINESTRING(30179.6 15017.8,30181 15002.8,30190.8 15003.6,30189.6 15019)     |
|  11 | LINESTRING(30154.2 15000.4,30168.6 15004.8,30166 15014.2,30151.2 15009.8)   |
|  13 | LINESTRING(30105 15065.8,30108.4 15050.8,30118 15053,30114.6 15067.8)       |
| 154 | LINESTRING(30276.2 15143.8,30261.4 15141,30263 15131.4,30278 15134)         |
| 155 | LINESTRING(30269.8 15084,30269.4 15093.4,30258.6 15093,30259 15083.4)       |
| 157 | LINESTRING(30128.2 15011,30113.2 15010.2,30113.6 15000.4,30128.8 15001)     |
+-----+-----------------------------------------------------------------------------+
20 rows in set (0.00 sec)

我們使用EXPLAIN來(lái)檢查該查詢(xún)的執(zhí)行方式(ID列已被刪除,以便輸出能更好地與頁(yè)匹配)

mysql> EXPLAIN SELECT fid,AsText(g) FROM geom WHERE
mysql> MBRContains(GeomFromText('Polygon((30000 15000,31000 15000,31000 16000,30000 16000,30000 15000))'),g);
+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| select_type | table | type  | possible_keys | key  | key_len | ref  | rows | Extra       |
+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| SIMPLE      | geom  | range | g             | g    |      32 | NULL |   50 | Using where |
+-------------+-------+-------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

讓我們檢查一下在沒(méi)有空間索引的情況下會(huì)出現(xiàn)什么:

mysql> EXPLAIN SELECT fid,AsText(g) FROM g IGNORE INDEX (g) WHERE
mysql> MBRContains(GeomFromText('Polygon((30000 15000,31000 15000,31000 16000,30000 16000,30000 15000))'),g);
+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| select_type | table | type | possible_keys | key  | key_len | ref  | rows  | Extra       |
+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| SIMPLE      | geom  | ALL  | NULL          | NULL |    NULL | NULL | 32376 | Using where |
+-------------+-------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.00 sec)

執(zhí)行SELECT語(yǔ)句,忽略空間鍵:

mysql> SELECT fid,AsText(g) FROM geom IGNORE INDEX (g) WHERE
mysql> MBRContains(GeomFromText('Polygon((30000 15000,31000 15000,31000 16000,30000 16000,30000 15000))'),g);
+-----+-----------------------------------------------------------------------------+
| fid | AsText(g)                                                                   |
+-----+-----------------------------------------------------------------------------+
|   1 | LINESTRING(30250.4 15129.2,30248.8 15138.4,30238.2 15136.4,30240 15127.2)   |
|   2 | LINESTRING(30220.2 15122.8,30217.2 15137.8,30207.6 15136,30210.4 15121)     |
|   3 | LINESTRING(30179 15114.4,30176.6 15129.4,30167 15128,30169 15113)           |
|   4 | LINESTRING(30155.2 15121.4,30140.4 15118.6,30142 15109,30157 15111.6)       |
|   5 | LINESTRING(30192.4 15085,30177.6 15082.2,30179.2 15072.4,30194.2 15075.2)   |
|   6 | LINESTRING(30244 15087,30229 15086.2,30229.4 15076.4,30244.6 15077)         |
|   7 | LINESTRING(30200.6 15059.4,30185.6 15058.6,30186 15048.8,30201.2 15049.4)   |
|  10 | LINESTRING(30179.6 15017.8,30181 15002.8,30190.8 15003.6,30189.6 15019)     |
|  11 | LINESTRING(30154.2 15000.4,30168.6 15004.8,30166 15014.2,30151.2 15009.8)   |
|  13 | LINESTRING(30105 15065.8,30108.4 15050.8,30118 15053,30114.6 15067.8)       |
|  21 | LINESTRING(30350.4 15828.8,30350.6 15845,30333.8 15845,30333.8 15828.8)     |
|  22 | LINESTRING(30350.6 15871.4,30350.6 15887.8,30334 15887.8,30334 15871.4)     |
|  23 | LINESTRING(30350.6 15914.2,30350.6 15930.4,30334 15930.4,30334 15914.2)     |
|  24 | LINESTRING(30290.2 15823,30290.2 15839.4,30273.4 15839.4,30273.4 15823)     |
|  25 | LINESTRING(30291.4 15866.2,30291.6 15882.4,30274.8 15882.4,30274.8 15866.2) |
|  26 | LINESTRING(30291.6 15918.2,30291.6 15934.4,30275 15934.4,30275 15918.2)     |
| 154 | LINESTRING(30276.2 15143.8,30261.4 15141,30263 15131.4,30278 15134)         |
| 155 | LINESTRING(30269.8 15084,30269.4 15093.4,30258.6 15093,30259 15083.4)       |
| 157 | LINESTRING(30128.2 15011,30113.2 15010.2,30113.6 15000.4,30128.8 15001)     |
| 249 | LINESTRING(30337.8 15938.6,30337.8 15946.8,30320.4 15946.8,30320.4 15938.4) |
+-----+-----------------------------------------------------------------------------+
20 rows in set (0.46 sec)

未使用索引時(shí),該查詢(xún)的執(zhí)行時(shí)間將從0.00秒上升到0.46秒。

在未來(lái)的版本中,空間索引也可能會(huì)用于優(yōu)化其他函數(shù)。請(qǐng)參見(jiàn)19.5.4節(jié),“測(cè)試幾何對(duì)象間空間關(guān)系的函數(shù)”。

19.7.?MySQL的一致性和兼容性

19.7.1. 尚未實(shí)施的GIS特性

19.7.1.?尚未實(shí)施的GIS特性

  • 額外的元數(shù)據(jù)視圖

    OpenGIS規(guī)范建議了數(shù)種額外的元數(shù)據(jù)視圖。例如,包含幾何列的描述的名為GEOMETRY_COLUMNS的系統(tǒng)視圖,對(duì)于數(shù)據(jù)庫(kù)中的每列有1行相關(guān)內(nèi)容。

  • 作用在LineStringMultiLineString上的OpenGIS函數(shù)Length()目前應(yīng)在MySQL中以GLength()的方式調(diào)用。

    問(wèn)題在于存在1個(gè)用于計(jì)算字符串值長(zhǎng)度的已有SQL函數(shù)Length(),而且在某些情況下無(wú)法判斷函數(shù)是在文本場(chǎng)景下還是空間場(chǎng)景下調(diào)用的。我們需要以某種方式解決該問(wèn)題,或確定另一個(gè)函數(shù)名。


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

上一篇: 下一篇: