最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL?索引、事務與約束操作命令大全

 更新時間:2026年04月27日 08:20:51   作者:彩票管理中心秘書長  
本文主要介紹了MySQL?索引、事務與約束操作命令大全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

說明:本文涵蓋 MySQL 中三類重要功能:索引(提高查詢性能)、事務(保證數(shù)據(jù)一致性)、約束(保證數(shù)據(jù)完整性)。每條命令附語法和實用示例,覆蓋 MySQL 5.7 和 8.0 的常見特性。

一、索引操作

索引用于加速數(shù)據(jù)檢索,但會占用額外存儲空間并影響寫性能。

1.1 創(chuàng)建索引

1.1.1 使用 CREATE INDEX 語句

語法

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
    ON 表名 (列名 [(長度)] [ASC | DESC], ...)
    [USING {BTREE | HASH}]
    [索引選項];

示例

-- 普通索引
CREATE INDEX idx_username ON users(username);
-- 唯一索引(不允許重復值)
CREATE UNIQUE INDEX idx_email ON users(email);
-- 全文索引(適用于 MyISAM 或 InnoDB MySQL 5.6+)
CREATE FULLTEXT INDEX ft_content ON articles(title, content);
-- 空間索引(用于地理數(shù)據(jù),需 MyISAM/InnoDB 支持)
CREATE SPATIAL INDEX idx_location ON places(location);
-- 復合索引(多列)
CREATE INDEX idx_name_age ON users(last_name, first_name, age);
-- 前綴索引(僅索引字符串的前N個字符)
CREATE INDEX idx_title_prefix ON books(title(20));
-- 降序索引(MySQL 8.0 真正支持)
CREATE INDEX idx_created_desc ON orders(created_at DESC);
-- 指定索引類型(BTREE 是默認)
CREATE INDEX idx_hash ON temp_table(id) USING HASH;

1.1.2 在 CREATE TABLE 時創(chuàng)建索引

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100) UNIQUE,
    last_login DATETIME,
    INDEX idx_last_login (last_login),
    FULLTEXT INDEX ft_name (name)
);

1.1.3 使用 ALTER TABLE 創(chuàng)建索引

-- 添加主鍵索引(只能通過 ALTER 或 CREATE TABLE)
ALTER TABLE users ADD PRIMARY KEY (id);
-- 添加唯一索引
ALTER TABLE users ADD UNIQUE INDEX idx_email (email);
-- 添加普通索引
ALTER TABLE users ADD INDEX idx_name (name);
-- 添加全文索引
ALTER TABLE articles ADD FULLTEXT INDEX ft_body (body);
-- 添加空間索引
ALTER TABLE places ADD SPATIAL INDEX idx_geom (geom);

1.2 查看索引

-- 查看表的所有索引
SHOW INDEX FROM 表名;
SHOW INDEX FROM 表名\G   -- 垂直顯示更詳細
-- 從information_schema中查詢
SELECT * FROM INFORMATION_SCHEMA.STATISTICS 
WHERE TABLE_SCHEMA = '數(shù)據(jù)庫名' AND TABLE_NAME = '表名';

1.3 刪除索引

-- 使用 DROP INDEX 語句
DROP INDEX 索引名 ON 表名;
-- 使用 ALTER TABLE 刪除
ALTER TABLE 表名 DROP INDEX 索引名;
-- 刪除主鍵索引(特殊)
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 刪除外鍵索引(實際刪除的是外鍵約束,索引可能保留)
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名;

示例

DROP INDEX idx_username ON users;
ALTER TABLE users DROP INDEX idx_email;
ALTER TABLE orders DROP PRIMARY KEY;   -- 刪除主鍵

1.4 修改索引

MySQL 沒有直接“修改索引”的命令,通常采用“刪除后重建”的方式:

-- 先刪除舊索引
DROP INDEX idx_old ON table_name;
-- 再創(chuàng)建新索引
CREATE INDEX idx_new ON table_name (column1, column2);

如果只是想重命名索引(MySQL 5.7+ 支持 ALTER TABLE 重命名):

ALTER TABLE 表名 RENAME INDEX 舊索引名 TO 新索引名;

-- 示例
ALTER TABLE users RENAME INDEX idx_username TO idx_uname;

1.5 索引可見性(MySQL 8.0)

可以設置索引對優(yōu)化器是否可見,而不實際刪除索引。

-- 設置索引不可見(優(yōu)化器忽略該索引)
ALTER TABLE 表名 ALTER INDEX 索引名 INVISIBLE;

-- 設置索引可見
ALTER TABLE 表名 ALTER INDEX 索引名 VISIBLE;

-- 示例
ALTER TABLE users ALTER INDEX idx_email INVISIBLE;

1.6 強制使用或忽略索引(查詢提示)

-- 強制使用索引
SELECT * FROM users FORCE INDEX (idx_username) WHERE username = 'john';

-- 忽略索引
SELECT * FROM users IGNORE INDEX (idx_username) WHERE username = 'john';

-- 使用索引(建議,優(yōu)化器可自行決定)
SELECT * FROM users USE INDEX (idx_username) WHERE username = 'john';

二、事務操作

事務保證一組操作要么全部成功(COMMIT),要么全部失敗回滾(ROLLBACK),滿足 ACID 特性。

2.1 事務控制語句

命令說明
START TRANSACTION 或 BEGIN顯式開啟一個新事務
COMMIT提交事務,使更改永久生效
ROLLBACK回滾事務,撤銷當前事務中的所有更改
SAVEPOINT 名稱在事務中設置保存點
ROLLBACK TO SAVEPOINT 名稱回滾到指定保存點
RELEASE SAVEPOINT 名稱刪除保存點
`SET autocommit = {01}`禁用(0)/啟用(1)自動提交

2.2 自動提交模式

MySQL 默認 autocommit = 1,每條 DML 自動提交。要使用多語句事務,需先禁用自動提交或顯式 START TRANSACTION。

-- 查看當前自動提交設置
SELECT @@autocommit;

-- 關(guān)閉自動提交(僅當前會話)
SET autocommit = 0;

-- 開啟自動提交
SET autocommit = 1;

2.3 基本事務示例

-- 方式一:使用 START TRANSACTION
START TRANSACTION;
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;   -- 或 ROLLBACK

-- 方式二:使用 BEGIN
BEGIN;
    INSERT INTO logs (user_id, action) VALUES (1, '轉(zhuǎn)賬');
    SAVEPOINT sp1;
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
    -- 發(fā)現(xiàn)錯誤,回滾到保存點
    ROLLBACK TO SAVEPOINT sp1;
COMMIT;   -- INSERT 已提交,UPDATE 被撤銷

2.4 保存點(SAVEPOINT)

START TRANSACTION;
    INSERT INTO orders (user_id, amount) VALUES (1, 500);
    SAVEPOINT after_insert;
    
    UPDATE inventory SET stock = stock - 5 WHERE product_id = 10;
    -- 庫存不足,決定回滾到保存點
    ROLLBACK TO SAVEPOINT after_insert;
    
    -- 可繼續(xù)其他操作
    INSERT INTO order_log (msg) VALUES ('庫存不足,未扣減');
    
    -- 釋放不再需要的保存點
    RELEASE SAVEPOINT after_insert;
COMMIT;

2.5 事務隔離級別

隔離級別影響事務并發(fā)時的可見性。

查看當前隔離級別

-- 全局級
SELECT @@global.transaction_isolation;
-- 會話級
SELECT @@transaction_isolation;

設置隔離級別

-- 設置會話隔離級別
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;  -- MySQL 默認
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

-- 設置全局隔離級別(需要 SUPER 權(quán)限)
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

2.6 鎖語句(輔助事務)

-- 共享鎖(讀鎖)
SELECT * FROM accounts WHERE id = 1 LOCK IN SHARE MODE;

-- 排他鎖(寫鎖)
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;

-- 表鎖(手動)
LOCK TABLES accounts WRITE;
-- 執(zhí)行更新...
UNLOCK TABLES;

2.7 XA 事務(分布式事務)

XA START 'xid1';        -- 開啟 XA 事務
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
XA END 'xid1';
XA PREPARE 'xid1';      -- 準備階段
XA COMMIT 'xid1';       -- 提交
-- 或 XA ROLLBACK 'xid1';

2.8 查看事務信息

-- 查看當前正在運行的事務
SELECT * FROM information_schema.INNODB_TRANSACTION;

-- 查看鎖信息
SELECT * FROM information_schema.INNODB_LOCKS;
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

-- 查看引擎狀態(tài)(包含事務詳情)
SHOW ENGINE INNODB STATUS\G

三、約束操作

約束用于限制表中數(shù)據(jù)的合法性和完整性。

3.1 約束類型概覽

約束類型關(guān)鍵字作用
主鍵約束PRIMARY KEY唯一標識一行,非空且唯一
外鍵約束FOREIGN KEY參照另一表的主鍵,維護引用完整性
唯一約束UNIQUE列值不能重復(可多個 NULL)
檢查約束CHECK限制列值滿足條件(MySQL 8.0.16+ 完整支持)
非空約束NOT NULL列值不能為 NULL
默認約束DEFAULT提供默認值

3.2 主鍵約束(PRIMARY KEY)

創(chuàng)建主鍵

-- 列級定義
CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(50));

-- 表級定義(適合復合主鍵)
CREATE TABLE t2 (
    user_id INT,
    role_id INT,
    PRIMARY KEY (user_id, role_id)
);

-- 為已有表添加主鍵
ALTER TABLE t1 ADD PRIMARY KEY (id);

-- 添加自增屬性
ALTER TABLE t1 MODIFY id INT AUTO_INCREMENT;

刪除主鍵

ALTER TABLE t1 DROP PRIMARY KEY;

?? 如果主鍵列是自增列,需先修改列定義去掉 AUTO_INCREMENT。

3.3 外鍵約束(FOREIGN KEY)

外鍵用于維持兩張表之間的引用完整性。

創(chuàng)建外鍵

-- 建表時定義
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
        ON DELETE CASCADE ON UPDATE RESTRICT
);

-- 帶約束名
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 為已有表添加外鍵
ALTER TABLE orders ADD CONSTRAINT fk_user 
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;

外鍵選項

  • ON DELETE CASCADE:主表記錄刪除,子表相關(guān)記錄自動刪除
  • ON DELETE SET NULL:子表外鍵列設為 NULL
  • ON DELETE RESTRICT / NO ACTION:阻止刪除(默認行為)
  • ON UPDATE CASCADE:主鍵更新時同步更新子表外鍵
  • ON UPDATE SET NULL:主鍵更新時子表外鍵設為 NULL

查看外鍵

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'orders' AND CONSTRAINT_NAME NOT IN ('PRIMARY');

-- 或使用 SHOW CREATE TABLE
SHOW CREATE TABLE orders\G

刪除外鍵

-- 必須使用約束名刪除
ALTER TABLE orders DROP FOREIGN KEY fk_orders_user;

-- 如果不知道約束名,可通過 SHOW CREATE TABLE 查看

禁用/啟用外鍵檢查(全局會話)

-- 暫時禁用外鍵檢查(可用于重排序表導入)
SET FOREIGN_KEY_CHECKS = 0;

-- 執(zhí)行數(shù)據(jù)操作(如 TRUNCATE 被引用的表)

-- 恢復檢查
SET FOREIGN_KEY_CHECKS = 1;

3.4 唯一約束(UNIQUE)

創(chuàng)建唯一約束

-- 列級
CREATE TABLE users (email VARCHAR(100) UNIQUE);

-- 表級命名
CREATE TABLE users (
    email VARCHAR(100),
    CONSTRAINT uk_email UNIQUE (email)
);

-- 復合唯一約束
CREATE TABLE user_roles (
    user_id INT,
    role_id INT,
    UNIQUE KEY uk_user_role (user_id, role_id)
);

-- 為已有表添加
ALTER TABLE users ADD UNIQUE INDEX uk_email (email);
-- 或
ALTER TABLE users ADD CONSTRAINT uk_username UNIQUE (username);

刪除唯一約束

-- 唯一約束會自動創(chuàng)建同名索引,通過刪除索引即可
ALTER TABLE users DROP INDEX uk_email;

3.5 檢查約束(CHECK)

MySQL 8.0.16+ 完整支持 CHECK;早期版本解析但不執(zhí)行。

創(chuàng)建 CHECK

-- 列級 CHECK
CREATE TABLE products (
    price DECIMAL(10,2) CHECK (price > 0),
    quantity INT CHECK (quantity >= 0)
);

-- 表級 CHECK(可命名)
CREATE TABLE employees (
    id INT,
    salary DECIMAL(10,2),
    CONSTRAINT chk_salary CHECK (salary >= 0)
);

-- 跨列 CHECK
CREATE TABLE reservations (
    start_date DATE,
    end_date DATE,
    CHECK (start_date < end_date)
);

-- 為已有表添加 CHECK
ALTER TABLE users ADD CONSTRAINT chk_age CHECK (age BETWEEN 0 AND 150);

刪除 CHECK

ALTER TABLE users DROP CONSTRAINT chk_age;

查看 CHECK 約束

SELECT * FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS 
WHERE CONSTRAINT_SCHEMA = '數(shù)據(jù)庫名' AND TABLE_NAME = '表名';

3.6 非空約束(NOT NULL)

添加非空

-- 建表時
CREATE TABLE t (id INT NOT NULL);

-- 修改已有列
ALTER TABLE users MODIFY email VARCHAR(100) NOT NULL;

刪除非空(允許 NULL)

ALTER TABLE users MODIFY email VARCHAR(100) NULL;

3.7 默認約束(DEFAULT)

設置默認值

-- 建表時
CREATE TABLE t (status VARCHAR(20) DEFAULT 'active');

-- 修改已有列默認值(兩種方法)
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'inactive';
-- 或
ALTER TABLE users MODIFY status VARCHAR(20) DEFAULT 'inactive';

-- 設置表達式默認值(MySQL 8.0+)
CREATE TABLE t (created_at DATETIME DEFAULT (NOW()));

刪除默認值

ALTER TABLE users ALTER COLUMN status DROP DEFAULT;

3.8 查看所有約束

-- 通過 INFORMATION_SCHEMA 查看表的所有約束
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE TABLE_SCHEMA = '數(shù)據(jù)庫名' AND TABLE_NAME = '表名';

3.9 修改約束的其他方式

由于沒有直接的“修改約束”命令,通常需要刪除后重建。例如修改 NOT NULLNULL 允許,或修改 CHECK 條件。

-- 修改 CHECK:先刪除,再添加
ALTER TABLE t DROP CONSTRAINT chk_old;
ALTER TABLE t ADD CONSTRAINT chk_new CHECK (new_condition);

3.10 完整的約束管理示例

-- 創(chuàng)建帶所有約束類型的表
CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    emp_no VARCHAR(20) NOT NULL UNIQUE,
    name VARCHAR(100) NOT NULL,
    age INT DEFAULT 25 CHECK (age >= 18 AND age <= 65),
    dept_id INT,
    salary DECIMAL(10,2) CHECK (salary >= 0),
    email VARCHAR(100),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(id)
);

-- 添加新約束
ALTER TABLE employees ADD CONSTRAINT chk_salary_positive CHECK (salary > 0);
ALTER TABLE employees MODIFY email VARCHAR(100) NOT NULL;

-- 刪除約束
ALTER TABLE employees DROP FOREIGN KEY fk_dept;
ALTER TABLE employees DROP CONSTRAINT chk_salary_positive;
ALTER TABLE employees MODIFY email VARCHAR(100) NULL;

-- 查看最終約束
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE TABLE_NAME = 'employees';

四、綜合應用場景示例

4.1 索引與事務配合

-- 開啟事務,在更新前檢查索引使用情況
START TRANSACTION;
    -- 使用排他鎖鎖定待更新行
    SELECT * FROM accounts WHERE account_no = 'A123' FOR UPDATE;
    
    -- 確保 account_no 列有唯一索引
    CREATE UNIQUE INDEX idx_acc_no ON accounts(account_no);
    
    UPDATE accounts SET balance = balance - 500 WHERE account_no = 'A123';
    UPDATE accounts SET balance = balance + 500 WHERE account_no = 'B456';
COMMIT;

4.2 約束與事務保證數(shù)據(jù)一致性

START TRANSACTION;
    -- 檢查外鍵關(guān)系
    SET FOREIGN_KEY_CHECKS = 0;   -- 臨時關(guān)閉(謹慎)
    DELETE FROM departments WHERE id = 10;
    -- 實際應使用 ON DELETE CASCADE 或先刪除子表記錄
    SET FOREIGN_KEY_CHECKS = 1;
COMMIT;

五、最佳實踐與注意事項

方面建議
索引避免過多索引(影響寫性能);復合索引遵循最左前綴原則;使用 EXPLAIN 分析查詢;定期清理無用索引。
事務盡量短小,避免長事務;合理選擇隔離級別(通常 READ COMMITTED 或 REPEATABLE READ);使用 SAVEPOINT 實現(xiàn)部分回滾;避免在事務中進行用戶交互或網(wǎng)絡調(diào)用。
約束優(yōu)先使用數(shù)據(jù)庫約束而非應用層校驗;外鍵會帶來額外開銷,但能保證引用完整性;CHECK 在 MySQL 8.0 之前不生效,注意兼容性;修改約束前備份數(shù)據(jù)。

以上內(nèi)容涵蓋了 MySQL 中索引、事務和約束的所有核心操作命令,包括創(chuàng)建、查看、刪除、修改及管理語句,并附有詳細示例。根據(jù)實際業(yè)務場景靈活運用即可。更多相關(guān)MySQL 索引、事務與約束操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux下安裝Mysql多實例作為數(shù)據(jù)備份服務器實現(xiàn)多主到一從多實例的備份

    Linux下安裝Mysql多實例作為數(shù)據(jù)備份服務器實現(xiàn)多主到一從多實例的備份

    由于第一次接觸LINUX,花了三天時間才算有所成就,發(fā)出來希望可以給大伙帶來方便
    2010-07-07
  • 阿里云Centos 7.5安裝Mysql的教程

    阿里云Centos 7.5安裝Mysql的教程

    這篇文章主要介紹了阿里云Centos 7.5安裝Mysql的教程,需要的朋友可以參考下
    2017-07-07
  • mysql的約束及實例分析

    mysql的約束及實例分析

    這篇文章主要介紹了mysql的約束及實例分析,真正約束字段的是數(shù)據(jù)類型,但是數(shù)據(jù)類型約束很單一,需要有一些額外的約束,更好的保證數(shù)據(jù)的合法性,從業(yè)務邏輯角度保證數(shù)據(jù)的正確性,需要的朋友可以參考下
    2023-07-07
  • MySQL的緩存策略方式

    MySQL的緩存策略方式

    MySQL緩存方案主要用于減輕數(shù)據(jù)庫讀寫壓力,通過使用Redis緩存用戶定義的熱點數(shù)據(jù),用戶可以直接從緩存中獲取數(shù)據(jù),文章還討論了如何通過讀寫分離、連接池和異步連接等技術(shù)提升MySQL的訪問性能,此外,還探討了緩存方案中的一致性問題、讀寫策略以及緩存穿透
    2024-09-09
  • MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率

    MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率

    在某些情況下,如果明知道查詢結(jié)果只有一個,SQL語句中使用LIMIT 1會提高查詢效率,感興趣的朋友可以了解下哈,希望對你優(yōu)化mysql查詢有所幫助
    2013-04-04
  • mysql 8.0.11壓縮包版本安裝教程

    mysql 8.0.11壓縮包版本安裝教程

    這篇文章主要為大家詳細介紹了mysql 8.0.11壓縮包版本安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Mysql索引類型與基本用法實例分析

    Mysql索引類型與基本用法實例分析

    這篇文章主要介紹了Mysql索引類型與基本用法,結(jié)合實例形式分析了Mysql索引類型中普通索引、唯一索引、主鍵索引、組合索引、全文索引基本概念、原理與使用方法,需要的朋友可以參考下
    2020-06-06
  • MYSQL修改所有表的存儲引擎格式語句

    MYSQL修改所有表的存儲引擎格式語句

    MYSQL如何修改所有表的存儲引擎格式,或許下面的sql語句對大家有所幫助
    2013-08-08
  • MySQL多表聯(lián)合查詢、連接查詢、子查詢的實現(xiàn)

    MySQL多表聯(lián)合查詢、連接查詢、子查詢的實現(xiàn)

    本文主要介紹了MySQL多表聯(lián)合查詢、連接查詢、子查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • MySQL如何構(gòu)建數(shù)據(jù)表索引

    MySQL如何構(gòu)建數(shù)據(jù)表索引

    索引是對數(shù)據(jù)庫表中一列或多列的值進行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助于更快地獲取信息。本文將通過一個案例帶領你理解索引的概念
    2021-05-05

最新評論

铅山县| 思南县| 崇左市| 呈贡县| 阜阳市| 慈溪市| 岢岚县| 甘孜县| 噶尔县| 肥城市| 荆门市| 四川省| 汉沽区| 高唐县| 乐平市| 石阡县| 华安县| 东阿县| 和顺县| 张北县| 白沙| 申扎县| 龙胜| 奎屯市| 岗巴县| 万安县| 平泉县| 察雅县| 沿河| 平利县| 仁化县| 田林县| 淮北市| 石家庄市| 基隆市| 三亚市| 平陆县| 仙桃市| 万全县| 平原县| 红安县|