日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

MySQL從5.7一躍直接到8.0,本次的版本更新,在功能上主要有以下6點(diǎn):

1,賬戶與安全

2,優(yōu)化器索引

3,通用表表達(dá)式

4,窗口函數(shù)

5,InnoDB 增強(qiáng)

6,JSON 增強(qiáng)

一、賬戶與安全

1.用戶的創(chuàng)建與授權(quán)
  在MySQL5.7的版本:
  > grant all privileges on *.* to '用戶名'@'主機(jī)' identified by '密碼';
  在MySQL8.0需要分開執(zhí)行:
  >create user '用戶名'@'主機(jī)' identified by '密碼';
  >grant all privileges on *.* to '用戶名'@'主機(jī)';
  用以前的一條命令在8.0里面創(chuàng)建用戶,會出現(xiàn)sql語法錯誤
2.認(rèn)證插件更新
  MySQL5.7默認(rèn)身份插件是mysql_native_password
  MySQL8.0默認(rèn)的身份插件是caching_sha2_password
  查看身份認(rèn)證插件命令:show variables like 'default_authentication_plugin%';
  身份認(rèn)證插件可以通過以下2中方式改變:
  
  1)系統(tǒng)變量default_authentication_plugin去改變,在my.ini文件的[mysqld]下面設(shè)置default_authentication_plugin=mysql_native_password即可
  2)如果希望只是某一個(gè)用戶通過mysql_native_password的方式認(rèn)證,可以修改數(shù)據(jù)庫mysql下面的user表的字段,執(zhí)行以下命令:
  >alter user '用戶名'@'主機(jī)' identified width mysql_native_password by '密碼';
3.密碼管理
  MySQL8.0的密碼管理策略有3個(gè)變量
  password_history 修改密碼不允許與最近幾次使用或的密碼重復(fù),默認(rèn)是0,即不限制
  
  password_reuse_interval 修改密碼不允許與最近多少天的使用過的密碼重復(fù),默認(rèn)是0,即不限制
  password_require_current 修改密碼是否需要提供當(dāng)前的登錄密碼,默認(rèn)是OFF,即不需要;如果需要,則設(shè)置成ON
  查詢當(dāng)前MySQL密碼管理策略相關(guān)變量,使用以下命令:
  
  >show variables like 'password%';
  1)設(shè)置全局的密碼管理策略,在my.ini配置文件中,設(shè)置以上3個(gè)變量的值這種設(shè)置方式,需要重啟mysql服務(wù)器;某些生產(chǎn)環(huán)境不允許重啟,MySQL8.0提供了關(guān)鍵字persist,持久化,執(zhí)行以下命令:
  >set persist password_history=6;
  這條命令會在數(shù)據(jù)目錄下生成新的配置文件(/var/lib/mysql/mysqld-auto.cnf),下次服務(wù)器重啟的時(shí)候除了讀取全局配置文件,還會讀取這個(gè)配置文件,這條配置就會被讀入從而達(dá)到持久化的目的
  2)針對某一個(gè)用戶單獨(dú)設(shè)置密碼管理策略
  >alter user '用戶名'@'主機(jī)' password history 5;
  這樣,這個(gè)用戶的password_history 就被設(shè)置成了5,查看一下:
  >show user,host,Password_reuse_history from user;
  
  查看某一張的字段的所有字段,使用以下命令:
  >desc 表名;
4.角色管理
  
  角色:一組權(quán)限的集合
  
  一組權(quán)限賦予某個(gè)角色,再把某個(gè)角色賦予某個(gè)用戶,那用戶就擁有角色對應(yīng)的權(quán)限
  
  1)創(chuàng)建一個(gè)角色
  >create role '角色1';
  
  2)為這個(gè)角色賦予相應(yīng)權(quán)限
  >grant insert,update on *.* to '角色1';
  
  3)創(chuàng)建一個(gè)用戶
  >create user '用戶1' identified by '用戶1的密碼';
  
  4)為這個(gè)用戶賦予角色的權(quán)限
  >grant '角色1' on *.* to '用戶1';
  執(zhí)行完上面4步,用戶1就擁有了插入與更新的權(quán)限
  
  5)再創(chuàng)建1個(gè)用戶
  >create user '用戶2' identified by '用戶2的密碼';
  
  6)為這個(gè)用戶賦予同樣的角色
  >grant '角色1' on *.* to '用戶2';
  
  執(zhí)行完上面2步,用戶2也用了角色1的權(quán)限,即插入與更新
  查看用戶權(quán)限,執(zhí)行以下命令:
  >show grants for '用戶名';
  7)啟用角色,設(shè)置了角色,如果不啟用,用戶登錄的時(shí)候,依舊沒有該角色的權(quán)限
  >set default role '角色名' to '用戶名';
  8)如果一個(gè)用戶有多個(gè)角色,使用以下命令
  >set default role all to '用戶名';
  MySQL中與用戶角色相關(guān)的表:mysql.default_roles、mysql.role_edges,有興趣的朋友可以進(jìn)去查看下。
  9)撤銷權(quán)限
  >revoke insert,update on *.* from '角色名';

二、優(yōu)化器索引

1.隱藏索引(invisible index)
  隱藏索引不會被優(yōu)化器使用,但仍需要維護(hù)
  應(yīng)用場景:
  1)軟刪除
    刪除索引,在線上,如果刪除錯了索引,只能通過創(chuàng)建索引的方式將其添加回來,對于一些大的數(shù)據(jù)庫而言,是比較耗性能的;為了避免刪錯,可以先將其設(shè)置為不可見,優(yōu)化器這時(shí)候就不會使用它,但是后臺仍然在維護(hù),確定后,再刪除。
  2)灰度發(fā)布
    與軟刪除差不多,如果想要測試一些索引的功能或者隨后可能會使用到這個(gè)索引,可以先將其設(shè)置為隱藏索引,對于現(xiàn)有的查詢不會產(chǎn)生影響,測試后,確定需要該索引,可以將其設(shè)置成可見索引。
  創(chuàng)建隱藏索引,執(zhí)行如下命令(如果是不隱藏,則不需要后面的invisible關(guān)鍵字):
  >create index 索引名稱 on 表名(字段名) invisible;
  查詢某一張表的索引,執(zhí)行如下命令:
  >show index from 表名;
  使用explain語句查看查詢優(yōu)化器對索引的使用情況
  >explain select * from 表名 where 條件;
  查詢優(yōu)化器有很多開關(guān),有一個(gè)是use_invisible_indexes(是否使用隱藏索引),默認(rèn)是off(不適用),將其設(shè)置成on,即可使用隱藏索引。查看當(dāng)前查詢優(yōu)化器的所有開關(guān)變臉,執(zhí)行如下命令:
  >select @@optimizer_switch;
  設(shè)置已經(jīng)存在的索引為可見或者隱藏,執(zhí)行如下命令:
  >alter table 表名 alter index 索引名 visible;
  >alter table 表名 alter index 索引名 invisible;
  主鍵不可以設(shè)置為隱藏所以。
2.降序索引(descending index)
  MySQL8.0開始真正支持降序索引,只有InnoDB引擎支持降序所以,且必須是BTREE降序索引,MySQL8.0不在對group by操作進(jìn)行隱式排序。
3.函數(shù)索引
  索引中使用函數(shù)表達(dá)式
  
  支持JSON數(shù)據(jù)節(jié)點(diǎn)的索引
  函數(shù)索引是基于虛擬列的功能實(shí)現(xiàn)的
假設(shè)用戶表(tb_user)的的用戶登錄賬號(username)不需要區(qū)分大小寫,則可以創(chuàng)建一個(gè)函數(shù)索引
>create index username_upper_index on tb_user((upper(username)));
這樣在查詢的時(shí)候 SELECT * FROM tb_user WHERE upper(username) = 'ABD123DSJ'; 就會使用索引。
上面的函數(shù)索引,也可以通過MySQL5.7已有的虛擬計(jì)算列來模擬,為用戶表(tb_user)創(chuàng)建新的一列(new_column),這一列是計(jì)算列,不需要賦值,它的值就是username的大寫。
>alter tbale tb_user add column new_column varchar(10) generated always as (upper(username));
然后給new_column創(chuàng)建一個(gè)索引,可以達(dá)到模擬MySQL8.0中的函數(shù)索引的效果。

三、通用表表達(dá)式

1.非遞歸 CTE
  派生表:select * from (select 1) as dt;
  通用表表達(dá)式:with cte as (select 1) select * from cte;
  
         with cte1(id) as (select 1),cte2 as (select id+1 from cte1) select * from cte1 join cte2;
2.遞歸 CTE

四、窗口函數(shù)

五、InnoDB增強(qiáng)

1.集成數(shù)據(jù)字段
2.原子ddl操作
  MySQL5.7執(zhí)行drop命令 drop table t1,t2; 如果t1存在,t2不存在,會提示t2表不存在,但是t1表仍然會被刪除。
  MySQL8.0執(zhí)行同樣的drop命令,會提示t2表不存在,而且t1表不會被刪除,保證了原子性。
  ddl操作(針對表)的原子性前提是該表使用的存儲引擎是InnoDB
3.自增列持久化
  解決了之前的版本,主鍵重復(fù)的問題。
  MySQL5.7及其以前的版本,MySQL服務(wù)器重啟,會重新掃描表的主鍵最大值,如果之前已經(jīng)刪除過id=100的數(shù)據(jù),但是表中當(dāng)前記錄的最大值如果是99,那么經(jīng)過掃描,下一條記錄的id是100,而不是101。
  
  MySQL8.0則是每次在變化的時(shí)候,都會將自增計(jì)數(shù)器的最大值寫入redo log,同時(shí)在每次檢查點(diǎn)將其寫入引擎私有的系統(tǒng)表。則不會出現(xiàn)自增主鍵重復(fù)的問題。
4.死鎖檢查控制
5.鎖定語句選項(xiàng)

六、JSON增強(qiáng)

1.內(nèi)聯(lián)路徑操作符 
  
column->>path
等價(jià)于之前的:
JSON_UNQUOTE(column -> path)
JSON_UNQUOTE(JSON_EXTRACT(column,path))
2.JSON聚合函數(shù)
MySQL8.0和MySQL5.7.22增加了2個(gè)聚合函數(shù)
  1)JSON_ARRAYAGG(),將多行數(shù)據(jù)組合成json數(shù)組
MySQL8.0新特性

 

  示例:select o_id,json_arrayagg(attribute) as attributes from t group by o_id;
   
MySQL8.0新特性

 

  2)JSON_OBJECTAGG(),用于生成json對象
    
  示例:select o_id json_objectagg(attribute,value) as attributes from t group by o_id;
  
MySQL8.0新特性

 

注意:json的聚合函數(shù)針對重復(fù)key,會使用最后的覆蓋前面已有的值,如果下面的o_id=3,它的color有2個(gè)值,一個(gè)green,一個(gè)yellow,使用生成json的聚合函數(shù)的時(shí)候,前面的green會被覆蓋掉。
MySQL8.0新特性

 


MySQL8.0新特性

 

3.JSON實(shí)用函數(shù)
  1)JSON_PRETTY() 輸出json數(shù)據(jù)的時(shí)候,格式化。
  select json_object('id',3,'name','Barney');
MySQL8.0新特性

 

  select json_pretty(json_object('id',3,'name','Barney'));
  
MySQL8.0新特性

 

  2)JSON_STORAGE_SIZE() json數(shù)據(jù)所占用的存儲空間(單位:字節(jié))
  3)JSON_STORAGE_FREE() json數(shù)據(jù)更新后所釋放的空間(單位:字節(jié))
4.JSON合并函數(shù)
MySQL8.0廢棄了JSON_MERGE()函數(shù),推薦使用以下兩個(gè)函數(shù)合并JSON數(shù)據(jù)
  1)JSON_MERGE_PATCH()
  2)JSON_MERGE_PRESERV()
上面兩個(gè)函數(shù)都是JSON數(shù)據(jù)合并,最大的區(qū)別就是前者遇到相同key的時(shí)候會用后面的覆蓋前面的,后者會都保留,看下面的截圖:
MySQL8.0新特性

 

5.JSON表函數(shù)
  
  MySQL8.0新增了JSON_TABLE()函數(shù),將JSON數(shù)據(jù)轉(zhuǎn)換成關(guān)系表,可以將該函數(shù)的返回結(jié)果當(dāng)做一個(gè)普通的臨時(shí)表進(jìn)行sql查詢

分享到:
標(biāo)簽:MySQL8
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定