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

目錄 搜尋
目錄 前言 1. 一般信息 1.1. 關于本手冊 1.2. 本手冊采用的慣例 1.3. MySQL AB概述 1.4. MySQL數(shù)據庫管理系統(tǒng)概述 1.4.1. MySQL的歷史 1.4.2. MySQL的的主要特性 1.4.3. MySQL穩(wěn)定性 1.4.4. MySQL表最大能達到多少 1.4.5. 2000年兼容性 1.5. MaxDB數(shù)據庫管理系統(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有關的鏈接 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標準的兼容性 1.8.1. MySQL遵從的標準是什么 1.8.2. 選擇SQL模式 1.8.3. 在ANSI模式下運行MySQL 1.8.4. MySQL對標準SQL的擴展 1.8.5. MySQL與標準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校驗和或GnuPG驗證軟件包的完整性 2.1.5. 安裝布局 2.2. 使用二進制分發(fā)版的標準MySQL安裝 2.3. 在Windows上安裝MySQL 2.3.1. Windows系統(tǒng)要求 2.3.2. 選擇安裝軟件包 2.3.3. 用自動安裝器安裝MySQL 2.3.4. 使用MySQL安裝向導 2.3.5. 使用配置向導 2.3.6. 通過非安裝Zip文件安裝MySQL 2.3.7. 提取安裝檔案文件 2.3.8. 創(chuàng)建選項文件 2.3.9. 選擇MySQL服務器類型 2.3.10. 首次啟動服務器 2.3.11. 從Windows命令行啟動MySQL 2.3.12. 以Windows服務方式啟動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. 典型配置選項 2.8.3. 從開發(fā)源碼樹安裝 2.8.4. 處理MySQL編譯問題 2.8.5. MIT-pthreads注意事項 2.8.6. 在Windows下從源碼安裝MySQL 2.8.7. 在Windows下編譯MySQL客戶端 2.9. 安裝后的設置和測試 2.9.1. Windows下安裝后的過程 2.9.2. Unix下安裝后的過程 2.9.3. 使初始MySQL賬戶安全 2.10. 升級MySQL 2.10.1. 從5.0版升級 2.10.2. 升級授權表 2.10.3. 將MySQL數(shù)據庫拷貝到另一臺機器 2.11. 降級MySQL 2.12. 具體操作系統(tǒng)相關的注意事項 2.12.1. Linux注意事項 2.12.2. Mac OS X注意事項 2.12.3. Solaris注意事項 2.12.4. BSD注意事項 2.12.5. 其它Unix注意事項 2.12.6. OS/2注意事項 2.13. Perl安裝注意事項 2.13.1. 在Unix中安裝Perl 2.13.2. 在Windows下安裝ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的問題 3. 教程 3.1. 連接與斷開服務器 3.2. 輸入查詢 3.3. 創(chuàng)建并使用數(shù)據庫 3.3.1. 創(chuàng)建并選擇數(shù)據庫 3.3.2. 創(chuàng)建表 3.3.3. 將數(shù)據裝入表中 3.3.4. 從表檢索信息 3.4. 獲得數(shù)據庫和表的信息 NoName 3.6. 常用查詢的例子 3.6.1. 列的最大值 3.6.2. 擁有某個列的最大值的行 3.6.3. 列的最大值:按組 3.6.4. 擁有某個字段的組間最大值的行 3.6.5. 使用用戶變量 3.6.6. 使用外鍵 3.6.7. 根據兩個鍵搜索 3.6.8. 根據天計算訪問量 3.6.9. 使用AUTO_INCREMENT 3.7. 孿生項目的查詢 3.7.1. 查找所有未分發(fā)的孿生項 3.7.2. 顯示孿生對狀態(tài)的表 3.8. 與Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 調用MySQL程序 4.3. 指定程序選項 4.3.1. 在命令行上使用選項 4.3.2. 使用選項文件 4.3.3. 用環(huán)境變量指定選項 4.3.4. 使用選項設置程序變量 5. 數(shù)據庫管理 5.1. MySQL服務器和服務器啟動腳本 5.1.1. 服務器端腳本和實用工具概述 5.1.2. mysqld-max擴展MySQL服務器 5.1.3. mysqld_safe:MySQL服務器啟動腳本 5.1.4. mysql.server:MySQL服務器啟動腳本 5.1.5. mysqld_multi:管理多個MySQL服務器的程序 5.2. mysqlmanager:MySQL實例管理器 5.2.1. 用MySQL實例管理器啟動MySQL服務器 5.2.2. 連接到MySQL實例管理器并創(chuàng)建用戶賬戶 5.2.3. MySQL實例管理器命令行選項 5.2.4. MySQL實例管理器配置文件 5.2.5. MySQL實例管理器識別的命令 5.3. mysqld:MySQL服務器 5.3.1. mysqld命令行選項 5.3.2. SQL服務器模式 5.3.3. 服務器系統(tǒng)變量 5.3.4. 服務器狀態(tài)變量 5.4. mysql_fix_privilege_tables:升級MySQL系統(tǒng)表 5.5. MySQL服務器關機進程 5.6. 一般安全問題 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻擊者面前保持安全 5.6.3. Mysqld安全相關啟動選項 5.6.4. LOAD DATA LOCAL安全問題 5.7. MySQL訪問權限系統(tǒng) 5.7.1. 權限系統(tǒng)的作用 5.7.2. 權限系統(tǒng)工作原理 5.7.3. MySQL提供的權限 5.7.4. 與MySQL服務器連接 5.7.5. 訪問控制 5.7.6. 訪問控制 5.7.7. 權限更改何時生效 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. 設置賬戶密碼 5.8.6. 使你的密碼安全 5.8.7. 使用安全連接 5.9. 備份與恢復 5.9.1. 數(shù)據庫備份 5.9.2. 示例用備份與恢復策略 5.9.3. 自動恢復 5.9.4. 表維護和崩潰恢復 5.9.5. myisamchk:MyISAM表維護實用工具 5.9.6. 建立表維護計劃 5.9.7. 獲取關于表的信息 5.10. MySQL本地化和國際應用 5.10.1. 數(shù)據和排序用字符集 5.10.2. 設置錯誤消息語言 5.10.3. 添加新的字符集 5.10.4. 字符定義數(shù)組 5.10.5. 字符串比較支持 5.10.6. 多字節(jié)字符支持 5.10.7. 字符集問題 5.10.8. MySQL服務器時區(qū)支持 5.11. MySQL日志文件 5.11.1. 錯誤日志 5.11.2. 通用查詢日志 5.11.3. 二進制日志 5.11.4. 慢速查詢日志 5.11.5. 日志文件維護 5.12. 在同一臺機器上運行多個MySQL服務器 5.12.1. 在Windows下運行多個服務器 5.12.2. 在Unix中運行多個服務器 5.12.3. 在多服務器環(huán)境中使用客戶端程序 5.13. MySQL查詢高速緩沖 5.13.1. 查詢高速緩沖如何工作 5.13.2. 查詢高速緩沖SELECT選項 5.13.3. 查詢高速緩沖配置 5.13.4. 查詢高速緩沖狀態(tài)和維護 6. MySQL中的復制 6.1. 復制介紹 6.2. 復制實施概述 6.3. 復制實施細節(jié) 6.3.1. 復制主線程狀態(tài) 6.3.2. 復制從I/O線程狀態(tài) 6.3.3. 復制從SQL線程狀態(tài) 6.3.4. 復制傳遞和狀態(tài)文件 6.4. 如何設置復制 6.5. 不同MySQL版本之間的復制兼容性 6.6. 升級復制設置 6.6.1. 將復制升級到5.0版 6.7. 復制特性和已知問題 6.8. 復制啟動選項 6.9. 復制FAQ 6.10. 復制故障診斷與排除 6.11. 通報復制缺陷 6.12. 多服務器復制中的Auto-Increment 7. 優(yōu)化 7.1. 優(yōu)化概述 7.1.1. MySQL設計局限與折衷 7.1.2. 為可移植性設計應用程序 7.1.3. 我們已將MySQL用在何處? 7.1.4. MySQL基準套件 7.1.5. 使用自己的基準 7.2. 優(yōu)化SELECT語句和其它查詢 7.2.1. EXPLAIN語法(獲取SELECT相關信息) 7.2.2. 估計查詢性能 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ù)據庫結構 7.4.1. 設計選擇 7.4.2. 使你的數(shù)據盡可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM鍵高速緩沖 7.4.7. MyISAM索引統(tǒng)計集合 7.4.8. MySQL如何計算打開的表 7.4.9. MySQL如何打開和關閉表 7.4.10. 在同一個數(shù)據庫中創(chuàng)建多個表的缺陷 7.5. 優(yōu)化MySQL服務器 7.5.1. 系統(tǒng)因素和啟動參數(shù)的調節(jié) 7.5.2. 調節(jié)服務器參數(shù) 7.5.3. 控制查詢優(yōu)化器的性能 7.5.4. 編譯和鏈接怎樣影響MySQL的速度 7.5.5. MySQL如何使用內存 7.5.6. MySQL如何使用DNS 7.6. 磁盤事宜 7.6.1. 使用符號鏈接 8. 客戶端和實用工具程序 8.1. 客戶端腳本和實用工具概述 8.2. myisampack:生成壓縮、只讀MyISAM表 8.3. mysql:MySQL命令行工具 8.3.1. 選項 8.3.2. mysql命令 8.3.3. 怎樣從文本文件執(zhí)行SQL語句 8.3.4. mysql技巧 8.4. mysqlaccess:用于檢查訪問權限的客戶端 8.5. mysqladmin:用于管理MySQL服務器的客戶端 8.6. mysqlbinlog:用于處理二進制日志文件的實用工具 8.7. mysqlcheck:表維護和維修程序 8.8. mysqldump:數(shù)據庫備份程序 8.9. mysqlhotcopy:數(shù)據庫備份程序 8.10. mysqlimport:數(shù)據導入程序 8.11. mysqlshow-顯示數(shù)據庫、表和列信息 8.12. myisamlog:顯示MyISAM日志文件內容 8.13. perror:解釋錯誤代碼 8.14. replace:字符串替換實用工具 8.15. mysql_zap:殺死符合某一模式的進程 9. 語言結構 9.1. 文字值 9.1.1. 字符串 9.1.2. 數(shù)值 9.1.3. 十六進制值 9.1.4. 布爾值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 數(shù)據庫、表、索引、列和別名 9.2.1. 識別符限制條件 9.2.2. 識別符大小寫敏感性 9.3. 用戶變量 9.4. 系統(tǒng)變量 9.4.1. 結構式系統(tǒng)變量 9.5. 注釋語法 9.6. MySQL中保留字的處理 10. 字符集支持 10.1. 常規(guī)字符集和校對 10.2. MySQL中的字符集和校對 10.3. 確定默認字符集和校對 10.3.1. 服務器字符集和校對 10.3.2. 數(shù)據庫字符集和校對 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. 校對確定較為復雜的一些特殊情況 10.3.12. 校對必須適合字符集 10.3.13. 校對效果的示例 10.4. 字符集支持影響到的操作 10.4.1. 結果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW語句 10.5. Unicode支持 10.6. 用于元數(shù)據的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ù)據庫引擎的列類型 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. 算術操作符 12.4.2. 數(shù)學函數(shù) 12.5. 日期和時間函數(shù) 12.6. MySQL使用什么日歷? 12.7. 全文搜索功能 12.7.1. 布爾全文搜索 12.7.2. 全文搜索帶查詢擴展 12.7.3. 全文停止字 12.7.4. 全文限定條件 12.7.5. 微調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ù)據定義語句 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ù)據操作語句 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實用工具語句 13.3.1. DESCRIBE語法(獲取有關列的信息) 13.3.2. USE語法 13.4. MySQL事務處理和鎖定語句 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事務 13.5. 數(shù)據庫管理語句 13.5.1. 賬戶管理語句 13.5.2. 表維護語句 13.5.3. SET語法 13.5.4. SHOW語法 13.5.5. 其它管理語句 13.6. 復制語句 13.6.1. 用于控制主服務器的SQL語句 13.6.2. 用于控制從服務器的SQL語句 13.7. 用于預處理語句的SQL語法 14. 插件式存儲引擎體系結構 14.1. 前言 14.2. 概述 14.3. 公共MySQL數(shù)據庫服務器層 14.4. 選擇存儲引擎 14.5. 將存儲引擎指定給表 14.6. 存儲引擎和事務 14.7. 插入存儲引擎 14.8. 拔出存儲引擎 14.9. 插件式存儲器的安全含義 15. 存儲引擎和表類型 15.1. MyISAM存儲引擎 15.1.1. MyISAM啟動選項 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啟動選項 15.2.5. 創(chuàng)建InnoDB表空間 15.2.6. 創(chuàng)建InnoDB表 15.2.7. 添加和刪除InnoDB數(shù)據和日志文件 15.2.8. InnoDB數(shù)據庫的備份和恢復 15.2.9. 將InnoDB數(shù)據庫移到另一臺機器上 15.2.10. InnoDB事務模型和鎖定 15.2.11. InnoDB性能調節(jié)提示 15.2.12. 多版本的實施 15.2.13. 表和索引結構 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啟動選項 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. 對處理程序進行實例化處理 16.6. 定義表擴展 16.7. 創(chuàng)建表 16.8. 打開表 16.9. 實施基本的表掃描功能 16.9.1. 實施store_lock()函數(shù) 16.9.2. 實施external_lock()函數(shù) 16.9.3. 實施rnd_init()函數(shù) 16.9.4. 實施info()函數(shù) 16.9.5. 實施extra()函數(shù) 16.9.6. 實施rnd_next()函數(shù) 16.10. 關閉表 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. 多計算機的簡單基礎知識 17.3.1. 硬件、軟件和聯(lián)網 17.3.2. 安裝 17.3.3. 配置 17.3.4. 首次啟動 17.3.5. 加載示例數(shù)據并執(zhí)行查詢 17.3.6. 安全關閉和重啟 17.4. MySQL簇的配置 17.4.1. 從源碼創(chuàng)建MySQL簇 17.4.2. 安裝軟件 17.4.3. MySQL簇的快速測試設置 17.4.4. 配置文件 17.5. MySQL簇中的進程管理 17.5.1. 用于MySQL簇的MySQL服務器進程使用 17.5.2. ndbd,存儲引擎節(jié)點進程 17.5.3. ndb_mgmd,“管理服務器”進程 17.5.4. ndb_mgm,“管理客戶端”進程 17.5.5. 用于MySQL簇進程的命令選項 17.6. MySQL簇的管理 17.6.1. MySQL簇的啟動階段 17.6.2. “管理客戶端”中的命令 17.6.3. MySQL簇中生成的事件報告 17.6.4. 單用戶模式 17.6.5. MySQL簇的聯(lián)機備份 17.7. 使用與MySQL簇的高速互連 17.7.1. 配置MySQL簇以使用SCI套接字 17.7.2. 理解簇互連的影響 17.8. MySQL簇的已知限制 17.9. MySQL簇發(fā)展的重要歷程 17.9.1. MySQL 5.0中的MySQL簇變化 17.9.2. 關于MySQL簇的MySQL 5.1發(fā)展歷程 17.10. MySQL簇常見問題解答 17.11. MySQL簇術語表 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ū)維護 18.3.4. 獲取關于分區(qū)的信息 19. MySQL中的空間擴展 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ù)據格式 19.3.1. 著名的文本(WKT)格式 19.3.2. 著名的二進制(WKB)格式 19.4. 創(chuàng)建具備空間功能的MySQL數(shù)據庫 19.4.1. MySQL空間數(shù)據類型 19.4.2. 創(chuàng)建空間值 19.4.3. 創(chuàng)建空間列 19.4.4. 填充空間列 19.4.5. 獲取空間數(shù)據 19.5. 分析空間信息 19.5.1. Geometry格式轉換函數(shù) 19.5.2. Geometry函數(shù) 19.5.3. 從已有Geometry創(chuàng)建新Geometry的函數(shù) 19.5.4. 測試幾何對象間空間關系的函數(shù) 19.5.5. 關于幾何最小邊界矩形(MBR)的關系 19.5.6. 測試幾何類之間空間關系的函數(shù) 19.6. 優(yōu)化空間分析 19.6.1. 創(chuàng)建空間索引 19.6.2. 使用空間索引 19.7. MySQL的一致性和兼容性 19.7.1. 尚未實施的GIS特性 20. 存儲程序和函數(shù) 20.1. 存儲程序和授權表 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復合語句 20.2.8. DECLARE語句 20.2.9. 存儲程序中的變量 20.2.10. 條件和處理程序 20.2.11. 光標 20.2.12. 流程控制構造 20.3. 存儲程序、函數(shù)、觸發(fā)程序和復制:常見問題 20.4. 存儲子程序和觸發(fā)程序的二進制日志功能 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ù)據庫 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ù)學 24.1. 數(shù)值的類型 24.2. DECIMAL數(shù)據類型更改 24.3. 表達式處理 24.4. 四舍五入 24.5. 精度數(shù)學示例 25. API和庫 25.1. libmysqld,嵌入式MySQL服務器庫 25.1.1. 嵌入式MySQL服務器庫概述 25.1.2. 使用libmysqld編譯程序 25.1.3. 使用嵌入式MySQL服務器時的限制 25.1.4. 與嵌入式服務器一起使用的選項 25.1.5. 嵌入式服務器中尚需完成的事項(TODO) 25.1.6. 嵌入式服務器示例 25.1.7. 嵌入式服務器的許可 25.2. MySQL C API 25.2.1. C API數(shù)據類型 25.2.2. C API函數(shù)概述 25.2.3. C API函數(shù)描述 25.2.4. C API預處理語句 25.2.5. C API預處理語句的數(shù)據類型 25.2.6. C API預處理語句函數(shù)概述 25.2.7. C API預處理語句函數(shù)描述 25.2.8. C API預處理語句方面的問題 25.2.9. 多查詢執(zhí)行的C API處理 25.2.10. 日期和時間值的C API處理 25.2.11. C API線程函數(shù)介紹 25.2.12. C API嵌入式服務器函數(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ā)實用工具 25.9.1. msql2mysql:轉換mSQL程序以用于MySQL 25.9.2. mysql_config:獲取編譯客戶端的編譯選項 26. 連接器 26.1. MySQL Connector/ODBC 26.1.1. MyODBC介紹 26.1.2. 關于ODBC和MyODBC的一般信息 26.1.3. 如何安裝MyODBC 26.1.4. 在Windows平臺上從二進制版本安裝MyODBC 26.1.5. I在Unix平臺上從二進制版本安裝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連接相關的事宜 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應用步驟 26.1.16. MyODBC API引用 26.1.17. MyODBC數(shù)據類型 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體系結構 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. 運行Junit測試 26.4.5. 作為JDBC驅動程序的一部分運行 26.4.6. 在Java對象中運行 26.4.7. MysqldResource API 26.4.8. 在JMX代理(custom)中運行 26.4.9. 部署在標準的JMX代理環(huán)境下 (JBoss) 26.4.10. 安裝 27. 擴展MySQL 27.1. MySQL內部控件 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. 如何確定導致問題的原因 A.2. 使用MySQL程序時的常見錯誤 A.2.1. 拒絕訪問 A.2.2. 無法連接到[local] MySQL服務器 A.2.3. 客戶端不支持鑒定協(xié)議 A.2.4. 輸入密碼時出現(xiàn)密碼錯誤 NoName A.2.6. 連接數(shù)過多 A.2.7. 內存溢出 A.2.8. MySQL服務器不可用 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. 與安裝有關的事宜 A.3.1. 與MySQL客戶端庫的鏈接問題 A.3.2. 如何以普通用戶身份運行MySQL A.3.3. 與文件許可有關的問題 A.4. 與管理有關的事宜 A.4.1. 如何復位根用戶密碼 A.4.2. 如果MySQL依然崩潰,應作些什么 A.4.3. MySQL處理磁盤滿的方式 A.4.4. MySQL將臨時文件儲存在哪里 A.4.5. 如何保護或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 時區(qū)問題 A.5. 與查詢有關的事宜 A.5.1. 搜索中的大小寫敏感性 A.5.2. 使用DATE列方面的問題 A.5.3. 與NULL值有關的問題 A.5.4. 與列別名有關的問題 A.5.5. 非事務表回滾失敗 A.5.6. 從相關表刪除行 A.5.7. 解決與不匹配行有關的問題 A.5.8. 與浮點比較有關的問題 A.6. 與優(yōu)化器有關的事宜 A.7. 與表定義有關的事宜 A.7.1. 與ALTER TABLE有關的問題 A.7.2. 如何更改表中的列順序 A.7.3. TEMPORARY TABLE問題 A.8. MySQL中的已知事宜 A.8.1. MySQL中的打開事宜 B. 錯誤代碼和消息 B.1. 服務器錯誤代碼和消息 B.2. 客戶端錯誤代碼和消息 C. 感謝 C.1. MySQL AB處的開發(fā)人 C.2. MySQL貢獻人 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. 調試MySQL服務器 E.1.1. 針對調試編譯MySQL E.1.2. 創(chuàng)建跟蹤文件 E.1.3. 在gdb環(huán)境下調試mysqld E.1.4. 使用堆棧跟蹤 E.1.5. 使用日志文件找出mysqld中的錯誤原因 E.1.6. 如果出現(xiàn)表崩潰,請生成測試案例 E.2. 調試MySQL客戶端 E.3. DBUG軟件包 E.4. 關于RTS線程的注釋 E.5. 線程軟件包之間的差異 F. 環(huán)境變量 G. MySQL正則表達式 H. MySQL中的限制 H.1. 聯(lián)合的限制 I. 特性限制 I.1. 對存儲子程序和觸發(fā)程序的限制 I.2. 對服務器端光標的限制 I.3. 對子查詢的限制 I.4. 對視圖的限制 I.5. 對XA事務的限制 J. GNU通用公共許可 K. MySQL FLOSS許可例外 索引
文字

第19章:MySQL中的空間擴展

目錄

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ù)據格式
19.3.1. 著名的文本(WKT)格式
19.3.2. 著名的二進制(WKB)格式
19.4. 創(chuàng)建具備空間功能的MySQL數(shù)據庫
19.4.1. MySQL空間數(shù)據類型
19.4.2. 創(chuàng)建空間值
19.4.3. 創(chuàng)建空間列
19.4.4. 填充空間列
19.4.5. 獲取空間數(shù)據
19.5. 分析空間信息
19.5.1. Geometry格式轉換函數(shù)
19.5.2. Geometry函數(shù)
19.5.3. 從已有Geometry創(chuàng)建新Geometry的函數(shù)
19.5.4. 測試幾何對象間空間關系的函數(shù)
19.5.5. 關于幾何最小邊界矩形(MBR)的關系
19.5.6. 測試幾何類之間空間關系的函數(shù)
19.6. 優(yōu)化空間分析
19.6.1. 創(chuàng)建空間索引
19.6.2. 使用空間索引
19.7. MySQL的一致性和兼容性
19.7.1. 尚未實施的GIS特性

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

本章介紹了下述議題:

·???????? OpenGIS幾何模型中這些空間擴展的基礎。

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

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

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

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

如果在MySQL空間擴展的使用方面有任何問題,可在我們網站的GIS論壇 中討論。

19.1.?前言

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

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

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

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

·???????? 實體,如山、池溏、城市。

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

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

有些文件采用術語地理空間特征來指代地理特征。

幾何是另一個表示地理特征的術語。最初,單詞幾何表示的是對大地的測量。來自制圖學的另一個含義指的是制圖人員用于繪制世界地圖的地理特征。

本章將所有這些術語當作同義詞對待:地理特征、地理空間特征、或幾何。最常使用的術語是幾何。

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

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

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

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

·???????? 屬于某種幾何類。

19.2.1.?Geometry類的層次

幾何類定義了下述層次:

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

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

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

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

·???????? Line

·???????? LinearRing

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

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

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

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

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

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

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

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

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

Geometry是一種基本類。它是一種抽象類。Geometry的可實例化子類限制為可在2維坐標空間中存在的0、1、2維幾何對象。所有的可實例化幾何類是這樣定義的,從而使得幾何類的實例從拓撲意義上講是閉合的(也就是說,所有定義的幾何類包含其邊界)。

基本Geometry類具有關于PointCurveSurfaceGeometryCollection的子類:

·???????? Point表示0維對象。

·???????? Curve表示1維對象,具有子類LineString,以及次級子類LineLinearRing

·???????? Surface是為2維對象設計的,具有子類Polygon

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

GeometryCurve、SurfaceMultiCurveMultiSurface定義為非實例化類。它們?yōu)槠渥宇惗x了公用方法集合,而且是為擴展而包含在內的。

PointLineString、Polygon、GeometryCollection、MultiPointMultiLineStringMultiPolygon定義為可實例化類。

19.2.2.?類Geometry

Geometry是層次結構的根類。它是一種非實例化類,但具有很多屬性,這些屬性對由任何Geometry子類創(chuàng)建的所有幾何值來說是共同的。下面介紹了這些屬性(尤其是具有自己特殊屬性的子類)。

Geometry屬性

Geometry值具有下述屬性:

·???????? type(類型)。每個geometry屬于層次結構中可實例化類之一。

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

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

·???????? 它在其空間坐標系統(tǒng)中的coordinates(坐標),表示為雙精度數(shù)值(8字節(jié))。所有的非空幾何對象至少包含一對坐標(X、Y)??諑缀螌ο蟛缓鴺恕?/p>

坐標與SRID相關。例如,在不同的坐標系內,兩個對象之間的距離會有所不同,即使這兩個對象具有相同的坐標也同樣。這是因為,平面坐標系中的距離和地心坐標系(地球表面上的坐標)中的距離是不同的事項。

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

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

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

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

·???????? 無論值是簡單的非簡單的。類型(LineString、MultiPointMultiLineString)的幾何值或是簡單的,或是非簡單的。每個類型決定了其自己的簡單或非簡單聲明。

·???????? 無論值是封閉的非封閉的。類型(LineStringMultiPoint)的幾何值或是封閉的,或是非封閉的。每個類型決定了其自己的封閉或非封閉聲明。

·???????? 無論值是空的非空的。如果沒有任何點,幾何對象是空的。空幾何對象的內部、外部和邊界未定義(也就是說,它們由Null值表示)??盏膸缀螌ο蠖x為總是簡單的,面積為0。

·???????? dimension(維數(shù))。幾何對象的維數(shù)為?1、012

o??????? ?1用于空幾何對象。

o??????? 0用于無長度、無面積的幾何對象。

o??????? 1用于具有非0長度和0面積的幾何對象。

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

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

19.2.3.?類Point

Point(點)指的是代表坐標空間中單個位置的幾何類。

Point示例

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

·???????? 在城市地圖上,Point對象可代表1個公共汽車站。

Point屬性

·???????? X-坐標值。

·???????? Y-坐標值。

·???????? Point定義為0維幾何對象。

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

19.2.4.?類Curve

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

Curve屬性

·???????? Curve具有其點的坐標。

·???????? Curve定義為1維幾何對象。

·???????? 如果未通過相同的點兩次,Curve就是簡單的。

·???????? 如果其起點等于其終點,Curve就是封閉的。

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

·???????? 非封閉Curve的邊界由其兩個端點構成。

·???????? 簡單且封閉的CurveLinearRing。

19.2.5.?類LineString

LineString是具有點之間線性內插特性的Curve

LineString示例

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

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

LineString屬性

·???????? LineString具有線段的坐標,由每個連續(xù)的點對(兩點)定義。

·???????? 如果僅包含兩點,LineStringLine。

·???????? 如果它既是簡單的也是封閉的,LineStringLinearRing。

19.2.6.?類Surface

Surface是一種2維幾何對象。它是一種非實例化類。其唯一的可實例化子類是Polygon.

Surface屬性

·???????? Surface定義為2維幾何對象。

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

·???????? 簡單Surface的邊界是一組與其內部和外部邊界對應的封閉曲線的集合。

19.2.7.?類Polygon

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

Polygon示例

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

Polygon聲明

·???????? Polygon的邊界由一組構成其外部邊界和比內部邊界的LinearRing歸向集合構成(即,簡單且封閉的LineString對象)。

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

·???????? Polygon沒有線、尖峰或穿孔。

·???????? Polygon有由連接點集合構成的內部。

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

前述聲明使得Polygon成為簡單的幾何對象。

19.2.8.?類GeometryCollection

GeometryCollection是由1個或多個任意類幾何對象構成的幾何對象。

GeometryCollection中的所有元素必須具有相同的空間參考系(即相同的坐標系)。對GeometryCollection的元素無任何限制,但下面介紹的GeometryCollection的子類會限制其成員。這類限制可能基于:

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

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

·???????? 對元素間空間交迭程度的限制。

19.2.9.?類MultiPoint

MultiPoint是一種由Point元素構成的幾何對象集合。這些點未以任何方式連接或排序。

MultiPoint示例

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

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

MultiPoint屬性

·???????? MultiPoint0維幾何對象。

·???????? 如果沒有兩個Point是相同的(具有等同的坐標值),MultiPoint是簡單的。

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

19.2.10.?類MultiCurve

MultiCurve是一種由Curve元素構成的幾何對象集合。MultiCurve是一種非實例化類。

MultiCurve屬性

·???????? MultiCurve1維幾何對象。

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

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

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

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

19.2.11.?類MultiLineString

MultiLineString是一種由 LineString元素構成的MultiCurve幾何對象集合。

MultiLineString示例

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

19.2.12.?類MultiSurface

MultiSurface是一種由Surface元素構成的幾何對象集合。MultiSurface是一種非實例化類。其唯一的可實例化子類是MultiPolygon。

MultiSurface聲明

·???????? 2MultiSurface面沒有相交的內部。

·???????? 2MultiSurface元素具有最多在有限點上相交的邊界。

19.2.13.?類MultiPolygon

MultiPolygon是一種由Polygon元素構成的幾何對象集合。

MultiPolygon示例

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

MultiPolygon聲明

·???????? MultiPolygon沒有內部相交的的2Polygon元素。

·???????? MultiPolygon沒有2個交叉的Polygon元素(前述聲明也禁止交叉),也沒有在無數(shù)點處相接觸的2Polugon元素。

·???????? MultiPolygon不能含有有斷開的線、尖峰或穿孔。MultiPolygon是一種正常的封閉點集合。

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

MultiPolygon屬性

·???????? MultiPolygon2維幾何對象。

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

·???????? MultiPolygon邊界中的每個Curve準確位于1Polygon元素的邊界內。

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

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

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

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

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

從其內部看,MySQL以不完全等同于WKTWKB的格式保存幾何對象值。

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

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

幾何對象WKT表示的示例:

·???????? Point

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

注意,指定點坐標時不使用分隔用逗號。

·???????? 具有4個點的LineString

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

注意,點坐標對采用逗號隔開。

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

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

·???????? 具有三個Point值的MultiPoint

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

·???????? 具有2LineString值的MultiLineString

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

·???????? 具有2Polygon值的MultiPolygon

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

·???????? 2Point值和1LineString構成的GeometryCollection

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

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

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

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

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

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

例如,與POINT(1 1)對應的WKB值由下述21字節(jié)序列構成(在此,每個字節(jié)由2個十六進制數(shù)值表示):

0101000000000000000000F03F000000000000F03F

該序列可分為下述部分:

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

表示如下:

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

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

·???????? Point值具有XY坐標,每個值均用雙精度值表示。

對于更復雜幾何值的WKB值,它們是由更復雜的數(shù)據結構表示的,詳情請參見OpenGIS規(guī)范。

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

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

19.4.1.?MySQL空間數(shù)據類型

MySQL具有與OpenGIS類對應的數(shù)據類型。某些類型只能保存單個幾何值:

·???????? GEOMETRY

·???????? POINT

·???????? LINESTRING

·???????? POLYGON

GEOMETRY能夠保存任何類型的幾何值。其他的單值類型POINTLINESTRING以及POLYGON只能保存特定幾何類型的值。

其他數(shù)據類型能保存多個值:

·???????? MULTIPOINT

·???????? MULTILINESTRING

·???????? MULTIPOLYGON

·???????? GEOMETRYCOLLECTION

GEOMETRYCOLLECTION能保存任意類型的對象集合。對于其他集合類型,MULTIPOINT、MULTILINESTRING、MULTIPOLYGONGEOMETRYCOLLECTION,僅限于具有特定幾何類型的集合成員。

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標準中定義的WKTWKB函數(shù)創(chuàng)建空間值的方法,以及使用相應MySQL函數(shù)的方法。

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

MySQL提供了眾多以WKT表達式、以及可選的空間參考系IDSRID)為輸入參數(shù)的函數(shù)。它們將返回對應的幾何對象。

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

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

    使用其WKT表示和SRID構造GEOMETRYCOLLECTION值。

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

    使用其WKT表示和SRID構造任何類型的幾何值。

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

    使用其WKT表示和SRID構造LINESTRING值。

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

    使用其WKT表示和SRID構造MULTILINESTRING值。

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

    使用其WKT表示和SRID構造MULTIPOINT值。

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

    使用其WKT表示和SRID構造MULTIPOLYGON值。

  • PointFromText(wkt[,srid])

    使用其WKT表示和SRID構造POINT值。

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

    使用其WKT表示和SRID構造POLYGON值。

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

  • BdMPolyFromText(wkt,srid)

    以包含已關閉LineString值任意集合的WKT格式,從MultiLineString值構造MultiPolygon值。

  • BdPolyFromText(wkt,srid)

    以包含已關閉LineString值任意集合的WKT格式,從MultiLineString值構造Polygon值。

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

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

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

    使用其WKB表示和SRID構造GEOMETRYCOLLECTION值。

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

    使用其WKB表示和SRID構造任意類型的幾何值。

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

    使用其WKB表示和SRID構造LINESTRING值。

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

    使用其WKB表示和SRID構造MULTILINESTRING值。

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

    使用其WKB表示和SRID構造MULTIPOINT值。

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

    使用其WKB表示和SRID構造MULTIPOLYGON值。

  • PointFromWKB(wkb[,srid])

    使用其WKB表示和SRID構造POINT值。

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

    使用其WKB表示和SRID構造POLYGON值。

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

  • BdMPolyFromWKB(wkb,srid)

    以包含已關閉LineString值任意集合的WKB格式,從MultiLineString值構造MultiPolygon值。

  • BdPolyFromWKB(wkb,srid)

    以包含已關閉LineString值任意集合的WKB格式,從MultiLineString值構造Polygon值。

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

注釋:MySQL未實施本節(jié)所列的函數(shù)。

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

    構造WKB GeometryCollection。如果任何參量不是構造良好的幾何對象WKB表達式,返回值為NULL

  • LineString(pt1,pt2,...)

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

  • MultiLineString(ls1,ls2,...)

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

  • MultiPoint(pt1,pt2,...)

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

  • MultiPolygon(poly1,poly2,...)

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

  • Point(x,y)

    使用其坐標構造WKB Point。

  • Polygon(ls1,ls2,...)

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

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

MySQL提供了為幾何類型創(chuàng)建空間列的標準方法,例如,使用CREATE TABLEALTER TABLE。目前,僅對MyISAM標支持空間列。

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

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

·???????? 使用ALTER TABLE語句在已有表中增加空間列,或將空間列從已有表中刪除:

·??????????????? 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ù)據填充它們。

值應以內部幾何格式保存,但你也能將其從WKTWKB格式轉換為內部幾何格式。在下面的示例中,介紹了通過將WKT值轉換為內部幾何格式以便將幾何值插入表中的方法。

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

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

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

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

在下面的示例中,將多個復雜的幾何值插入到了表中:

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()來創(chuàng)建幾何值。你也可以使用與類型相關的函數(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));

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

·???????? 用十六進制文字語法插入POINT(1 1)值:

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

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

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

其他編程接口或許也支持類似的占位符機制。

C程序中,可以使用mysql_real_escape_string()轉義二進制值,并將結果包含在將發(fā)送至服務器的查詢字符串。請參見25.2.3.52節(jié),“mysql_real_escape_string()”

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

19.4.5.1. 以內部格式獲取空間數(shù)據
19.4.5.2. 以WKT格式獲取空間數(shù)據
19.4.5.3. 以格式獲取空間數(shù)據
對于表中保存的幾何值,能夠以內部格式獲取。你也能將其轉換為WKTWKB格式。

19.4.5.1.?以內部格式獲取空間數(shù)據

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

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

AsText()函數(shù)能夠將幾何值從內部格式轉換為WKT字符串。
SELECT AsText(g) FROM geom;

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

AsBinary()函數(shù)能夠將幾何值從內部格式轉換為包含WKB值的BLOB
SELECT AsBinary(g) FROM geom;

19.5.?分析空間信息

19.5.1. Geometry格式轉換函數(shù)
19.5.2. Geometry函數(shù)
19.5.3. 從已有Geometry創(chuàng)建新Geometry的函數(shù)
19.5.4. 測試幾何對象間空間關系的函數(shù)
19.5.5. 關于幾何最小邊界矩形(MBR)的關系
19.5.6. 測試幾何類之間空間關系的函數(shù)
用值填充了空間列后,即可查詢和分析它們。MySQL提供了一組在空間數(shù)據上執(zhí)行各種操作的函數(shù)。根據它們所執(zhí)行的操作類型,可以將這些函數(shù)分為四種主要類別:

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

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

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

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

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

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

·???????? 以任何語言編寫的、支持MySQL客戶端API的應用程序。

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

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

  • AsBinary(g)

    將采用內部幾何格式的值轉換為其WKB表示,并返回二進制結果。

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

    將采用內部幾何格式的值轉換為其WKT表示,并返回字符串結果。

    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表示轉換為內部幾何格式,并返回結果。也支持多種與類型相關的函數(shù),如PointFromText()LineFromText()請參見19.4.2.1節(jié),“使用WKT函數(shù)創(chuàng)建Geometry(幾何)值”

  • GeomFromWKB(wkb[,srid])

    將二進制值從其WKB表示轉換為內部幾何格式,并返回結果。也支持多種與類型相關的函數(shù),如PointFromWKB()LineFromWKB(),請參見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ù)
屬于該組的每個函數(shù)均將幾何值作為其參量,并返回幾何值的定性或定量屬性。某些函數(shù)限制了其參量類型。如果參量是不正確的幾何類型,這類函數(shù)將返回NULL。例如,如果對象類型既不是Polygon也不是MultiPolygonArea()將返回NULL。

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

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

  • Dimension(g)

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

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

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

    多邊形(polygon)是由邊界框的頂點定義的:
    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)

    以字符串形式返回幾何類型的名稱,幾何實例g是幾何類型的成員。該名稱與可實例化幾何子類之一對應。

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

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

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

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

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

  • Boundary(g)

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

  • IsEmpty(g)

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

  • IsSimple(g)

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

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

    對于本章前面介紹的每個可實例化幾何類,均包含特定的條件,這類條件會使類實例被分類為非簡單的。

19.5.2.2.?Point函數(shù)
?

PointXY坐標構成,可使用下述函數(shù)獲得它們:

  • X(p)

    以雙精度數(shù)值返回點pX坐標值。

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

    以雙精度數(shù)值返回點pY坐標值。

    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的特定點,計數(shù)它所包含的點數(shù),或獲取其長度。

  • EndPoint(ls)

    返回LineString1s的最后一個點的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在相關的空間參考系中的長度。

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

    返回LineString1s中的點數(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個點。點編號從1開始。

    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的第一個點的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ù):

  • IsRing(ls)

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

19.5.2.4.?MultiLineString函數(shù)

  • GLength(mls)

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

    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()值對m1s中的每個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的面積,根據在其空間參考系中的測量值。

    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個內環(huán)。環(huán)編號從1開始。

    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的內環(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的面積,根據在其空間參考系中的測量結果。

    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ù):

  • Centroid(mpoly)

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

  • PointOnSurface(mpoly)

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

19.5.2.7.?GeometryCollection函數(shù)

  • GeometryN(gc,n)

    返回GeometryCollectiongc中第n個幾何對象。幾何對象的編號從1開始。

    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中幾何對象的數(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ù)”中,我們討論了一些可從已有幾何對象構造新幾何對象的函數(shù):

  • Envelope(g)

  • StartPoint(ls)

  • EndPoint(ls)

  • PointN(ls,n)

  • ExteriorRing(poly)

  • InteriorRingN(poly,n)

  • GeometryN(gc,n)

19.5.3.2.?空間操作符

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

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

  • Buffer(g,d)

    返回幾何對象,該對象代表所有距幾何值g的距離小于或等于d的所有點。

  • ConvexHull(g)

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

  • Difference(g1,g2)

    返回幾何對象,該對象表示了幾何值g1g2的點集合差異。

  • Intersection(g1,g2)

    返回幾何對象,該對象表示了幾何值g1g2的點集合交集。

  • SymDifference(g1,g2)

    返回幾何對象,該對象表示了幾何值g1g2的點集合對稱差。

  • Union(g1,g2)

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

19.5.4.?測試幾何對象間空間關系的函數(shù)

這些節(jié)中所介紹的函數(shù)以2個幾何對象作為輸入參數(shù),并返回它們之間的定量或定性關系。

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

MySQL提供了一些可測試兩個幾何對象g1g2最小邊界矩形之間關系的函數(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以指明兩個幾何變量g1g2的最小邊界矩形是否不相交。

  • MBREqual(g1,g2)

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

  • MBRIntersects(g1,g2)

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

  • MBROverlaps(g1,g2)

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

  • MBRTouches(g1,g2)

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

  • MBRWithin(g1,g2)

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

    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.?測試幾何類之間空間關系的函數(shù)

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

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

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

  • Contains(g1,g2)

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

  • Crosses(g1,g2)

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

    術語“空間上交叉”指的是2個給定幾何對象之間的空間關系,它具有下述屬性:

    o??????? 2個結合對象交叉。

    o??????? 其交叉結果將導致其維數(shù)小于兩個給定幾何對象最大維數(shù)的幾何對象。

    o??????? 其交叉不等于兩個幾何對象中的任何1個。

  • Disjoint(g1,g2)

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

  • Distance(g1,g2)

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

  • Equals(g1,g2)

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

  • Intersects(g1,g2)

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

  • Overlaps(g1,g2)

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

  • Related(g1,g2,pattern_matrix)

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

  • Touches(g1,g2)

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

  • Within(g1,g2)

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

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

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

·???????? 搜索包含給定點的所有對象的Point查詢。

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

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

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

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

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

·???????? 對于CREATE TABLE

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

·???????? 對于ALTER TABLE

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

·???????? 對于CREATE INDEX

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

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

要想撤銷空間索引,可使用ALTER TABLEDROP INDEX

·???????? 對于ALTER TABLE

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

·???????? 對于DROP INDEX

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

示例:假定表geom包含32000以上的幾何對象,它們保存在類型為GEOMETRY的列g中。該表還有用于保存對象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上添加空間索引,可使用下述語句:

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)化程序將調查可用的空間索引是否能包含在使用某些函數(shù)的查詢搜索中,如WHERE子句中的MBRContains()MBRWithin()函數(shù)。例如,假定我們打算找出位于給定矩形中的所有對象:

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來檢查該查詢的執(zhí)行方式(ID列已被刪除,以便輸出能更好地與頁匹配)

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)

讓我們檢查一下在沒有空間索引的情況下會出現(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語句,忽略空間鍵:

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)

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

在未來的版本中,空間索引也可能會用于優(yōu)化其他函數(shù)。請參見19.5.4節(jié),“測試幾何對象間空間關系的函數(shù)”。

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

19.7.1. 尚未實施的GIS特性

19.7.1.?尚未實施的GIS特性

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

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

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

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


這是MySQL參考手冊的翻譯版本,關于MySQL參考手冊,請訪問dev.mysql.com。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。

上一篇: 下一篇: