MySQL業(yè)務(wù)數(shù)據(jù)量增長(zhǎng)到單表成為瓶頸時(shí)的解決方案
引言:?jiǎn)伪砥款i的原因
在討論如何“治療”之前,我們首先要準(zhǔn)確“診斷”問(wèn)題。單表成為瓶頸通常表現(xiàn)為以下“癥狀”:
- 查詢響應(yīng)慢:即使是簡(jiǎn)單的
SELECT查詢,在數(shù)據(jù)量巨大時(shí)也可能耗時(shí)數(shù)秒甚至更長(zhǎng)。 - 數(shù)據(jù)庫(kù)負(fù)載高:服務(wù)器的CPU使用率、I/O等待率持續(xù)居高不下。
- 寫入延遲:高并發(fā)寫入導(dǎo)致鎖競(jìng)爭(zhēng)嚴(yán)重,TPS(每秒事務(wù)處理量)上不去。
- 維護(hù)困難:執(zhí)行
DDL操作(如加索引、修改字段)需要數(shù)小時(shí),嚴(yán)重影響線上服務(wù);備份和恢復(fù)時(shí)間極長(zhǎng)。
這些癥狀背后的“病因”通常是單一的:數(shù)據(jù)量超過(guò)了單機(jī)MySQL的最佳承載范圍。MySQL作為一個(gè)通用的關(guān)系型數(shù)據(jù)庫(kù),其性能在單表數(shù)據(jù)量達(dá)到千萬(wàn)級(jí)別后,會(huì)因B+樹索引的深度增加、數(shù)據(jù)頁(yè)的頻繁換入換出等因素而顯著下降。
一、第一階段:應(yīng)急與優(yōu)化
當(dāng)性能問(wèn)題初現(xiàn)時(shí),首要任務(wù)不是立刻進(jìn)行大規(guī)模重構(gòu),而是深入挖掘現(xiàn)有系統(tǒng)的潛力。這一階段的投入產(chǎn)出比最高。類似于低成本的“微創(chuàng)手術(shù)”。
1.1 SQL與索引優(yōu)化(首要任務(wù))
這是數(shù)據(jù)庫(kù)優(yōu)化的第一道防線,也是最基礎(chǔ)、最重要的一環(huán)。據(jù)統(tǒng)計(jì),80%的性能問(wèn)題都可以通過(guò)糟糕的SQL和不當(dāng)?shù)乃饕齺?lái)解釋。
定位慢查詢:
開(kāi)啟并分析MySQL的慢查詢?nèi)罩臼堑谝徊?。?code>my.cnf配置文件中設(shè)置:
slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2 # 記錄執(zhí)行超過(guò)2秒的查詢
- 通過(guò)
mysqldumpslow或pt-query-digest等工具分析日志,可以快速定位出系統(tǒng)的性能“罪魁禍?zhǔn)?rdquo;。 - 善用
EXPLAIN:EXPLAIN是SQL優(yōu)化的“聽(tīng)診器”。對(duì)慢查詢執(zhí)行EXPLAIN,可以模擬MySQL優(yōu)化器是如何執(zhí)行SQL的。你需要重點(diǎn)關(guān)注以下幾個(gè)字段:type:訪問(wèn)類型,從優(yōu)到差依次為system > const > eq_ref > ref > range > index > ALL。如果出現(xiàn)ALL(全表掃描),說(shuō)明必須優(yōu)化。key:實(shí)際使用的索引。如果為NULL,說(shuō)明沒(méi)有走索引。rows:預(yù)估需要掃描的行數(shù)。這個(gè)值越小越好。Extra:額外信息。如果出現(xiàn)Using filesort(額外排序)或Using temporary(使用臨時(shí)表),也需要警惕。
- 創(chuàng)建和優(yōu)化索引:
- 為查詢而生:為
WHERE、JOIN、ORDER BY子句中頻繁使用的列創(chuàng)建索引。 - 遵循最左前綴原則:對(duì)于聯(lián)合索引
(a, b, c),查詢條件中必須包含最左邊的列a,索引才能生效。 - 避免索引失效:不要在索引列上使用函數(shù)(如
WHERE YEAR(create_time) = 2023應(yīng)改為WHERE create_time >= '2023-01-01' AND create_time < '2024-01-01')、進(jìn)行類型轉(zhuǎn)換或使用!=、<>、LIKE '%xxx'等操作。
- 為查詢而生:為
- 表結(jié)構(gòu)優(yōu)化與索引優(yōu)化做法:
- 字段類型優(yōu)化:使用最合適的數(shù)據(jù)類型(如
VARCHAR代替TEXT,TINYINT代替INT)來(lái)節(jié)省空間。 - 索引優(yōu)化:為高頻查詢的
WHERE、ORDER BY、JOIN字段創(chuàng)建合適的索引。使用EXPLAIN分析慢查詢,消除全表掃描。 - 反范式化:適當(dāng)增加冗余字段,以空間換時(shí)間,避免復(fù)雜的
JOIN操作。 - 解決問(wèn)題:單條SQL執(zhí)行慢。這是最基礎(chǔ)也是最有效的優(yōu)化手段。
- 字段類型優(yōu)化:使用最合適的數(shù)據(jù)類型(如
1.2 表結(jié)構(gòu)設(shè)計(jì)優(yōu)化
糟糕的表結(jié)構(gòu)是性能的先天缺陷。
- 字段類型選型:
- 選擇最小類型:能用
TINYINT就不用INT,能用INT就不用BIGINT。這不僅能節(jié)省存儲(chǔ)空間,更重要的是能減少內(nèi)存和磁盤I/O,因?yàn)楦嗟臄?shù)據(jù)行可以加載到一個(gè)數(shù)據(jù)頁(yè)中。 - 定長(zhǎng)與變長(zhǎng):對(duì)于長(zhǎng)度固定的字符串(如MD5值、UUID),使用
CHAR;對(duì)于長(zhǎng)度不定的,使用VARCHAR。避免濫用TEXT和BLOB,它們會(huì)產(chǎn)生額外的存儲(chǔ)開(kāi)銷。 - 優(yōu)先使用
NOT NULL:NULL值會(huì)讓索引、索引統(tǒng)計(jì)和值比較都更復(fù)雜。
- 選擇最小類型:能用
- 垂直拆分:
當(dāng)一個(gè)表字段過(guò)多(例如超過(guò)20個(gè)),且包含一些不常用的大字段(如TEXT類型的備注、BLOB類型的圖片)時(shí),可以考慮垂直拆分。- 做法:將表拆分成兩個(gè)表,一個(gè)“主表”存放核心、高頻訪問(wèn)的字段,一個(gè)“擴(kuò)展表”存放不常用的大字段。
- 好處:大幅減少主表的體積,提升主表查詢的I/O效率。當(dāng)需要擴(kuò)展信息時(shí),再通過(guò)主鍵進(jìn)行
JOIN查詢。
1.3 引入緩存:為數(shù)據(jù)庫(kù)減負(fù)
緩存是解決讀性能瓶頸的“銀彈”。
- 做法:引入Redis、Memcached等內(nèi)存數(shù)據(jù)庫(kù)作為緩存層。將熱點(diǎn)數(shù)據(jù)(如商品信息、用戶信息、文章內(nèi)容)存儲(chǔ)在緩存中。
- 策略:最常用的是Cache-Aside(旁路緩存)模式:
- 應(yīng)用先讀緩存,如果命中,直接返回。
- 如果未命中,則去讀數(shù)據(jù)庫(kù)。
- 將從數(shù)據(jù)庫(kù)讀到的數(shù)據(jù)寫入緩存,然后返回。
- 當(dāng)數(shù)據(jù)發(fā)生寫操作時(shí),先更新數(shù)據(jù)庫(kù),然后刪除緩存(而不是更新緩存,以保證數(shù)據(jù)一致性)。
- 解決問(wèn)題:可以抵擋掉80%-90%的讀請(qǐng)求,極大地降低數(shù)據(jù)庫(kù)的壓力,讓數(shù)據(jù)庫(kù)專注于處理寫操作和復(fù)雜的讀操作。
二、第二階段:架構(gòu)升級(jí)
當(dāng)單機(jī)優(yōu)化和緩存無(wú)法滿足需求時(shí),我們需要從架構(gòu)層面進(jìn)行升級(jí)。相當(dāng)于中等成本的“??剖中g(shù)”
2.1 讀寫分離:分擔(dān)讀壓力
當(dāng)系統(tǒng)的讀寫比例嚴(yán)重失衡(如讀:寫 > 5:1)時(shí),讀寫分離是一個(gè)非常有效的方案。
- 原理:基于MySQL主從復(fù)制功能,搭建一個(gè)主庫(kù)和多個(gè)從庫(kù)。
- 主庫(kù):處理所有的寫請(qǐng)求(
INSERT,UPDATE,DELETE)。 - 從庫(kù):通過(guò)
binlog從主庫(kù)同步數(shù)據(jù),處理所有的讀請(qǐng)求(SELECT)。
- 主庫(kù):處理所有的寫請(qǐng)求(
- 實(shí)現(xiàn):
- 代碼層實(shí)現(xiàn):在應(yīng)用代碼中封裝數(shù)據(jù)源,手動(dòng)判斷是讀操作還是寫操作,然后路由到不同的數(shù)據(jù)源。
- 中間件實(shí)現(xiàn):使用如ShardingSphere、MyCat等數(shù)據(jù)庫(kù)中間件。應(yīng)用連接中間件,由中間件自動(dòng)完成SQL的路由,對(duì)應(yīng)用代碼幾乎透明。
- 優(yōu)點(diǎn):通過(guò)增加從庫(kù)的數(shù)量,可以線性地?cái)U(kuò)展系統(tǒng)的讀能力。
- 缺點(diǎn):存在數(shù)據(jù)復(fù)制延遲的問(wèn)題。在主庫(kù)寫入后,數(shù)據(jù)同步到從庫(kù)有毫秒級(jí)的延遲,對(duì)于要求強(qiáng)一致性的場(chǎng)景可能會(huì)有問(wèn)題。
2.2 數(shù)據(jù)庫(kù)分區(qū):拆分大表
分區(qū)是在單個(gè)數(shù)據(jù)庫(kù)實(shí)例內(nèi)部,將一個(gè)大表在物理上拆分成多個(gè)更小的、可獨(dú)立管理的文件(分區(qū)),但在邏輯上對(duì)應(yīng)用仍然是一個(gè)完整的表。
- 核心價(jià)值:
- 提升查詢性能:當(dāng)查詢條件中包含分區(qū)鍵時(shí),MySQL的分區(qū)裁剪機(jī)制會(huì)只掃描相關(guān)的分區(qū),而不是整個(gè)表,從而大幅減少I/O。
- 簡(jiǎn)化數(shù)據(jù)管理:
- 快速歸檔/刪除:刪除一個(gè)舊分區(qū)的數(shù)據(jù)(
ALTER TABLE ... DROP PARTITION)是秒級(jí)操作,遠(yuǎn)快于DELETE。 - 高效加載:可以將新數(shù)據(jù)直接加載到一個(gè)新分區(qū)中。
- 快速歸檔/刪除:刪除一個(gè)舊分區(qū)的數(shù)據(jù)(
- 常用分區(qū)類型:
- RANGE分區(qū):最常用?;谝粋€(gè)連續(xù)的區(qū)間值進(jìn)行分區(qū),非常適合按時(shí)間劃分?jǐn)?shù)據(jù)。
CREATE TABLE orders (
id BIGINT NOT NULL,
order_date DATE NOT NULL,
-- 其他字段
PRIMARY KEY (id, order_date) -- 注意:分區(qū)鍵必須是主鍵或唯一索引的一部分
) PARTITION BY RANGE (TO_DAYS(order_date)) (
PARTITION p202301 VALUES LESS THAN (TO_DAYS('2023-02-01')),
PARTITION p202302 VALUES LESS THAN (TO_DAYS('2023-03-01')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);- LIST分區(qū):基于一個(gè)離散的值列表進(jìn)行分區(qū),適合按地區(qū)、品類等劃分。
- HASH/KEY分區(qū):基于用戶定義的表達(dá)式或MySQL內(nèi)部的哈希函數(shù)進(jìn)行分區(qū),目的是將數(shù)據(jù)均勻分布到各個(gè)分區(qū)。
- 優(yōu)點(diǎn):對(duì)應(yīng)用完全透明,無(wú)需修改任何代碼,是處理歷史數(shù)據(jù)和日志類數(shù)據(jù)的利器。
- 缺點(diǎn):無(wú)法突破單機(jī)的物理瓶頸(CPU、I/O、連接數(shù))。
三、第三階段:終極解決方案
當(dāng)數(shù)據(jù)量達(dá)到億級(jí)甚至十億級(jí),單臺(tái)服務(wù)器的所有資源都已耗盡時(shí),就必須進(jìn)行水平擴(kuò)展。相當(dāng)于高成本的“大型手術(shù)”
3.1 分庫(kù)分表:突破單機(jī)極限
分庫(kù)分表是最高階的方案,它將數(shù)據(jù)分布到多個(gè)物理上獨(dú)立的MySQL服務(wù)器上,從根本上突破了單機(jī)的性能天花板。
- 分表:將一個(gè)邏輯上的大表,拆分成多個(gè)物理上獨(dú)立的小表(如
user_0,user_1,user_2…)。 - 分庫(kù):將這些拆分后的小表,分布到不同的數(shù)據(jù)庫(kù)服務(wù)器(實(shí)例)上(如
db0.user_0,db0.user_1,db1.user_2,db1.user_3…)。
分庫(kù)分表需要解決的核心問(wèn)題: - 路由策略:如何知道一條數(shù)據(jù)應(yīng)該存放在哪個(gè)庫(kù)的哪個(gè)表?
- 哈希取模:
hash(user_id) % 庫(kù)數(shù)量決定庫(kù),hash(user_id) % 表數(shù)量決定表。優(yōu)點(diǎn)是數(shù)據(jù)分布均勻,缺點(diǎn)是擴(kuò)容困難(需要數(shù)據(jù)遷移)。 - 范圍分片:按ID范圍或時(shí)間范圍分片。優(yōu)點(diǎn)是擴(kuò)容容易,缺點(diǎn)是可能導(dǎo)致數(shù)據(jù)熱點(diǎn)(最新數(shù)據(jù)訪問(wèn)最頻繁)。
- 基因法:將user_id的一部分“基因”作為庫(kù)號(hào)或表號(hào),確保擴(kuò)容時(shí)數(shù)據(jù)遷移量最小。
- 哈希取模:
- 全局唯一ID:如何保證在分庫(kù)分表后,主鍵ID全局唯一?
- UUID:性能差,長(zhǎng)度長(zhǎng),無(wú)序,不適合做主鍵。
- 數(shù)據(jù)庫(kù)自增:利用不同庫(kù)設(shè)置不同的自增起始步長(zhǎng),但擴(kuò)展性差。
- 雪花算法:推薦方案。在本地生成一個(gè)64位的long型ID,包含時(shí)間戳、機(jī)器ID和序列號(hào),保證全局唯一且趨勢(shì)遞增。
- 跨庫(kù)事務(wù):如何保證一個(gè)操作涉及多個(gè)庫(kù)時(shí)的事務(wù)一致性?這是一個(gè)世界級(jí)難題。
- 強(qiáng)一致性方案(2PC/3PC):性能差,生產(chǎn)環(huán)境很少使用。
- 最終一致性方案:業(yè)界主流。通過(guò)消息隊(duì)列(如RocketMQ、Kafka)實(shí)現(xiàn)Saga模式,將一個(gè)大事務(wù)拆分成多個(gè)本地事務(wù),通過(guò)消息進(jìn)行協(xié)調(diào),最終保證數(shù)據(jù)一致。
- 跨庫(kù)查詢(JOIN):如何進(jìn)行跨庫(kù)的
JOIN操作?- 應(yīng)用層組裝:在應(yīng)用代碼中,先查詢一個(gè)庫(kù)的數(shù)據(jù),再根據(jù)結(jié)果去另一個(gè)庫(kù)查詢,然后在內(nèi)存中組裝。這是最常見(jiàn)的做法。
- 禁止跨庫(kù)JOIN:在設(shè)計(jì)之初就通過(guò)業(yè)務(wù)邏輯或數(shù)據(jù)冗余(反范式化)來(lái)避免跨庫(kù)
JOIN。
3.2 升級(jí)硬件
- 做法:提升數(shù)據(jù)庫(kù)服務(wù)器的硬件配置,如增加內(nèi)存(增大
innodb_buffer_pool_size)、使用更快的SSD硬盤、升級(jí)更強(qiáng)的CPU。 - 解決問(wèn)題:服務(wù)器資源瓶頸。在軟件優(yōu)化到極致后,硬件升級(jí)是最直接的提升方式。
四、如何選擇
4.1 不同方案對(duì)比
面對(duì)如此多的方案,如何選擇?答案是:根據(jù)業(yè)務(wù)階段和數(shù)據(jù)量,按圖索驥。 這些方案通常是一個(gè)循序漸進(jìn)的過(guò)程。
| 業(yè)務(wù)階段 | 主要瓶頸 | 推薦方案 | 核心原因 |
|---|---|---|---|
| 初創(chuàng)/成長(zhǎng)期 | 單條SQL慢,CPU高 | SQL優(yōu)化、索引、表結(jié)構(gòu)優(yōu)化 | 性價(jià)比最高,是所有優(yōu)化的基礎(chǔ)。 |
| 發(fā)展期 | 讀多寫少,數(shù)據(jù)庫(kù)壓力大 | 緩存、讀寫分離 | 專門解決讀瓶頸,對(duì)應(yīng)用侵入性相對(duì)較小。 |
| 成熟期 | 單表數(shù)據(jù)量大(億級(jí)),有明確分區(qū)鍵 | 數(shù)據(jù)庫(kù)分區(qū) | 對(duì)業(yè)務(wù)無(wú)侵入,維護(hù)簡(jiǎn)單,是處理歷史數(shù)據(jù)、日志類數(shù)據(jù)的利器。 |
| 海量數(shù)據(jù)期 | 數(shù)據(jù)量和并發(fā)量巨大,單機(jī)達(dá)到極限 | 分庫(kù)分表 | 突破單機(jī)物理極限,實(shí)現(xiàn)系統(tǒng)的水平擴(kuò)展,是終極解決方案。 |
4.2 分區(qū) 、分表和分庫(kù)對(duì)比
| 特性 | 分區(qū) | 分表 | 分庫(kù) |
|---|---|---|---|
| 核心思想 | 物理拆分,邏輯統(tǒng)一。將一個(gè)表的數(shù)據(jù)文件拆分成多個(gè)。 | 邏輯拆分,物理獨(dú)立。將一個(gè)大表拆成多個(gè)結(jié)構(gòu)相同的小表。 | 實(shí)例拆分,數(shù)據(jù)分散。將數(shù)據(jù)分散到多個(gè)不同的MySQL服務(wù)器上。 |
| 解決層級(jí) | MySQL內(nèi)核層面 | 應(yīng)用或中間件層面 | 應(yīng)用或中間件層面 |
| 對(duì)應(yīng)用透明 | 完全透明。應(yīng)用代碼無(wú)需任何修改。 | 不透明。需要修改代碼或引入中間件來(lái)路由。 | 不透明。需要修改代碼或引入中間件來(lái)路由。 |
| 主要目標(biāo) | 提升大表的查詢/維護(hù)性能,簡(jiǎn)化數(shù)據(jù)歸檔。 | 解決單表數(shù)據(jù)行數(shù)過(guò)多導(dǎo)致的I/O和索引效率問(wèn)題。 | 解決單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的性能、連接數(shù)和存儲(chǔ)瓶頸。 |
| 復(fù)雜度 | 低。主要是SQL層面的DDL操作。 | 中。需要處理路由、聚合查詢、全局ID等問(wèn)題。 | 高。除了分表的問(wèn)題,還需處理跨庫(kù)事務(wù)等。 |
4.3 選擇建議
當(dāng)你的MySQL業(yè)務(wù)數(shù)據(jù)量增長(zhǎng)到瓶頸時(shí),不要立刻想到分庫(kù)分表。請(qǐng)按照以下順序思考:
- 先做“體檢”:分析慢查詢?nèi)罩?,檢查索引和表結(jié)構(gòu)是否合理。
- 再加“緩存”:引入Redis等緩存,抵擋大部分讀請(qǐng)求。
- 再分“讀寫”:如果寫壓力不大但讀壓力巨大,實(shí)施讀寫分離。
- 再切“分區(qū)”:如果數(shù)據(jù)有明確的時(shí)間或地域維度,且需要高效歸檔,優(yōu)先使用分區(qū)。
- 最后“拆分”:當(dāng)以上方法都無(wú)法解決,且數(shù)據(jù)量和并發(fā)量確實(shí)達(dá)到了單機(jī)極限時(shí),才考慮分庫(kù)分表這一終極武器。
- 持續(xù)監(jiān)控:建立完善的數(shù)據(jù)庫(kù)監(jiān)控體系(如Prometheus + Grafana),實(shí)時(shí)關(guān)注QPS、TPS、慢查詢、連接數(shù)等指標(biāo),用數(shù)據(jù)驅(qū)動(dòng)你的優(yōu)化決策。
到此這篇關(guān)于MySQL業(yè)務(wù)數(shù)據(jù)量增長(zhǎng)到單表成為瓶頸時(shí),該如何做?的文章就介紹到這了,更多相關(guān)mysql單表瓶頸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql中如何批量替換某個(gè)字段的值:replace
這篇文章主要介紹了Mysql中如何批量替換某個(gè)字段的值:replace,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
MySQL數(shù)據(jù)庫(kù)改名的詳細(xì)方法教程
在很多人看來(lái)Oracle數(shù)據(jù)庫(kù)一旦建好后,數(shù)據(jù)庫(kù)的名字就不能改變了,其實(shí)不然,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)改名的相關(guān)資料,需要的朋友可以參考下2023-03-03
MySQL派生表聯(lián)表查詢實(shí)戰(zhàn)過(guò)程
派生表是查詢結(jié)果組成的虛擬表,派生表是在外部查詢的FROM子句中定義的,不需要手動(dòng)創(chuàng)建,下面這篇文章主要給大家介紹了關(guān)于MySQL派生表聯(lián)表查詢的相關(guān)資料,需要的朋友可以參考下2022-03-03
SQL?PRIMARY?KEY唯一標(biāo)識(shí)表中記錄的關(guān)鍵約束語(yǔ)句
這篇文章主要為大家介紹了SQL?PRIMARY?KEY唯一標(biāo)識(shí)表中記錄的關(guān)鍵約束語(yǔ)句詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
mysql 數(shù)據(jù)插入優(yōu)化方法之concurrent_insert
在MyISAM里讀寫操作是串行的,但當(dāng)對(duì)同一個(gè)表進(jìn)行查詢和插入操作時(shí),為了降低鎖競(jìng)爭(zhēng)的頻率,根據(jù)concurrent_insert的設(shè)置,MyISAM是可以并行處理查詢和插入的2021-07-07
Mysql Binlog快速遍歷搜索記錄及binlog數(shù)據(jù)查看的方法
這篇文章主要介紹了Mysql Binlog快速遍歷搜索記錄及binlog數(shù)據(jù)查看的方法的相關(guān)資料,需要的朋友可以參考下2016-01-01
MySql分頁(yè)時(shí)使用limit+order by會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問(wèn)題解決
在MySQL中我們通常會(huì)采用limit來(lái)進(jìn)行翻頁(yè)查詢,當(dāng)limit遇到 order by的時(shí)候會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問(wèn)題,本文就來(lái)記錄一下,感興趣的可以了解一下2021-08-08
MySQL常用SQL語(yǔ)句總結(jié)包含復(fù)雜SQL查詢
今天小編就為大家分享一篇關(guān)于MySQL常用SQL語(yǔ)句總結(jié)包含復(fù)雜SQL查詢,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
MySQL 5.7之關(guān)于SQL_MODE的設(shè)置
這篇文章主要介紹了MySQL 5.7之關(guān)于SQL_MODE的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

