濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

熱門標(biāo)簽:地圖標(biāo)注圖標(biāo)素材入駐 電話機(jī)器人免費(fèi)嗎 好搜地圖標(biāo)注 怎么辦理400電話呢 龍圖酒吧地圖標(biāo)注 電銷機(jī)器人價(jià)格多少錢一臺(tái) 400電話申請(qǐng)什么好 怎么申請(qǐng)400電話申請(qǐng) 百度地圖標(biāo)注地方備注

前言

大家應(yīng)該都知道,我們?cè)趍ysql運(yùn)維中出現(xiàn)過不少因?yàn)閡pdate/delete條件錯(cuò)誤導(dǎo)致數(shù)據(jù)被誤更新或者刪除的case,為避免類似問題的發(fā)生,可以用sql_safe_updates參數(shù)來(lái)對(duì)update/delete做限制。這個(gè)參數(shù)設(shè)置為on后,可防止因程序bug或者DBA手工誤操作導(dǎo)致的整個(gè)表被更新或者刪除的情況。下面話不多說了,來(lái)一起看看詳細(xì)的介紹吧。

設(shè)置這個(gè)參數(shù)時(shí)需要注意一下幾點(diǎn):

       a、設(shè)置前需要確認(rèn)程序中所有的update和delete都符合sql_safe_updates的限制規(guī)范,不然程序會(huì)報(bào)錯(cuò)。

       b、5.0,5.1都是session級(jí)別的,5.6是globalsession級(jí)別;低版本的數(shù)據(jù)庫(kù)只能在程序創(chuàng)建session時(shí)設(shè)置帶上set sql_safe_updates=on;高版本的數(shù)據(jù)庫(kù)可以直接set global set sql_safe_updates=on,設(shè)置完成后讓程序重連后生效。

限制規(guī)范:

示例表結(jié)構(gòu):

CREATE TABLE `delay_monitor` (
 `id` int(11) NOT NULL,
 `Ftime` datetime DEFAULT NULL,
 `Fgtid` varchar(128) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin​

1、update

a、報(bào)錯(cuò)條件:不帶where、帶where無(wú)索引、where條件為常量

     不帶where:update delay_monitor set Ftime=now();

      帶where無(wú)索引:update delay_monitor set Ftime=now() where Fgtid='test';

      where條件為常量:update delay_monitor set Ftime=now() where 1;

 b、執(zhí)行條件:帶where帶索引、不帶where+帶limit、帶where無(wú)索引+limit、帶where有索引+limit、where條件為常量+limit

       帶where帶索引:update delay_monitor set Ftime=now() where id=2;

       不帶where+帶limit: update delay_monitor set Ftime=now()  limit 1;

       帶where無(wú)索引+limit:update delay_monitor set Ftime=now() where Fgtid='test' limit 1;

       帶where有索引+limit:update delay_monitor set Ftime=now() where id =2 limit1;

        where條件為常量+limit:update delay_monitor set Ftime=now() where 1 limit 1;

 2、delete

 相對(duì)于update,delelte的限制會(huì)更為嚴(yán)格;where條件為常量或者為空,將不予執(zhí)行。

a、報(bào)錯(cuò)條件:不帶where、帶where無(wú)索引、不帶where+帶limit、where條件為常量、where條件為常量+limit

      不帶where:delete delay_monitor set Ftime=now();

      帶where無(wú)索引:delete delay_monitor set Ftime=now() where Fgtid='test';

      不帶where+帶limit: delete delay_monitor set Ftime=now()  limit 1;

      where條件為常量:delete delay_monitor set Ftime=now() where 1;

      where條件為常量+limit:delete delay_monitor set Ftime=now() where 1 limit 1;

b、執(zhí)行條件:帶where帶索引、帶where無(wú)索引+limit、帶where有索引+limt

      帶where帶索引:delete delay_monitor set Ftime=now() where id=2;

      帶where無(wú)索引+limit:delete delay_monitor set Ftime=now() where Fgtid='test' limit 1;

      帶where有索引+limit:delete delay_monitor set Ftime=now() where id =2 limit1;

總結(jié)如下表:key表示所有、const表示常量

操作  no where where key where nokey  limit where nokey+limit where key+limit      where const where const+limit
delete     NO YES NO NO YES YES NO     NO
update NO YES NO YES YES YES NO YES

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • MySQL中參數(shù)sql_safe_updates在生產(chǎn)環(huán)境的使用詳解

標(biāo)簽:撫順 固原 溫州 內(nèi)江 廣西 汕尾 防疫工作 浙江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解》,本文關(guān)鍵詞  mysql,利用,參數(shù),sql,safe,updates,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    顺昌县| 鄂温| 义乌市| 浦北县| 郑州市| 威宁| 三明市| 沿河| 青海省| 新丰县| 汽车| 盘锦市| 墨竹工卡县| 三河市| 永和县| 靖远县| 社旗县| 凉城县| 泸溪县| 沂南县| 泸西县| 临猗县| 甘孜| 雷波县| 大名县| 盐津县| 龙江县| 始兴县| 株洲县| 丹凤县| 夏河县| 无为县| 容城县| 宣恩县| 察雅县| 连城县| 罗源县| 安庆市| 黑河市| 普陀区| 澳门|