色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL中的高級(jí)內(nèi)容詳解

Linux愛(ài)好者 ? 來(lái)源:Java建設(shè)者 ? 作者:Java建設(shè)者 ? 2021-03-11 16:55 ? 次閱讀

之前兩篇文章帶你了解了 MySQL 的基礎(chǔ)語(yǔ)法和 MySQL 的進(jìn)階內(nèi)容,那么這篇文章我們來(lái)了解一下 MySQL 中的高級(jí)內(nèi)容。

其他文章:

138 張圖帶你 MySQL 入門(mén)

47 張圖帶你 MySQL 進(jìn)階!!!

本文思維導(dǎo)圖如下。

ba005e72-7e2c-11eb-8b86-12bb97331649.png

事務(wù)控制和鎖定語(yǔ)句

我們知道,MyISAM 和 MEMORY 存儲(chǔ)引擎支持表級(jí)鎖定(table-level locking),InnoDB 存儲(chǔ)引擎支持行級(jí)鎖定(row-level locking),BDB 存儲(chǔ)引擎支持頁(yè)級(jí)鎖定(page-level locking)。各個(gè)鎖定級(jí)別的特點(diǎn)如下

頁(yè)級(jí)鎖:銷(xiāo)和加鎖時(shí)間界于表鎖和行鎖之間;會(huì)出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般

表級(jí)鎖:表級(jí)鎖是對(duì)整張表進(jìn)行加鎖,MyISAM 和 MEMORY 主要支持表級(jí)鎖,表級(jí)鎖加鎖快,不會(huì)出現(xiàn)死鎖,鎖的粒度比較粗,并發(fā)度最低

行級(jí)鎖:行級(jí)鎖可以說(shuō)是 MySQL 中粒度最細(xì)的一種鎖了,InnoDB 支持行級(jí)鎖,行級(jí)鎖容易發(fā)生死鎖,并發(fā)度比較好,同時(shí)鎖的開(kāi)銷(xiāo)也比較大。

MySQL 默認(rèn)情況下支持表級(jí)鎖定和行級(jí)鎖定。但是在某些情況下需要手動(dòng)控制事務(wù)以確保整個(gè)事務(wù)的完整性,下面我們就來(lái)探討一下事務(wù)控制。但是在探討事務(wù)控制之前我們先來(lái)認(rèn)識(shí)一下兩個(gè)鎖定語(yǔ)句

鎖定語(yǔ)句

MySQL 的鎖定語(yǔ)句主要有兩個(gè) Lock 和 unLock,Lock Tables 可用于鎖定當(dāng)前線程的表,就跟 Java 語(yǔ)法中的 Lock 鎖的用法是一樣的,如果表鎖定,意味著其他線程不能再操作表,直到鎖定被釋放為止。如下圖所示

lock table cxuan005 read;

ba217346-7e2c-11eb-8b86-12bb97331649.png

我們鎖定了 cxuan005 的 read 鎖,然后這時(shí)我們?cè)龠M(jìn)行一次查詢,看看是否能夠執(zhí)行這條語(yǔ)句

select * from cxuan005 where id = 111;

ba7979ba-7e2c-11eb-8b86-12bb97331649.png

可以看到,在進(jìn)行 read 鎖定了,我們?nèi)耘f能夠執(zhí)行查詢語(yǔ)句。

現(xiàn)在我們另外起一個(gè)窗口,相當(dāng)于另起了一個(gè)線程來(lái)進(jìn)行查詢操作。

select * from cxuan005;

bacfa2a4-7e2c-11eb-8b86-12bb97331649.png

這是第二個(gè)窗口執(zhí)行查詢的結(jié)果,可以看到,在一個(gè)線程執(zhí)行 read 鎖定后,其他線程仍然可以進(jìn)行表的查詢操作。

那么第二個(gè)線程能否執(zhí)行更新操作呢?我們來(lái)看一下

update cxuan005 set info='cxuan' where id = 111;

bb911bf0-7e2c-11eb-8b86-12bb97331649.png

發(fā)生了什么?怎么沒(méi)有提示結(jié)果呢?其實(shí)這個(gè)情況下表示 cxuan005 已經(jīng)被加上了 read 鎖,由于當(dāng)前線程不是持有鎖的線程,所以當(dāng)前線程無(wú)法執(zhí)行更新。

解鎖語(yǔ)句

現(xiàn)在我們把窗口切換成持有 read 鎖的線程,來(lái)進(jìn)行 read 鎖的解鎖

unlock tables;

bba6eed0-7e2c-11eb-8b86-12bb97331649.png

在解鎖完成前,進(jìn)行更新的線程會(huì)一直等待,直到解鎖完成后,才會(huì)進(jìn)行更新。我們可以看一下更新線程的結(jié)果。

bbdf2322-7e2c-11eb-8b86-12bb97331649.png

可以看到,線程已經(jīng)更新完畢,我們看一下更新的結(jié)果

select * from cxuan005 where id = 111;

bc286564-7e2c-11eb-8b86-12bb97331649.png

如上圖所示,id = 111 的值已經(jīng)被更新成了 cxuan。

事務(wù)控制

事務(wù)(Transaction) 是訪問(wèn)和更新數(shù)據(jù)庫(kù)的基本執(zhí)行單元,一個(gè)事務(wù)中可能會(huì)包含多個(gè) SQL 語(yǔ)句,事務(wù)中的這些 SQL 語(yǔ)句要么都執(zhí)行,要么都不執(zhí)行,而 MySQL 它是一個(gè)關(guān)系型數(shù)據(jù)庫(kù),它自然也是支持事務(wù)的。事務(wù)同時(shí)也是區(qū)分關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的一個(gè)重要的方面。

在 MySQL 事務(wù)中,主要涉及的語(yǔ)法包含SET AUTOCOMMIT、START TRANSACTION、COMMIT 和 ROLLBACK等。

自動(dòng)提交

在 MySQL 中,事務(wù)默認(rèn)是自動(dòng)提交(Autocommit)的,如下所示

show variables like 'autocommit';

bc3e3f74-7e2c-11eb-8b86-12bb97331649.png

在自動(dòng)提交的模式下,每個(gè) SQL 語(yǔ)句都會(huì)當(dāng)作一個(gè)事務(wù)執(zhí)行提交操作,例如我們上面使用的更新語(yǔ)句

update cxuan005 set info='cxuan' where id = 111;

如果想要關(guān)閉數(shù)據(jù)庫(kù)的自動(dòng)提交應(yīng)該怎么做呢?

其實(shí),MySQL 是可以關(guān)閉自動(dòng)提交的,你可以執(zhí)行

set autocommit = 0;

bc6a95b0-7e2c-11eb-8b86-12bb97331649.png

然后我們?cè)倏匆幌伦詣?dòng)提交是否關(guān)閉了,再次執(zhí)行一下 show variables like 'autocommit' 語(yǔ)句

bcd0a012-7e2c-11eb-8b86-12bb97331649.png

可以看到,自動(dòng)提交已經(jīng)關(guān)閉了,再次執(zhí)行

set autocommit = 1;

會(huì)再次開(kāi)啟自動(dòng)提交。

這里注意一下特殊操作。

在 MySQL 中,存在一些特殊的命令,如果在事務(wù)中執(zhí)行了這些命令,會(huì)馬上強(qiáng)制執(zhí)行 commit 提交事務(wù);比如 DDL 語(yǔ)句(create table/drop table/alter/table)、lock tables 語(yǔ)句等等。

不過(guò),常用的 select、insert、update 和 delete命令,都不會(huì)強(qiáng)制提交事務(wù)。

手動(dòng)提交

如果需要手動(dòng) commit 和 rollback 的話,就需要明確的事務(wù)控制語(yǔ)句了。

典型的 MySQL 事務(wù)操作如下

start transaction; ... # 一條或者多條語(yǔ)句 commit;

上面代碼中的 start transaction 就是事務(wù)的開(kāi)始語(yǔ)句,編寫(xiě) SQL 后會(huì)調(diào)用 commit 提交事務(wù),然后將事務(wù)統(tǒng)一執(zhí)行,如果 SQL 語(yǔ)句出現(xiàn)錯(cuò)誤會(huì)自動(dòng)調(diào)用 Rollback 進(jìn)行回滾。

下面我們就通過(guò)示例來(lái)演示一下 MySQL 的事務(wù),同樣的,我們需要啟動(dòng)兩個(gè)窗口來(lái)演示,為了便于區(qū)分,我們使用 mysql01 和 mysql02 來(lái)命名。

bd0f506e-7e2c-11eb-8b86-12bb97331649.png

我們用 start transaction 命令啟動(dòng)一個(gè)事務(wù),然后再 cxuan005 表中插入一條數(shù)據(jù),此時(shí) mysql02 不做任何操作。涉及的 SQL 語(yǔ)句如下。

start transaction;

bd4457aa-7e2c-11eb-8b86-12bb97331649.png

然后執(zhí)行

select * from cxuan005;

查詢一下 cxuan005 中的數(shù)據(jù)

bd5830f4-7e2c-11eb-8b86-12bb97331649.png

嗯。。。很多長(zhǎng)度太長(zhǎng)了,現(xiàn)在我們把所有的 info 數(shù)據(jù)都更新為 cxuan 。

update cxuan005 set info='cxuan';

bd9c83c6-7e2c-11eb-8b86-12bb97331649.png

更新完畢后,我們先不提交事務(wù),分別在 mysql01 和 mysql02 中進(jìn)行查詢,發(fā)現(xiàn)只有 mysql01 窗口中的查詢已經(jīng)生效,而 mysql02 中還是更新前的數(shù)據(jù)

bdd849b0-7e2c-11eb-8b86-12bb97331649.png

現(xiàn)在我們?cè)?mysql01 中 commit 當(dāng)前事務(wù),然后在 mysql02 中查詢,發(fā)現(xiàn)數(shù)據(jù)已經(jīng)被修改了。

除了 commit 之外,MySQL 中還有 commit and chain 命令,這個(gè)命令會(huì)提交當(dāng)前事務(wù)并且重新開(kāi)啟一個(gè)新的事務(wù)。如下代碼所示

start transaction; # 開(kāi)啟一個(gè)新的事務(wù) insert into cxuan005(id,info) values (555,'cxuan005'); # 插入一條數(shù)據(jù) commit and chain; # 提交當(dāng)前事務(wù)并重新開(kāi)啟一個(gè)事務(wù)

上面是一個(gè)事務(wù)操作,在 commit and chain 鍵入后,我們可以再次執(zhí)行 SQL 語(yǔ)句

update cxuan005 set info = 'cxuan' where id = 555; commit;

然后再次查詢

select * from cxuan005;

be7aa494-7e2c-11eb-8b86-12bb97331649.png

執(zhí)行后,可以發(fā)現(xiàn),我們僅僅使用了一個(gè) start transaction 命令就執(zhí)行了兩次事務(wù)操作。

如果在手動(dòng)提交的事務(wù)中,你發(fā)現(xiàn)有一條 SQL 語(yǔ)句寫(xiě)的不正確或者有其他原因需要回滾,那么此時(shí)你就會(huì)用到 rollback 語(yǔ)句,它會(huì)回滾當(dāng)前事務(wù),相當(dāng)于什么也沒(méi)發(fā)生。如下代碼所示。

start transaction; delete from cxuan005 where id = 555; rollback;

這里切忌一點(diǎn):delete 刪除語(yǔ)句一定要加 where ,不加 where 語(yǔ)句的刪除就是耍流氓。

在同一個(gè)事務(wù)操作中,最好使用相同存儲(chǔ)引擎的表,如果使用不同存儲(chǔ)引擎的表后,rollback 語(yǔ)句會(huì)對(duì)非事務(wù)類(lèi)型的表進(jìn)行特別處理,因此 commit 、rollback 只能對(duì)事務(wù)類(lèi)型的表進(jìn)行提交和回滾。

我們提交的事務(wù)一般都會(huì)被記錄到二進(jìn)制的日志中,但是如果一個(gè)事務(wù)中包含非事務(wù)類(lèi)型的表,那么回滾操作也會(huì)被記錄到二進(jìn)制日志中,以確保非事務(wù)類(lèi)型的表可以被復(fù)制到從數(shù)據(jù)庫(kù)中。

這里解釋一下什么是事務(wù)表和非事務(wù)表

事務(wù)表和非事務(wù)表

事務(wù)表故名思義就是支持事務(wù)的表,支不支持事務(wù)和 MySQL 的存儲(chǔ)類(lèi)型有關(guān),一般情況下,InnoDB 存儲(chǔ)引擎的表是支持事務(wù)的,關(guān)于 InnoDB 的知識(shí),我們會(huì)在后面詳細(xì)介紹。

非事務(wù)表相應(yīng)的就是不支持事務(wù)的表,在 MySQL 中,存儲(chǔ)引擎 MyISAM 是不支持事務(wù)的,非事務(wù)表的特點(diǎn)是不支持回滾。

對(duì)于回滾的話,還要講一點(diǎn)就是 SAVEPOINT,它能指定事務(wù)回滾的一部分,但是不能指定事務(wù)提交的一部分。SAVEPOINT 可以指定多個(gè),在滿足不同條件的同時(shí),回滾不同的 SAVEPOINT。需要注意的是,如果定義了兩個(gè)相同名稱(chēng)的 SAVEPOINT,則后面定義的 SAVEPOINT 會(huì)覆蓋之前的定義。如果 SAVEPOINT 不再需要的話,可以通過(guò) RELEASE SAVEPOINT 來(lái)進(jìn)行刪除。刪除后的 SAVEPOINT 不能再執(zhí)行 ROLLBACK TO SAVEPOINT 命令。

我們通過(guò)一個(gè)示例來(lái)進(jìn)行模擬不同的 SAVEPOINT

首先先啟動(dòng)一個(gè)事務(wù) ,向 cxuan005 中插入一條數(shù)據(jù),然后進(jìn)行查詢,那么是可以查詢到這條記錄的

start transaction; insert into cxuan005(id,info) values(666,'cxuan666'); select * from cxuan005 where id = 666;

查詢之后的記錄如下

bfca4214-7e2c-11eb-8b86-12bb97331649.png

然后我們定義一個(gè) SAVEPOINT,如下所示

savepoint test;

然后繼續(xù)插入一條記錄

insert into cxuan005(id,info) values(777,'cxuan777');

此時(shí)就可以查詢到兩條新增記錄了,id 是 666 和 777 的記錄。

select * from cxuan005 where id = 777;

c00d7f48-7e2c-11eb-8b86-12bb97331649.png

那么我們可以回滾到剛剛定義的 SAVEPOINT

rollback to savepoint test;

再次查詢 cxuan005 這個(gè)表,可以看到,只有 id=666 的這條記錄插入進(jìn)來(lái)了,說(shuō)明 id=777 這條記錄已經(jīng)被回滾了。

c0810d5a-7e2c-11eb-8b86-12bb97331649.png

此時(shí)我們看到的都是 mysql01 中事務(wù)還沒(méi)有提交前的狀態(tài),所以這時(shí)候 mysql02 中執(zhí)行查詢操作是看不到 666 這條記錄的。

然后我們?cè)?mysql01 中執(zhí)行 commit 操作,那么此時(shí)在 mysql02 中就可以查詢到這條記錄了。

SQL 安全問(wèn)題

SQL 安全問(wèn)題應(yīng)該是我們程序員比較忽視的一個(gè)地方了。日常開(kāi)發(fā)中,我們一般只會(huì)關(guān)心 SQL 能不能解決我們的業(yè)務(wù)問(wèn)題,能不能把數(shù)據(jù)查出來(lái),而對(duì)于 SQL 問(wèn)題,我們一般都認(rèn)為這是 DBA 的活,其實(shí)我們 CRUD 程序員也應(yīng)該了解一下 SQL 的安全問(wèn)題。

SQL 注入簡(jiǎn)介

SQL 注入就是利用某些數(shù)據(jù)庫(kù)的外部接口將用戶數(shù)據(jù)插入到實(shí)際的 SQL 中,從而達(dá)到入侵?jǐn)?shù)據(jù)庫(kù)的目的。SQL 注入是一種常見(jiàn)的網(wǎng)絡(luò)攻擊的方式,它不是利用操作系統(tǒng)的 BUG 來(lái)實(shí)現(xiàn)攻擊的。SQL 主要是針對(duì)程序員編寫(xiě)時(shí)的疏忽來(lái)入侵的。

SQL 注入攻擊有很大的危害,攻擊者可以利用它讀取、修改或者刪除數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)中的用戶名和密碼,甚至獲得數(shù)據(jù)庫(kù)管理員的權(quán)限。并且 SQL 注入一般比較難以防范。

SQL Mode

MySQL 可以運(yùn)行在不同的 SQL Mode 模式下,不同的 SQL Mode 定義了不同的 SQL 語(yǔ)法,數(shù)據(jù)校驗(yàn)規(guī)則,這樣就能夠在不同的環(huán)境中使用 MySQL ,下面我們就來(lái)介紹一下 SQL Mode。

SQL Mode 解決問(wèn)題

SQL Mode 可以解決下面這幾種問(wèn)題

通過(guò)設(shè)置 SQL Mode,可以完成不同嚴(yán)格程度的數(shù)據(jù)校驗(yàn),有效保障數(shù)據(jù)的準(zhǔn)確性。

設(shè)置 SQL Mode 為 ANSI 模式,來(lái)保證大多數(shù) SQL 符合標(biāo)準(zhǔn)的 SQL 語(yǔ)法,這樣應(yīng)用在不同數(shù)據(jù)庫(kù)的遷移中,不需要對(duì) SQL 進(jìn)行較大的改變

數(shù)據(jù)在不同數(shù)據(jù)庫(kù)的遷移中,通過(guò)改變 SQL Mode 能夠更方便的進(jìn)行遷移。

下面我們就通過(guò)示例來(lái)演示一下 SQL Mode 用法

我們可以通過(guò)

select @@sql_mode;

來(lái)查看默認(rèn)的 SQL Mode,如下是我的數(shù)據(jù)庫(kù)所支持的 SQL Mode

c0b7d254-7e2c-11eb-8b86-12bb97331649.png

涉及到很多 SQL Mode,下面是這些 SQL Mode 的解釋

ONLY_FULL_GROUP_BY:這個(gè)模式會(huì)對(duì) GROUP BY 進(jìn)行合法性檢查,對(duì)于 GROUP BY 操作,如果在SELECT 中的列,沒(méi)有在 GROUP BY 中出現(xiàn),那么將認(rèn)為這個(gè) SQL 是不合法的,因?yàn)榱胁辉?GROUP BY 從句中

同樣舉個(gè)例子,我們現(xiàn)在查詢一下 cxuan005 的 id 和 info 字段。

select id,info from cxuan005;

這樣是可以運(yùn)行的

c0ed915a-7e2c-11eb-8b86-12bb97331649.png

然后我們使用 GROUP BY 字句進(jìn)行分組,這里只對(duì) info 進(jìn)行分組,我們看一下會(huì)出現(xiàn)什么情況

select id,info from cxuan005 group by info;

c108adaa-7e2c-11eb-8b86-12bb97331649.png

我們可以從錯(cuò)誤原因中看到,這條 SQL 語(yǔ)句是不符合 ONLY_FULL_GROUP_BY 的這條 SQL Mode 的。因?yàn)槲覀冎粚?duì) info 進(jìn)行分組了,沒(méi)有對(duì) id 進(jìn)行分組,我們把 SQL 語(yǔ)句改成如下形式

select id,info from cxuan005 group by id,info;

c11eec8c-7e2c-11eb-8b86-12bb97331649.png

這樣 SQL 就能正確執(zhí)行了。

當(dāng)然,我們也可以刪除 sql_mode = ONLY_FULL_GROUP_BY 的這條 Mode,可以使用

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

來(lái)進(jìn)行刪除,刪除后我們使用分組語(yǔ)句就可以放飛自我了。

select id,info from cxuan005 group by info;

c16ac5bc-7e2c-11eb-8b86-12bb97331649.png

但是這種做法只是暫時(shí)的修改,我們可以修改配置文件 my.ini 中的 sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

STRICT_TRANS_TABLES:這就是嚴(yán)格模式,在這個(gè)模式下會(huì)對(duì)數(shù)據(jù)進(jìn)行嚴(yán)格的校驗(yàn),錯(cuò)誤數(shù)據(jù)不能插入,報(bào)error 錯(cuò)誤。如果不能將給定的值插入到事務(wù)表中,則放棄該語(yǔ)句。對(duì)于非事務(wù)表,如果值出現(xiàn)在單行語(yǔ)句或多行語(yǔ)句的第1行,則放棄該語(yǔ)句。

當(dāng)使用 innodb 存儲(chǔ)引擎表時(shí),考慮使用 innodb_strict_mode 模式的 sql_mode,它能增量額外的錯(cuò)誤檢測(cè)功能。

NO_ZERO_IN_DATE:這個(gè)模式影響著日期中的月份和天數(shù)是否可以為 0(注意年份是非 0 的),這個(gè)模式也取決于嚴(yán)格模式是否被啟用。如果這個(gè)模式未啟用,那么日期中的零部分被允許并且插入沒(méi)有警告。如果這個(gè)模式啟用,那么日期中的零部分插入被作為 0000-00-00 并且產(chǎn)生一個(gè)警告。

這個(gè)模式需要注意下,如果啟用的話,需要 STRICT_TRANS_TABLES 和 NO_ZERO_IN_DATE 同時(shí)啟用,否則不起作用,也就是

set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE';

然后我們換表了,使用 cxuan003 這張表,表結(jié)構(gòu)如下

c199464e-7e2c-11eb-8b86-12bb97331649.png

我們主要測(cè)試日期的使用,在 cxuan003 中插入一條日期為 0000-00-00 的數(shù)據(jù)

insert into cxuan003 values(111,'study','0000-00-00');

發(fā)現(xiàn)能夠執(zhí)行成功,但是把年月日各自變?yōu)?0 之后再進(jìn)行插入,則會(huì)插入失敗。

insert into cxuan003 values(111,'study','2021-00-00');

c1d414e0-7e2c-11eb-8b86-12bb97331649.png

insert into cxuan003 values(111,'study','2021-01-00');

c20b4514-7e2c-11eb-8b86-12bb97331649.png

這些組合有很多,我這里就不再細(xì)致演示了,讀者可以自行測(cè)試。

如果要插入 0000-00-00 這樣的數(shù)據(jù),必須設(shè)置 NO_ZERO_IN_DATE 和 NO_ZERO_DATE。

ERROR_FOR_DIVISION_BY_ZERO:如果這個(gè)模式未啟用,那么零除操作將會(huì)插入空值并且不會(huì)產(chǎn)生警告;如果這個(gè)模式啟用,零除操作插入空值并產(chǎn)生警告;如果這個(gè)模式和嚴(yán)格模式都啟用,零除從操作將會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

NO_AUTO_CREATE_USER:禁止使用 grant 語(yǔ)句自動(dòng)創(chuàng)建用戶,除非認(rèn)證信息被指定。

NO_ENGINE_SUBSTITUTION:此模式指定當(dāng)執(zhí)行 create 語(yǔ)句或者 alter 語(yǔ)句指定的存儲(chǔ)引擎沒(méi)有啟用或者沒(méi)有編譯時(shí),控制默認(rèn)存儲(chǔ)引擎的自動(dòng)切換。默認(rèn)是啟用狀態(tài)的。

SQL Mode 三種作用域

SQL Mode 按作用區(qū)域和時(shí)間可分為 3。個(gè)級(jí)別,分別是會(huì)話級(jí)別,全局級(jí)別,配置(永久生效)級(jí)別。

我們上面使用的 SQL Mode 都是 會(huì)話級(jí)別,會(huì)話級(jí)別就是當(dāng)前窗口域有效。它的設(shè)置方式是

set @@session.sql_mode='xx_mode' set session sql_mode='xx_mode'

全局域就是當(dāng)前會(huì)話關(guān)閉不失效,但是在 MySQL 重啟后失效。它的設(shè)置方式是

set global sql_mode='xx_mode'; set @@global.sql_mode='xx_mode';

配置域就是在 vi /etc/my.cnf 里面添加

[mysqld] sql-mode = "xx_mode"

配置域在保存退出后,重啟服務(wù)器,即可永久生效。

SQL 正則表達(dá)式

正則表達(dá)式相信大家應(yīng)該都用過(guò),不過(guò)你在 MySQL 中用過(guò)正則表達(dá)式嗎?下面我們就來(lái)聊一聊 SQL 中的正則表達(dá)式。

正則表達(dá)式(Regular Expression) 是指一個(gè)用來(lái)描述或者匹配字符串的句法規(guī)則。正則表達(dá)式通常用來(lái)檢索和替換某個(gè)文本中的文本內(nèi)容。很多語(yǔ)言都支持正則表達(dá)式,MySQL 同樣也不例外,MySQL 利用 REGEXP 命令提供給用戶擴(kuò)展的正則表達(dá)式功能。下面是 MySQL 中正則表達(dá)式的一些規(guī)則。

c23d6ba2-7e2c-11eb-8b86-12bb97331649.png

下面來(lái)演示一下正則表達(dá)式的用法

^ 在字符串的開(kāi)始進(jìn)行匹配,根據(jù)返回的結(jié)果來(lái)判斷是否匹配,1 = 匹配,0 = 不匹配。下面嘗試匹配字符串 aaaabbbccc 是否以字符串 a 為開(kāi)始

select 'aaaabbbccc' regexp '^a';

c2956848-7e2c-11eb-8b86-12bb97331649.png

同樣的,$ 會(huì)在末尾處進(jìn)行匹配,如下所示

select 'aaaabbbccc' regexp 'c$';

c2b30de4-7e2c-11eb-8b86-12bb97331649.png

. 匹配單個(gè)任意字符

select 'berska' regexp '.s', 'zara' regexp '.a';

c310e504-7e2c-11eb-8b86-12bb97331649.png

[...] 表示匹配括號(hào)內(nèi)的任意字符,示例如下

select 'whosyourdaddy' regexp '[abc]';

c33b4f74-7e2c-11eb-8b86-12bb97331649.png

[^...] 匹配括號(hào)內(nèi)不包含的任意字符,和 [...] 是相反的,如果有任何匹配不上,返回 0 ,全部匹配上返回 1。

select 'x' regexp '[^xyz]';

c3564086-7e2c-11eb-8b86-12bb97331649.png

n* 表示匹配零個(gè)或者多個(gè) n 字符串,如下

select 'aabbcc' regexp 'd*';

c386a334-7e2c-11eb-8b86-12bb97331649.png

沒(méi)有 d 出現(xiàn)也可以返回 1 ,因?yàn)?* 表示 0 或者多個(gè)。

n+ 表示匹配 1 個(gè)或者 n 個(gè)字符串

select 'aabbcc' regexp 'd+';

c3b3484e-7e2c-11eb-8b86-12bb97331649.png

n? 的用法和 n+ 類(lèi)似,只不過(guò) n? 可以匹配空串

常見(jiàn) SQL 技巧

RAND() 函數(shù)

大多數(shù)數(shù)據(jù)庫(kù)都會(huì)提供產(chǎn)生隨機(jī)數(shù)的函數(shù),通過(guò)這些函數(shù)可以產(chǎn)生隨機(jī)數(shù),也可以使用從數(shù)據(jù)庫(kù)表中抽取隨機(jī)產(chǎn)生的記錄,這對(duì)統(tǒng)計(jì)分析來(lái)說(shuō)很有用。

在 MySQL 中,通常使用 RAND() 函數(shù)來(lái)產(chǎn)生隨機(jī)數(shù)。RAND() 和 ORDER BY 組合完成數(shù)據(jù)抽取功能,如下所示。

我們新建一張表用于數(shù)據(jù)檢索。

CREATE TABLE `clerk_Info` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `salary` decimal(10,2) DEFAULT NULL, `companyId` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1

然后插入一些數(shù)據(jù),插入完成后的數(shù)據(jù)如下。

c3f2b394-7e2c-11eb-8b86-12bb97331649.png

然后我們可以使用 RAND() 函數(shù)進(jìn)行隨機(jī)檢索數(shù)據(jù)行

select * from clerk_info order by rand();

檢索完成后的數(shù)據(jù)如下

c4613b3e-7e2c-11eb-8b86-12bb97331649.png

多次查詢后發(fā)現(xiàn)每次檢索的數(shù)據(jù)順序都是隨機(jī)的。

這個(gè)函數(shù)多用于隨機(jī)抽樣,比如選取一定數(shù)量的樣本在進(jìn)行隨機(jī)排序,需要用到 limit 關(guān)鍵字。

GROUP BY + WITH ROLLUP

我們經(jīng)常使用 GROUP BY 語(yǔ)句,但是你用過(guò) GROUP BY 和 WITH ROLLUP 一起使用的嗎?使用 GROUP BY 和 WITH ROLLUP 字句可以檢索出更多的分組集合信息。

我們?nèi)耘f對(duì) clerk_info 表進(jìn)行操作,我們對(duì) name 和 salary 進(jìn)行分組統(tǒng)計(jì)工資總數(shù)。

select name,sum(salary) from clerk_info group by name with rollup;

c4a19a8a-7e2c-11eb-8b86-12bb97331649.png

可以看到上面的表按照 name 進(jìn)行分組,然后再對(duì) money 進(jìn)行統(tǒng)計(jì)。

也就是說(shuō) GROUP BY 語(yǔ)句執(zhí)行完成后可以滿足用戶想要的任何一個(gè)分組以及分組組合的聚合信息值。

這里需要注意一點(diǎn),不能同時(shí)使用 ORDER BY 字句對(duì)結(jié)果進(jìn)行排序,ROLLUP 和 ORDER BY 是互斥的。

數(shù)據(jù)庫(kù)名、表名大小寫(xiě)問(wèn)題

在 MySQL 中,數(shù)據(jù)庫(kù)中的每個(gè)表至少對(duì)應(yīng)數(shù)據(jù)庫(kù)目錄中的一個(gè)文件,當(dāng)然這取決于存儲(chǔ)引擎的實(shí)現(xiàn)了。不同的操作系統(tǒng)對(duì)大小寫(xiě)的敏感性決定了數(shù)據(jù)庫(kù)和表名的大小寫(xiě)的敏感性。在 UNIX 操作系統(tǒng)中是對(duì)大小寫(xiě)敏感的,因此數(shù)據(jù)庫(kù)名和表名也是具有敏感性的,而到了 Windows 則不存在敏感性問(wèn)題,因?yàn)?Windows 操作系統(tǒng)本身對(duì)大小寫(xiě)不敏感。列、索引、觸發(fā)器在任何平臺(tái)上都對(duì)大小寫(xiě)不敏感。

在 MySQL 中,數(shù)據(jù)庫(kù)名和表名是由 lower_case_tables_name 系統(tǒng)變量決定的。可以在啟動(dòng) mysqld 時(shí)設(shè)置這個(gè)系統(tǒng)變量。下面是 lower_case_tables_name 的值。

c4ec29ba-7e2c-11eb-8b86-12bb97331649.png

如果只在一個(gè)平臺(tái)上使用 MySQL 的話,通常不需要修改 lower_case_tables_name 變量。如果想要在不同系統(tǒng)系統(tǒng)之間遷移表就會(huì)涉及到大小寫(xiě)問(wèn)題,因?yàn)?UNIX 中 clerk_info 和 CLERK_INFO 被認(rèn)為是兩個(gè)不同的表,而 Windows 中則認(rèn)為是一個(gè)。在 UNIX 中使用 lower_case_tables_name=0, 而在 Windows 中使用lower_case_tables_name=2,這樣可以保留數(shù)據(jù)庫(kù)名和表名的大小寫(xiě),但是不能保證所有的 SQL 查詢中使用的表名和數(shù)據(jù)庫(kù)名的大小寫(xiě)相同。如果 SQL 語(yǔ)句中沒(méi)有正確引用數(shù)據(jù)庫(kù)名和表名的大小寫(xiě),那么雖然在 Windows 中能正確執(zhí)行,但是如果將查詢轉(zhuǎn)移到 UNIX 中,大小寫(xiě)不正確,將會(huì)導(dǎo)致查詢失敗。

外鍵問(wèn)題

這里需要注意一個(gè)問(wèn)題,InnoDB 存儲(chǔ)引擎是支持外鍵的,而 MyISAM 存儲(chǔ)引擎是不支持外鍵的,因此在 MyISAM 中設(shè)置外鍵會(huì)不起作用。

MySQL 常用函數(shù)

下面我們來(lái)了解一下 MySQL 函數(shù),MySQL 函數(shù)也是我們?nèi)粘i_(kāi)發(fā)過(guò)程中經(jīng)常使用的,選用合適的函數(shù)能夠提高我們的開(kāi)發(fā)效率,下面我們就來(lái)一起認(rèn)識(shí)一下這些函數(shù)

字符串函數(shù)

字符串函數(shù)是最常用的一種函數(shù)了,MySQL 也是支持很多種字符串函數(shù),下面是 MySQL 支持的字符串函數(shù)表

函數(shù) 功能
LOWER 將字符串所有字符變?yōu)樾?xiě)
UPPER 將字符串所有字符變?yōu)榇髮?xiě)
CONCAT 進(jìn)行字符串拼接
LEFT 返回字符串最左邊的字符
RIGHT 返回字符串最右邊的字符
INSERT 字符串替換
LTRIM 去掉字符串左邊的空格
RTRIM 去掉字符串右邊的空格
REPEAT 返回重復(fù)的結(jié)果
TRIM 去掉字符串行尾和行頭的空格
SUBSTRING 返回指定的字符串
LPAD 用字符串對(duì)最左邊進(jìn)行填充
RPAD 用字符串對(duì)最右邊進(jìn)行填充
STRCMP 比較字符串 s1 和 s2
REPLACE 進(jìn)行字符串替換

下面通過(guò)具體的示例演示一下每個(gè)函數(shù)的用法

LOWER(str) 和 UPPER(str) 函數(shù):用于轉(zhuǎn)換大小寫(xiě)

c520ea24-7e2c-11eb-8b86-12bb97331649.png

CONCAT(s1,s2 ... sn) :把傳入的參數(shù)拼接成一個(gè)字符串

c5589ec4-7e2c-11eb-8b86-12bb97331649.png

上面把 c xu an 拼接成為了一個(gè)字符串,另外需要注意一點(diǎn),任何和 NULL 進(jìn)行字符串拼接的結(jié)果都是 NULL。

c76818a2-7e2c-11eb-8b86-12bb97331649.png

LEFT(str,x) 和 RIGHT(str,x) 函數(shù):分別返回字符串最左邊的 x 個(gè)字符和最右邊的 x 個(gè)字符。如果第二個(gè)參數(shù)是 NULL,那么將不會(huì)返回任何字符串

c781baa0-7e2c-11eb-8b86-12bb97331649.png

INSERT(str,x,y,instr) :將字符串 str 從指定 x 的位置開(kāi)始, 取 y 個(gè)長(zhǎng)度的字串替換為 instr。

c7b6576a-7e2c-11eb-8b86-12bb97331649.png

LTRIM(str) 和 RTRIM(str) 分別表示去掉字符串 str 左側(cè)和右側(cè)的空格

cafb24be-7e2c-11eb-8b86-12bb97331649.png

REPEAT(str,x) 函數(shù):返回 str 重復(fù) x 次的結(jié)果

cb7ed8f4-7e2c-11eb-8b86-12bb97331649.png

TRIM(str) 函數(shù):用于去掉目標(biāo)字符串的空格

cbace690-7e2c-11eb-8b86-12bb97331649.png

SUBSTRING(str,x,y) 函數(shù):返回從字符串 str 中第 x 位置起 y 個(gè)字符長(zhǎng)度的字符串

cbcc2438-7e2c-11eb-8b86-12bb97331649.png

LPAD(str,n,pad) 和 RPAD(str,n,pad) 函數(shù):用字符串 pad 對(duì) str 左邊和右邊進(jìn)行填充,直到長(zhǎng)度為 n 個(gè)字符長(zhǎng)度

cbebcec8-7e2c-11eb-8b86-12bb97331649.png

STRCMP(s1,s2) 用于比較字符串 s1 和 s2 的 ASCII 值大小。如果 s1 < s2,則返回 -1;如果 s1 = s2 ,返回 0 ;如果 s1 > s2 ,返回 1。

cc2fdab4-7e2c-11eb-8b86-12bb97331649.png

REPLACE(str,a,b) : 用字符串 b 替換字符串 str 種所有出現(xiàn)的字符串 a

cc8b1e92-7e2c-11eb-8b86-12bb97331649.png

數(shù)值函數(shù)

MySQL 支持?jǐn)?shù)值函數(shù),這些函數(shù)能夠處理很多數(shù)值運(yùn)算。下面我們一起來(lái)學(xué)習(xí)一下 MySQL 中的數(shù)值函數(shù),下面是所有的數(shù)值函數(shù)

函數(shù) 功能
ABS 返回絕對(duì)值
CEIL 返回大于某個(gè)值的最大整數(shù)值
MOD 返回模
ROUND 四舍五入
FLOOR 返回小于某個(gè)值的最大整數(shù)值
TRUNCATE 返回?cái)?shù)字截?cái)嘈?shù)的結(jié)果
RAND 返回 0 - 1 的隨機(jī)值

下面我們還是以實(shí)踐為主來(lái)聊一聊這些用法

ABS(x) 函數(shù):返回 x 的絕對(duì)值

ccc1b22c-7e2c-11eb-8b86-12bb97331649.png

CEIL(x) 函數(shù):返回大于 x 的整數(shù)

ccd184ea-7e2c-11eb-8b86-12bb97331649.png

MOD(x,y),對(duì) x 和 y 進(jìn)行取模操作

ccebb900-7e2c-11eb-8b86-12bb97331649.png

ROUND(x,y) 返回 x 四舍五入后保留 y 位小數(shù)的值;如果是整數(shù),那么 y 位就是 0 ;如果不指定 y ,那么 y 默認(rèn)也是 0 。

cd1aa0bc-7e2c-11eb-8b86-12bb97331649.png

FLOOR(x) : 返回小于 x 的最大整數(shù),用法與 CEIL 相反

cd313d90-7e2c-11eb-8b86-12bb97331649.png

TRUNCATE(x,y): 返回?cái)?shù)字 x 截?cái)酁?y 位小數(shù)的結(jié)果, TRUNCATE 知識(shí)截?cái)啵⒉皇撬纳嵛迦搿?/p>

cd668676-7e2c-11eb-8b86-12bb97331649.png

RAND() :返回 0 到 1 的隨機(jī)值

cd7de7b2-7e2c-11eb-8b86-12bb97331649.png

日期和時(shí)間函數(shù)

日期和時(shí)間函數(shù)也是 MySQL 中非常重要的一部分,下面我們就來(lái)一起認(rèn)識(shí)一下這些函數(shù)

函數(shù) 功能
NOW 返回當(dāng)前的日期和時(shí)間
WEEK 返回一年中的第幾周
YEAR 返回日期的年份
HOUR 返回小時(shí)值
MINUTE 返回分鐘值
MONTHNAME 返回月份名
CURDATE 返回當(dāng)前日期
CURTIME 返回當(dāng)前時(shí)間
UNIX_TIMESTAMP 返回日期 UNIX 時(shí)間戳
DATE_FORMAT 返回按照字符串格式化的日期
FROM_UNIXTIME 返回 UNIX 時(shí)間戳的日期值
DATE_ADD 返回日期時(shí)間 + 上一個(gè)時(shí)間間隔
DATEDIFF 返回起始時(shí)間和結(jié)束時(shí)間之間的天數(shù)

下面結(jié)合示例來(lái)講解一下每個(gè)函數(shù)的使用

NOW(): 返回當(dāng)前的日期和時(shí)間

cdbfa148-7e2c-11eb-8b86-12bb97331649.png

WEEK(DATE) 和 YEAR(DATE) :前者返回的是一年中的第幾周,后者返回的是給定日期的哪一年

ce1f8f86-7e2c-11eb-8b86-12bb97331649.png

HOUR(time) 和 MINUTE(time) : 返回給定時(shí)間的小時(shí),后者返回給定時(shí)間的分鐘

ce83e918-7e2c-11eb-8b86-12bb97331649.png

MONTHNAME(date) 函數(shù):返回 date 的英文月份

cecba424-7e2c-11eb-8b86-12bb97331649.png

CURDATE() 函數(shù):返回當(dāng)前日期,只包含年月日

cedf3d2c-7e2c-11eb-8b86-12bb97331649.png

CURTIME() 函數(shù):返回當(dāng)前時(shí)間,只包含時(shí)分秒

cf223226-7e2c-11eb-8b86-12bb97331649.png

UNIX_TIMESTAMP(date) : 返回 UNIX 的時(shí)間戳

cf4edbbe-7e2c-11eb-8b86-12bb97331649.png

FROM_UNIXTIME(date) : 返回 UNIXTIME 時(shí)間戳的日期值,和 UNIX_TIMESTAMP 相反

cfaecd94-7e2c-11eb-8b86-12bb97331649.png

DATE_FORMAT(date,fmt) 函數(shù):按照字符串 fmt 對(duì) date 進(jìn)行格式化,格式化后按照指定日期格式顯示

具體的日期格式可以參考這篇文章 blog.csdn.net/weixin_3870…

我們演示一下將當(dāng)前日期顯示為年月日的這種形式,使用的日期格式是%M %D %Y。

cfc6854c-7e2c-11eb-8b86-12bb97331649.png

DATE_ADD(date, interval, expr type) 函數(shù):返回與所給日期 date 相差 interval 時(shí)間段的日期

interval 表示間隔類(lèi)型的關(guān)鍵字,expr 是表達(dá)式,這個(gè)表達(dá)式對(duì)應(yīng)后面的類(lèi)型,type 是間隔類(lèi)型,MySQL 提供了 13 種時(shí)間間隔類(lèi)型

表達(dá)式類(lèi)型 描述 格式
YEAR YY
MONTH MM
DAY DD
HOUR 小時(shí) hh
MINUTE mm
SECOND ss
YEAR_MONTH 年和月 YY-MM
DAY_HOUR 日和小時(shí) DD hh
DAY_MINUTE 日和分鐘 DD hh : mm
DAY_SECOND 日和秒 DD hh :mm :ss
HOUR_MINUTE 小時(shí)和分 hh:mm
HOUR_SECOND 小時(shí)和秒 hh:ss
MINUTE_SECOND 分鐘和秒 mm:ss

DATE_DIFF(date1, date2) 用來(lái)計(jì)算兩個(gè)日期之間相差的天數(shù)

cfde4330-7e2c-11eb-8b86-12bb97331649.png

查看離 2021 - 01 - 01 還有多少天

流程函數(shù)

流程函數(shù)也是很常用的一類(lèi)函數(shù),用戶可以使用這類(lèi)函數(shù)在 SQL 中實(shí)現(xiàn)條件選擇。這樣做能夠提高查詢效率。下表列出了這些流程函數(shù)

函數(shù) 功能
IF(value,t f) 如果 value 是真,返回 t;否則返回 f
IFNULL(value1,value2) 如果 value1 不為 NULL,返回 value1,否則返回 value2。
CASE WHEN[value1] THEN[result1] ...ELSE[default] END 如果 value1 是真,返回 result1,否則返回 default
CASE[expr] WHEN[value1] THEN [result1]... ELSE[default] END 如果 expr 等于 value1, 返回 result1, 否則返回 default

其他函數(shù)

除了我們介紹過(guò)的字符串函數(shù)、日期和時(shí)間函數(shù)、流程函數(shù),還有一些函數(shù)并不屬于上面三類(lèi)函數(shù),它們是

函數(shù) 功能
VERSION 返回當(dāng)前數(shù)據(jù)庫(kù)的版本
DATABASE 返回當(dāng)前數(shù)據(jù)庫(kù)名
USER 返回當(dāng)前登陸用戶名
PASSWORD 返回字符串的加密版本
MD5 返回 MD5 值
INET_ATON(IP) 返回 IP 地址的數(shù)字表示
INET_NTOA(num) 返回?cái)?shù)字代表的 IP 地址

下面來(lái)看一下具體的使用

VERSION: 返回當(dāng)前數(shù)據(jù)庫(kù)版本

d00eda04-7e2c-11eb-8b86-12bb97331649.png

DATABASE: 返回當(dāng)前的數(shù)據(jù)庫(kù)名

d0542b04-7e2c-11eb-8b86-12bb97331649.png

USER : 返回當(dāng)前登錄用戶名

d0e0721c-7e2c-11eb-8b86-12bb97331649.png

PASSWORD(str) : 返回字符串的加密版本,例如

d121ef8a-7e2c-11eb-8b86-12bb97331649.png

MD5(str) 函數(shù):返回字符串 str 的 MD5 值

d1a43422-7e2c-11eb-8b86-12bb97331649.png

INET_ATON(IP): 返回 IP 的網(wǎng)絡(luò)字節(jié)序列

d1ecb6de-7e2c-11eb-8b86-12bb97331649.png

INET_NTOA(num)函數(shù):返回網(wǎng)絡(luò)字節(jié)序列代表的 IP 地址,與 INET_ATON 相對(duì)

總結(jié)

這篇文章我?guī)闶职咽謹(jǐn)]了一波 MySQL 的高級(jí)內(nèi)容,其實(shí)說(shuō)高級(jí)也不一定真的高級(jí)或者說(shuō)難,其實(shí)就是區(qū)分不同梯度的東西。

原文標(biāo)題:炸裂!MySQL 82 張圖帶你飛

文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    804

    瀏覽量

    26531

原文標(biāo)題:炸裂!MySQL 82 張圖帶你飛

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MySQL還能跟上PostgreSQL的步伐嗎

    Percona 的老板 Peter Zaitsev最近發(fā)表一篇博客,討論了MySQL是否還能跟上PostgreSQL的腳步。Percona 作為MySQL 生態(tài)扛旗者,Percona 開(kāi)發(fā)了知名
    的頭像 發(fā)表于 11-18 10:16 ?199次閱讀
    <b class='flag-5'>MySQL</b>還能跟上PostgreSQL的步伐嗎

    香港云服務(wù)器怎么部署MySQL數(shù)據(jù)庫(kù)?

    在香港云服務(wù)器上部署MySQL數(shù)據(jù)庫(kù)的步驟如下: 步驟 1: 更新軟件包列表 首先,確保軟件包列表是最新的。在終端執(zhí)行以下命令: sudo apt update 步驟 2: 安裝 MySQL
    的頭像 發(fā)表于 11-14 16:15 ?159次閱讀

    詳解MySQL多實(shí)例部署

    詳解MySQL多實(shí)例部署
    的頭像 發(fā)表于 11-11 11:10 ?225次閱讀

    MySQL編碼機(jī)制原理

    MyQL 編解碼機(jī)制介紹 問(wèn)題解答 讀者問(wèn)題簡(jiǎn)介 為敘述方便,以下的「我」指代讀者 我們知道在 Java 是通過(guò) ?JDBC 來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的,以訪問(wèn) MySQL 為例,需要配置以下 url 才能訪問(wèn)
    的頭像 發(fā)表于 11-09 11:01 ?222次閱讀

    適用于MySQL的dbForge架構(gòu)比較

    dbForge Schema Compare for MySQL 是一種工具,用于輕松有效地比較和部署 MySQL 數(shù)據(jù)庫(kù)結(jié)構(gòu)和腳本文件夾差異。該工具提供了 MySQL 數(shù)據(jù)庫(kù)架構(gòu)中所有差異的全面視圖。
    的頭像 發(fā)表于 10-28 09:41 ?195次閱讀
    適用于<b class='flag-5'>MySQL</b>的dbForge架構(gòu)比較

    Jtti:MySQL初始化操作如何設(shè)置root密碼

    '@'localhost' IDENTIFIED BY 'your_new_password'; ? 刷新權(quán)限以使更改生效: ? FLUSH PRIVILEGES; ? 退出MySQL命令行工具: ? exit ? 從此,您就成功設(shè)置了root密碼。在之后的登錄,需要使
    的頭像 發(fā)表于 08-08 16:45 ?362次閱讀

    MySQL知識(shí)點(diǎn)匯總

    大家好,這部分被稱(chēng)為DQL部分,是每個(gè)學(xué)習(xí)MySQL必須要學(xué)會(huì)的部分,下面就讓我來(lái)介紹MySQL的其他部分。
    的頭像 發(fā)表于 08-05 15:27 ?394次閱讀
    <b class='flag-5'>MySQL</b>知識(shí)點(diǎn)匯總

    華納云:如何修改MySQL的默認(rèn)端口

    更改MySQL的默認(rèn)端口。 理解MySQL配置文件 MySQL的配置文件是控制服務(wù)器設(shè)置的關(guān)鍵。在不同的操作系統(tǒng),這個(gè)文件可能位于不同的位置: Linux: /etc/
    的頭像 發(fā)表于 07-22 14:56 ?307次閱讀
    華納云:如何修改<b class='flag-5'>MySQL</b>的默認(rèn)端口

    MySQL的整體邏輯架構(gòu)

    支持多種存儲(chǔ)引擎是眾所周知的MySQL特性,也是MySQL架構(gòu)的關(guān)鍵優(yōu)勢(shì)之一。如果能夠理解MySQL Server與存儲(chǔ)引擎之間是怎樣通過(guò)API交互的,將大大有利于理解MySQL的核心
    的頭像 發(fā)表于 04-30 11:14 ?447次閱讀
    <b class='flag-5'>MySQL</b>的整體邏輯架構(gòu)

    labview 創(chuàng)建mysql 表時(shí) 設(shè)置時(shí)間 怎么在mysql是格式是date 而不是datetime?

    選擇 時(shí)間日期 但是在mysql是date而不是datetime類(lèi)型 ,除了sql語(yǔ)句創(chuàng)建表 ,怎么能實(shí)現(xiàn)創(chuàng)建表數(shù)據(jù)為datetime類(lèi)型
    發(fā)表于 02-04 09:46

    如何將MS訪問(wèn)數(shù)據(jù)轉(zhuǎn)換為MySQL

    借助dbForgeStudio for MySQL,您可以輕松地將數(shù)據(jù)從MicrosoftAccess遷移到MySQL,并保持?jǐn)?shù)據(jù)和功能的完整性。這個(gè)過(guò)程將允許您利用更具可伸縮性和功能強(qiáng)大的MySQL基礎(chǔ)設(shè)施來(lái)方便地管理數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 01-23 13:47 ?423次閱讀
    如何將MS訪問(wèn)數(shù)據(jù)轉(zhuǎn)換為<b class='flag-5'>MySQL</b>

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例!

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例! MySQL是一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),如果你忘記了MySQL的密碼,不必?fù)?dān)心,可以通過(guò)一些簡(jiǎn)單的步驟來(lái)快速重
    的頭像 發(fā)表于 01-12 16:06 ?743次閱讀

    MySQL數(shù)據(jù)庫(kù)通用表空間詳解

    MySQL 數(shù)據(jù)庫(kù)中有效管理存儲(chǔ)和性能至關(guān)重要,通用表空間為實(shí)現(xiàn)這一目標(biāo)提供了靈活性。本文討論通用表空間并探討其功能、優(yōu)點(diǎn)和實(shí)際用法,并附有說(shuō)明性示例。
    的頭像 發(fā)表于 01-10 09:33 ?2225次閱讀

    如何使用Golang連接MySQL

    首先我們來(lái)看如何使用Golang連接MySQL
    的頭像 發(fā)表于 01-08 09:42 ?3347次閱讀
    如何使用Golang連接<b class='flag-5'>MySQL</b>

    mysql密碼忘了怎么重置

    2. 打開(kāi)MySQL的配置文件my.cnf或my.ini。在Windows上,該文件通常位于MySQL的安裝目錄下的bin文件夾;而在Linux上,該文件通常位
    的頭像 發(fā)表于 12-27 16:51 ?6668次閱讀
    主站蜘蛛池模板: 国产二区自拍| 韩国演艺圈qvod| 娇小老少配xxxxx| 嗯啊不要老师| 婷婷亚洲AV色香蕉蜜桃| 伊人久久综在合线亚洲| 成年女人免费播放影院| 精品久久免费观看| 日韩精品 中文字幕 有码 | 午夜插插插| 5278欧美一区二区三区| 国产精品毛片AV久久97| 男人到天堂a在538线| 亚洲精品国产A久久久久久| PORN白嫩内射合集| 久草高清在线| 思思久99久女女精品| 52av我爱| 精品国产乱码久久久久久下载| 日本久久中文字幕| 最近中文字幕完整版免费高清| 国产精品18久久久久久欧美网址| 蜜桃视频一区二区| 亚洲精品色情婷婷在线播放 | 四虎永久免费网址| 99re6热这里在线精品视频| 国家产午夜精品无人区| 日韩欧美精品有码在线播放免费| 最新精品国产| 精品国产乱码久久久久久人妻 | 色mimi| 999av视频| 久久a级片| 亚洲国产日韩a精品乱码| 国产成人啪精品视频免费网| 欧美18精品久久久无码午夜福利| 亚洲在线视频自拍精品| 国产永久免费视频| 午夜看片网| 富婆找黑人老外泻火在线播放 | 无码观看AAAAAAAA片|