MySQL數(shù)據(jù)庫是目前世界上最流行的關(guān)系型數(shù)據(jù)庫之一,從它誕生至今,已經(jīng)經(jīng)歷了很多的版本迭代。當(dāng)然,也不乏一些大版本之間會出現(xiàn)一些較大的差別。作為MySQL數(shù)據(jù)庫中的兩個(gè)重要版本,MySQL5.7和8.0在使用上也有著一些值得注意的區(qū)別。
1. SQL模式
MySQL8.0中新增了一種稱之為“STRICT”的SQL模式,該模式將強(qiáng)制保證所有的數(shù)據(jù)類型和約束都符合嚴(yán)格標(biāo)準(zhǔn)。而MySQL5.7則不會強(qiáng)制執(zhí)行這一標(biāo)準(zhǔn),會容忍一些比較松散的數(shù)據(jù)類型和約束。
例:MySQL8.0 mysql>SET sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'; mysql>CREATE TABLE t1(c1 INT); mysql>INSERT INTO t1 VALUES('abc'); --插入錯(cuò)誤,因?yàn)?abc'不是INT型。 例:MySQL5.7 mysql>CREATE TABLE t1(c1 INT); mysql>INSERT INTO t1 VALUES('abc'); --插入成功,并將'abc'轉(zhuǎn)換為0。
2. 分區(qū)表
在MySQL8.0版本中,引入了更多針對分區(qū)表的語法和特性,例如,可以使用HASH分區(qū)將數(shù)據(jù)均勻地分布到多個(gè)表空間中。
mysql>CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) PARTITION BY HASH(store_id) PARTITIONS 4;
而在MySQL5.7中,分區(qū)表的相關(guān)特性相對較少,不支持HASH分區(qū)。
3. 事務(wù)管理
MySQL8.0引入了在多版本步驟下的事務(wù)管理,即MVCC(多版本并發(fā)控制),在高并發(fā)環(huán)境下表現(xiàn)更為穩(wěn)定。而MySQL5.7中,在事務(wù)處理方面會出現(xiàn)一些鎖等待的問題,對高并發(fā)場景下的性能有一定的影響。
綜上,MySQL5.7和8.0雖然都是MySQL數(shù)據(jù)庫的重要版本,但在使用上存在著一些較大的區(qū)別。因此,我們在選擇版本時(shí),應(yīng)該根據(jù)自己的場景和需求來進(jìn)行選擇。