99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時(shí)代【CDA干貨】ALTER TABLE ADD 多個(gè) INDEX:數(shù)據(jù)庫批量索引優(yōu)化的高效實(shí)踐
【CDA干貨】ALTER TABLE ADD 多個(gè) INDEX:數(shù)據(jù)庫批量索引優(yōu)化的高效實(shí)踐
2025-08-27
收藏

ALTER TABLE ADD 多個(gè) INDEX:數(shù)據(jù)庫批量索引優(yōu)化的高效實(shí)踐

在數(shù)據(jù)庫運(yùn)維與性能優(yōu)化中,索引是提升查詢效率的核心手段。當(dāng)業(yè)務(wù)場景中出現(xiàn)多維度查詢需求(如按用戶 ID、時(shí)間范圍、狀態(tài)等同時(shí)檢索數(shù)據(jù))時(shí),單次創(chuàng)建單個(gè)索引會增加 DDL(數(shù)據(jù)定義語言)執(zhí)行次數(shù),不僅效率低下,還可能因頻繁鎖表影響生產(chǎn)環(huán)境穩(wěn)定性。ALTER TABLE ADD 多個(gè) INDEX作為批量創(chuàng)建索引的關(guān)鍵語法,能一次性完成多組索引的定義,大幅減少操作成本與業(yè)務(wù)中斷風(fēng)險(xiǎn)。本文將系統(tǒng)解析該語法的應(yīng)用場景、語法規(guī)范、實(shí)操流程與注意事項(xiàng),結(jié)合實(shí)戰(zhàn)案例說明其在數(shù)據(jù)庫優(yōu)化中的價(jià)值。

一、批量創(chuàng)建索引的核心價(jià)值:從 “單次操作” 到 “高效優(yōu)化”

在數(shù)據(jù)庫日常維護(hù)中,單表往往需要適配多種查詢場景 —— 例如電商訂單表需支持 “按用戶 ID 查歷史訂單”“按訂單日期范圍統(tǒng)計(jì)銷量”“按支付狀態(tài)篩選待發(fā)貨訂單” 等需求。若采用 “單次ALTER TABLE ADD INDEX創(chuàng)建一個(gè)索引” 的方式,存在三大痛點(diǎn):

  1. 操作效率低:多次執(zhí)行 DDL 語句,需重復(fù)建立數(shù)據(jù)庫連接、解析 SQL、申請鎖資源,尤其在多索引需求場景下,耗時(shí)成倍增加;

  2. 鎖表風(fēng)險(xiǎn)高:多數(shù)數(shù)據(jù)庫(如 MySQL InnoDB)執(zhí)行ALTER TABLE時(shí)會對表加鎖(即便支持在線 DDL,頻繁操作仍會累積鎖等待),多次操作易導(dǎo)致業(yè)務(wù)查詢 / 寫入阻塞;

  3. 維護(hù)成本高:分散的索引創(chuàng)建語句難以統(tǒng)一管理,后續(xù)索引迭代(如刪除冗余索引)時(shí)需逐一核對,易遺漏或出錯(cuò)。

ALTER TABLE ADD 多個(gè) INDEX通過 “一次執(zhí)行、批量創(chuàng)建” 的特性,能針對性解決上述問題,實(shí)現(xiàn)三大核心價(jià)值:

  • 提升操作效率:單次 DDL 執(zhí)行完成多索引創(chuàng)建,減少連接開銷與 SQL 解析次數(shù),操作耗時(shí)僅為多次單索引創(chuàng)建的 1/3~1/2;

  • 降低業(yè)務(wù)影響:減少鎖表頻率,尤其在生產(chǎn)環(huán)境低峰期執(zhí)行一次操作,可將業(yè)務(wù)中斷風(fēng)險(xiǎn)降至最低;

  • 簡化維護(hù)管理:集中化的索引定義語句便于版本控制(如納入 SQL 腳本管理),后續(xù)索引審計(jì)與調(diào)整更清晰。

例如,某電商平臺的 “訂單表(orders)” 需新增 3 個(gè)索引適配業(yè)務(wù)需求,采用批量創(chuàng)建方式僅需執(zhí)行 1 次ALTER TABLE,耗時(shí) 2 分鐘;若分 3 次執(zhí)行,每次鎖表 1.5 分鐘,總耗時(shí) 4.5 分鐘,且期間業(yè)務(wù)查詢延遲增加 30%。

二、ALTER TABLE ADD 多個(gè) INDEX的語法規(guī)范:跨數(shù)據(jù)庫差異與通用邏輯

不同數(shù)據(jù)庫(MySQL、PostgreSQL、Oracle)對 “批量創(chuàng)建索引” 的語法支持存在細(xì)微差異,但核心邏輯均為 “在ALTER TABLE語句中通過逗號分隔多個(gè)ADD INDEX子句”。需注意:部分?jǐn)?shù)據(jù)庫(如 Oracle)雖支持該語法,但更推薦通過CREATE INDEX批量執(zhí)行,需結(jié)合實(shí)際場景選擇。

(一)MySQL 語法規(guī)范(InnoDB/MyISAM 引擎通用)

MySQL 是支持ALTER TABLE ADD 多個(gè) INDEX最成熟的數(shù)據(jù)庫之一,語法簡潔,直接通過逗號分隔多個(gè)索引定義,支持普通索引、唯一索引、復(fù)合索引的批量創(chuàng)建。

1. 基礎(chǔ)語法

ALTER TABLE 表名

ADD INDEX 索引名1 (列名1, 列名2,...) [索引類型/注釋],  -- 普通索引

ADD UNIQUE INDEX 索引名2 (列名3) [索引類型/注釋],        -- 唯一索引(避免列值重復(fù))

ADD INDEX 索引名3 (列名4, 列名5) [索引類型/注釋];        -- 復(fù)合索引(多列組合)
  • 索引:需遵循 “前綴 + 表名 + 列名” 規(guī)范(如idx_orders_user_id),便于識別用途;

  • 列名:普通索引可單列 / 多列,復(fù)合索引需按查詢頻率排序(高頻查詢列在前);

  • 可選參數(shù):如USING BTREE(指定索引類型,InnoDB 默認(rèn) BTREE)、COMMENT '索引用途說明'(便于維護(hù))。

2. 實(shí)操示例

為 “電商訂單表(orders)” 批量創(chuàng)建 3 個(gè)索引

  • 普通索引idx_orders_user_id:優(yōu)化 “按用戶 ID 查詢訂單”;

  • 唯一索引uk_orders_order_no:確保訂單號唯一,同時(shí)優(yōu)化 “按訂單號查詢”;

  • 復(fù)合索引idx_orders_pay_status_create_time:優(yōu)化 “按支付狀態(tài) + 創(chuàng)建時(shí)間范圍篩選訂單”。

ALTER TABLE orders

ADD INDEX idx_orders_user_id (user_id) COMMENT '按用戶ID查詢訂單',

ADD UNIQUE INDEX uk_orders_order_no (order_no) COMMENT '唯一訂單號,支持訂單號查詢',

ADD INDEX idx_orders_pay_status_create_time (pay_status, create_time) COMMENT '按支付狀態(tài)+創(chuàng)建時(shí)間篩選訂單';

(二)PostgreSQL 語法規(guī)范

PostgreSQL 支持ALTER TABLE ADD 多個(gè) INDEX,但語法中需為每個(gè)索引指定INDEX關(guān)鍵字,且唯一索引需通過UNIQUE修飾,與 MySQL 類似但需注意 “索引類型” 的指定方式(如USING btree需放在列名后)。

1. 基礎(chǔ)語法

ALTER TABLE 表名

ADD INDEX 索引名1 ON 表名 (列名1) USING btree [COMMENT '注釋'],

ADD UNIQUE INDEX 索引名2 ON 表名 (列名2, 列名3) USING btree [COMMENT '注釋'],

ADD INDEX 索引名3 ON 表名 (列名4) USING hash [COMMENT '注釋'];  -- 支持hash索引(適合等值查詢)
  • 注意:PostgreSQLALTER TABLE ADD INDEX需顯式指定ON 表名,且索引類型(如btree/hash)需緊跟列名;

  • 唯一索引:通過UNIQUE INDEX定義,功能與 MySQL 一致,確保列值無重復(fù)。

2. 實(shí)操示例

為 PostgreSQL 中的 “用戶表(users)” 批量創(chuàng)建 2 個(gè)索引

ALTER TABLE users

ADD INDEX idx_users_mobile (mobile) USING btree COMMENT '按手機(jī)號查詢用戶',

ADD UNIQUE INDEX uk_users_email (email) USING btree COMMENT '唯一郵箱,支持郵箱登錄查詢';

(三)Oracle 語法規(guī)范

Oracle 支持ALTER TABLE ADD 多個(gè) INDEX,但語法中需通過CREATE INDEX子句嵌套,且更推薦直接執(zhí)行多個(gè)CREATE INDEX(避免ALTER TABLE鎖表范圍過大)。若需批量創(chuàng)建,可采用以下兩種方式:

1. 方式 1:ALTER TABLE批量創(chuàng)建(支持但不推薦)

ALTER TABLE 表名

ADD (

   CONSTRAINT 索引名1 UNIQUE (列名1) USING INDEX TABLESPACE 表空間名,  -- 唯一索引(需指定表空間)

   CONSTRAINT 索引名2 PRIMARY KEY (列名2) USING INDEX TABLESPACE 表空間名,  -- 主鍵索引(隱含唯一約束)

   INDEX 索引名3 (列名3, 列名4) TABLESPACE 表空間名  -- 普通索引

);
  • 注意:Oracle 中索引需指定表空間(如USERS),且主鍵索引需通過PRIMARY KEY約束定義。

2. 方式 2:批量CREATE INDEX(推薦,鎖表風(fēng)險(xiǎn)更低)

CREATE INDEX idx_orders_user_id ON orders (user_id) TABLESPACE USERS;

CREATE UNIQUE INDEX uk_orders_order_no ON orders (order_no) TABLESPACE USERS;

CREATE INDEX idx_orders_pay_status ON orders (pay_status) TABLESPACE USERS;
  • 優(yōu)勢:可通過腳本批量執(zhí)行,每個(gè)CREATE INDEX獨(dú)立鎖表,對業(yè)務(wù)影響更小;

  • 提示:可通過ALTER SESSION SET DDL_LOCK_TIMEOUT = 60設(shè)置鎖等待時(shí)間,避免長時(shí)間阻塞。

三、ALTER TABLE ADD 多個(gè) INDEX的實(shí)操流程:從需求分析到性能驗(yàn)證

批量創(chuàng)建索引并非 “盲目執(zhí)行 SQL”,需遵循 “需求分析→環(huán)境檢查→語法編寫→執(zhí)行驗(yàn)證→性能測試” 的完整流程,確保索引適配業(yè)務(wù)且不影響數(shù)據(jù)庫穩(wěn)定性。以 MySQL 環(huán)境下 “電商訂單表優(yōu)化” 為例,詳解實(shí)操步驟:

(一)步驟 1:需求分析 —— 明確索引創(chuàng)建依據(jù)

在編寫ALTER TABLE語句前,需通過 “慢查詢?nèi)罩尽薄癊XPLAIN 分析” 確定需優(yōu)化的查詢場景,避免創(chuàng)建冗余索引

  1. 提取業(yè)務(wù)高頻查詢:如訂單系統(tǒng)中 “用戶查歷史訂單”“客服按訂單號查詳情”“財(cái)務(wù)按支付狀態(tài)統(tǒng)計(jì)訂單” 均為高頻操作;

  2. 分析現(xiàn)有索引:通過SHOW INDEX FROM orders;查看已存在的索引,避免重復(fù)創(chuàng)建;

  3. 確定索引類型:

  • 訂單號(order_no)需唯一,創(chuàng)建 “唯一索引”;

  • 用戶 ID(user_id)查詢頻繁但值可重復(fù),創(chuàng)建 “普通索引”;

  • 支付狀態(tài)(pay_status)+ 創(chuàng)建時(shí)間(create_time)常組合查詢,創(chuàng)建 “復(fù)合索引”。

(二)步驟 2:環(huán)境檢查 —— 降低生產(chǎn)風(fēng)險(xiǎn)

  1. 選擇執(zhí)行時(shí)機(jī):生產(chǎn)環(huán)境需在業(yè)務(wù)低峰期(如凌晨 2-4 點(diǎn))執(zhí)行,通過SHOW PROCESSLIST;查看當(dāng)前數(shù)據(jù)庫連接數(shù),確保無大量查詢 / 寫入操作;

  2. 備份數(shù)據(jù):執(zhí)行mysqldump -u root -p 數(shù)據(jù)庫名 orders > orders_backup.sql備份訂單表,避免索引創(chuàng)建失敗導(dǎo)致數(shù)據(jù)損壞;

  3. 檢查表鎖機(jī)制:MySQL 5.6 + 的 InnoDB 支持 “在線 DDL”(ALTER TABLE ... ALGORITHM=INPLACE, LOCK=NONE;),可避免鎖表,需在 SQL 中顯式指定:

ALTER TABLE orders

ADD INDEX idx_orders_user_id (user_id) COMMENT '按用戶ID查詢訂單',

ADD UNIQUE INDEX uk_orders_order_no (order_no) COMMENT '唯一訂單號',

ALGORITHM=INPLACE,  -- 在線執(zhí)行,不拷貝表數(shù)據(jù)

LOCK=NONE;           -- 不鎖表,允許讀寫操作

(三)步驟 3:語法編寫與執(zhí)行

  1. 遵循命名規(guī)范:索引名格式為 “類型前綴(idx_普通 /uk_唯一)+ 表名 + 列名”,如idx_orders_pay_status_create_time;

  2. 顯式指定參數(shù):如USING BTREE(明確索引類型)、COMMENT(便于后續(xù)維護(hù));

  3. 執(zhí)行 SQL:在 MySQL 客戶端或運(yùn)維工具(如 Navicat)中執(zhí)行編寫好的ALTER TABLE語句,觀察執(zhí)行進(jìn)度(大表需耐心等待,可通過SHOW PROCESSLIST;查看狀態(tài))。

(四)步驟 4:索引驗(yàn)證 —— 確認(rèn)創(chuàng)建成功

執(zhí)行完成后,通過以下命令驗(yàn)證索引是否創(chuàng)建成功:

  1. MySQLSHOW INDEX FROM orders;,查看 “Key_name” 列是否包含新增的 3 個(gè)索引名;

  2. PostgreSQLSELECT indexname FROM pg_indexes WHERE tablename = 'orders';

  3. Oracle:SELECT index_name FROM user_indexes WHERE table_name = 'ORDERS';(Oracle 表名默認(rèn)大寫)。

(五)步驟 5:性能測試 —— 驗(yàn)證優(yōu)化效果

通過EXPLAIN分析優(yōu)化前后的查詢耗時(shí),確認(rèn)索引生效:

  1. 優(yōu)化前:查詢 “用戶 ID=1001 的所有訂單” 耗時(shí) 1.2 秒,EXPLAIN顯示type=ALL(全表掃描);

  2. 優(yōu)化后:執(zhí)行EXPLAIN SELECT * FROM orders WHERE user_id = 1001;,顯示type=ref索引查找),耗時(shí)降至 0.05 秒;

  3. 復(fù)合索引驗(yàn)證:執(zhí)行EXPLAIN SELECT * FROM orders WHERE pay_status = 1 AND create_time BETWEEN '2024-01-01' AND '2024-01-31';,顯示type=range(范圍索引掃描),耗時(shí)從 0.8 秒降至 0.08 秒。

四、實(shí)戰(zhàn)案例:ALTER TABLE ADD 多個(gè) INDEX在電商訂單系統(tǒng)中的應(yīng)用

某電商平臺的訂單系統(tǒng)上線初期,僅為 “訂單表(orders)” 創(chuàng)建了主鍵索引id),隨著業(yè)務(wù)增長,出現(xiàn)以下問題:

  • 用戶查詢歷史訂單時(shí),全表掃描耗時(shí)超 2 秒,投訴體驗(yàn)差;

  • 客服按訂單號查詳情時(shí),因無索引導(dǎo)致查詢延遲,日均處理訂單量下降 30%;

  • 財(cái)務(wù)統(tǒng)計(jì) “待支付訂單” 時(shí),需篩選pay_status=0的記錄,全表掃描耗時(shí) 5 秒,影響報(bào)表生成效率。

通過ALTER TABLE ADD 多個(gè) INDEX批量創(chuàng)建索引后,系統(tǒng)性能顯著優(yōu)化,具體實(shí)施過程如下:

(一)需求梳理與索引設(shè)計(jì)

業(yè)務(wù)場景 查詢 SQL 示例 索引類型 索引
用戶查歷史訂單 SELECT * FROM orders WHERE user_id = ? 普通索引 idx_orders_user_id
客服按訂單號查詳情 SELECT * FROM orders WHERE order_no = ? 唯一索引 uk_orders_order_no
財(cái)務(wù)統(tǒng)計(jì)待支付訂單 SELECT * FROM orders WHERE pay_status = 0 普通索引 idx_orders_pay_status

(二)執(zhí)行ALTER TABLE批量創(chuàng)建索引

選擇凌晨 3 點(diǎn)(業(yè)務(wù)低峰期)執(zhí)行,SQL 如下:

ALTER TABLE orders

ADD INDEX idx_orders_user_id (user_id) COMMENT '用戶查詢歷史訂單',

ADD UNIQUE INDEX uk_orders_order_no (order_no) COMMENT '客服按訂單號查詳情',

ADD INDEX idx_orders_pay_status (pay_status) COMMENT '財(cái)務(wù)統(tǒng)計(jì)待支付訂單',

ALGORITHM=INPLACE,  -- 在線執(zhí)行,不影響業(yè)務(wù)

LOCK=NONE;           -- 允許讀寫操作
  • 執(zhí)行耗時(shí):訂單表數(shù)據(jù)量為 500 萬行,執(zhí)行耗時(shí) 1 分 40 秒,期間無業(yè)務(wù)阻塞;

  • 驗(yàn)證結(jié)果:通過SHOW INDEX FROM orders確認(rèn) 3 個(gè)索引均創(chuàng)建成功。

(三)優(yōu)化效果

  1. 用戶查詢體驗(yàn):歷史訂單查詢耗時(shí)從 2.1 秒降至 0.06 秒,用戶投訴量減少 90%;

  2. 客服效率:訂單號查詢耗時(shí)從 1.5 秒降至 0.03 秒,日均處理訂單量提升 45%;

  3. 財(cái)務(wù)報(bào)表:待支付訂單統(tǒng)計(jì)耗時(shí)從 5.2 秒降至 0.1 秒,報(bào)表生成效率提升 98%。

五、使用ALTER TABLE ADD 多個(gè) INDEX的注意事項(xiàng)

批量創(chuàng)建索引雖高效,但若操作不當(dāng),可能導(dǎo)致 “索引冗余”“寫性能下降”“鎖表阻塞” 等問題,需重點(diǎn)關(guān)注以下事項(xiàng):

(一)避免過度索引:平衡查詢與寫性能

索引并非越多越好 —— 每個(gè)索引會占用磁盤空間,且INSERT/UPDATE/DELETE操作時(shí)需同步更新索引,導(dǎo)致寫性能下降。建議:

  • 單表索引數(shù)量控制在 5~8 個(gè)以內(nèi);

  • 通過 “慢查詢?nèi)罩尽?定期審計(jì)索引,刪除無用索引(如 3 個(gè)月內(nèi)未被使用的索引);

  • 復(fù)合索引優(yōu)先于多個(gè)單列索引(如idx_orders_pay_status_create_time可覆蓋 “按支付狀態(tài)查詢”“按支付狀態(tài) + 時(shí)間查詢”,無需再創(chuàng)建idx_orders_pay_status)。

(二)生產(chǎn)環(huán)境:優(yōu)先使用在線 DDL

多數(shù)數(shù)據(jù)庫(MySQL 5.6+、PostgreSQL 12+)支持 “在線 DDL”,可避免鎖表:

  • MySQL:在ALTER TABLE后添加ALGORITHM=INPLACE, LOCK=NONE;

  • PostgreSQL:默認(rèn)支持在線創(chuàng)建索引CONCURRENTLY選項(xiàng)可進(jìn)一步降低鎖表影響);

  • 提示:若數(shù)據(jù)庫版本不支持在線 DDL,需在停機(jī)維護(hù)窗口執(zhí)行,避免業(yè)務(wù)中斷。

(三)索引命名與注釋:便于維護(hù)

  • 命名規(guī)范:普通索引idx_表名_列名,唯一索引uk_表名_列名,主鍵索引pk_表名;

  • 必加注釋:通過COMMENT說明索引用途(如 “用戶查詢歷史訂單”),后續(xù)迭代時(shí)可快速識別索引價(jià)值,避免誤刪。

(四)大表處理:分階段優(yōu)化

若表數(shù)據(jù)量超 1000 萬行,直接執(zhí)行ALTER TABLE ADD 多個(gè) INDEX可能耗時(shí)過長,建議:

  1. 先通過CREATE TABLE ... LIKE創(chuàng)建空表,批量添加索引;

  2. 分批次遷移數(shù)據(jù)至新表(如按id分區(qū)間遷移);

  3. 切換表名(如RENAME TABLE orders TO orders_old, orders_new TO orders),減少停機(jī)時(shí)間。

結(jié)語

ALTER TABLE ADD 多個(gè) INDEX數(shù)據(jù)庫性能優(yōu)化中的 “高效工具”,通過批量創(chuàng)建索引,既能適配多維度查詢需求,又能減少 DDL 操作對業(yè)務(wù)的影響。在實(shí)際應(yīng)用中,需結(jié)合數(shù)據(jù)庫類型(MySQL/PostgreSQL/Oracle)的語法差異,遵循 “需求分析→環(huán)境檢查→執(zhí)行驗(yàn)證→性能測試” 的流程,同時(shí)平衡 “查詢性能” 與 “寫性能”,避免過度索引。

隨著數(shù)據(jù)庫技術(shù)的發(fā)展(如云數(shù)據(jù)庫支持更靈活的在線 DDL、AI 輔助索引推薦),批量索引創(chuàng)建將更智能化,但核心原則始終不變 ——“索引為業(yè)務(wù)服務(wù),而非為索引索引”。合理運(yùn)用ALTER TABLE ADD 多個(gè) INDEX,能讓數(shù)據(jù)庫在支撐高并發(fā)業(yè)務(wù)時(shí)更穩(wěn)定、高效,為業(yè)務(wù)增長提供堅(jiān)實(shí)的技術(shù)保障。

學(xué)習(xí)入口:https://edu.cda.cn/goods/show/3814?targetId=6587&preview=0

推薦學(xué)習(xí)書籍 《CDA一級教材》適合CDA一級考生備考,也適合業(yè)務(wù)及數(shù)據(jù)分析崗位的從業(yè)者提升自我。完整電子版已上線CDA網(wǎng)校,累計(jì)已有10萬+在讀~ !

免費(fèi)加入閱讀:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }