首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

中國行政區劃完整資料庫:MySQL 省市縣三級聯動腳本(含港澳台)

     編輯:MySQL 綜合教學

資料來源與適用場景

本資料集包含中國大陸所有省份、地級市、區縣及鄉鎮街道的標準行政區劃代碼,並涵蓋港澳台地區。資料採用標準的三級層級結構(省→市→區縣),每條記錄包含 codeid(行政區劃代碼)、parentid(父級代碼)、cityName(名稱)三個欄位,完美支援前端三級聯動選單、物流地址選擇、用戶註冊地址等業務場景。

資料表結構定義

CREATE TABLE `base_area` (
  `codeid` MEDIUMINT(12) NOT NULL COMMENT '行政區劃代碼',
  `parentid` INT(12) NOT NULL COMMENT '父級代碼,頂級為 0',
  `cityName` VARCHAR(180) NOT NULL COMMENT '區劃名稱',
  PRIMARY KEY (`codeid`),
  KEY `idx_parentid` (`parentid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='中國行政區劃表';

資料特點說明

  • 層級清晰: 省級 parentid=0,市級指向省代碼,區縣指向市代碼
  • 代碼規範: 採用國家統計局標準 6 位數字代碼(如 110000 北京市,110101 東城區)
  • 完整覆蓋: 含 34 個省級行政區、333 個地級市、2844 個區縣,共計 3200+ 條記錄
  • 特殊區劃: 包含自治州、自治縣、特區、林區等特殊行政單位
  • 港澳台納入: 代碼 71/81/91 分別對應台灣、香港、澳門

快速查詢範例

1. 獲取所有省份

SELECT `codeid`, `cityName` FROM `base_area` WHERE `parentid` = 0 ORDER BY `codeid`;

2. 根據省份獲取城市(如廣東省 44)

SELECT `codeid`, `cityName` FROM `base_area` WHERE `parentid` = 44 ORDER BY `codeid`;

3. 根據城市獲取區縣(如廣州市 4401)

SELECT `codeid`, `cityName` FROM `base_area` WHERE `parentid` = 4401 ORDER BY `codeid`;

4. 遞歸查詢完整路徑(以東城區 110101 為例)

-- MySQL 8.0+ CTE 遞歸查詢
WITH RECURSIVE `area_path` AS (
  SELECT `codeid`, `parentid`, `cityName`, 1 AS `level`
  FROM `base_area` WHERE `codeid` = 110101
  UNION ALL
  SELECT b.`codeid`, b.`parentid`, b.`cityName`, a.`level` + 1
  FROM `base_area` b
  JOIN `area_path` a ON b.`codeid` = a.`parentid`
)
SELECT `cityName` FROM `area_path` ORDER BY `level` DESC;

完整資料腳本下載

因篇幅限制,完整的 3200+ 條 INSERT 語句不在本文展示。您可以通過以下方式獲取:

  • GitHub Gist: china-area-complete.sql(建議右鍵另存為)
  • 直接複製: 本文原始資料區塊包含完整腳本,可直接複製執行

注意事項與維護建議

  1. 編碼統一: 資料庫、表、連接均建議使用 utf8mb4,避免生僻字(如「垍」、「鉛」)顯示異常
  2. 版本更新: 行政區劃每年有微調(如撤縣設區),建議每年從 民政部官網 獲取最新代碼更新
  3. 索引優化: 高頻查詢場景下,parentid 必須建立索引;若需按名稱模糊搜尋,可在 cityName 上建全文索引
  4. 軟刪除: 歷史區劃代碼建議保留並增加 is_deleted 欄位,避免業務歷史資料關聯斷裂

擴展應用:行政區劃樹形結構生成

前端常需樹形結構(如 Element UI el-cascader、Ant Design Cascader)。後端可用遞歸或單次查詢+記憶體組裝生成 JSON:

-- 獲取所有資料,應用層組裝樹形結構(效能優於遞歸查詢)
SELECT `codeid`, `parentid`, `cityName` FROM `base_area` ORDER BY `parentid`, `codeid`;

應用層組裝邏輯(Python 範例):

def build_tree(rows, parent_id=0):
    tree = []
    for row in rows:
        if row['parentid'] == parent_id:
            children = build_tree(rows, row['codeid'])
            node = {'value': row['codeid'], 'label': row['cityName']}
            if children:
                node['children'] = children
            tree.append(node)
    return tree

結語

這份行政區劃資料庫是眾多國內業務系統的基礎設施。正確導入、建立索引、定期更新,能為地址選擇、物流路由、數據分析等場景提供穩固的數據支撐。若發現資料缺漏或代碼變更,歡迎提交 Issue 共同維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved