主頁 > 資料庫 > Oracle資料庫之第四篇

Oracle資料庫之第四篇

2020-09-14 22:22:11 資料庫

/*      授權命令 grant 權限 to 用戶          授權可以授予多個權限          grant  connect,resource to baidu         識訓權限  revoke  權限 from  用戶          revoke dba from baidu                創建用戶 分配表空間--指定用戶的默認表空間         create  table p(..) 建表存在默認表空間          --建表時候指定表空間          create table p(...) talebspace 表空間名    */    /*     PlSql編程語言  procedure language 程序語言          是在sql陳述句中加入一些處理程序的陳述句          常見的條件運算式 if else  還有回圈結構     基本結構        declare           --宣告部分 理解為定義              --宣告使用的變數        begin           --處理邏輯的代碼塊        end;    */    --psSql簡單示例    declare       v_n number := 1; --宣告數值變數 賦值使用符號:=       v_s varchar2(4) :='s'; --宣告字符型別變數       emp_ename emp.ename%type ;-- 參考型別變數       emp_row   emp%rowtype ;-- 記錄型別變數    begin              dbms_output.put_line('v_n====='||v_n); --輸出陳述句相當于sys out        dbms_output.put_line('v_s====='||v_s);              select ename into emp_ename from emp where empno=7499; --使用into關鍵字賦值       dbms_output.put_line('emp_ename====='||emp_ename);              select  * into  emp_row    from emp where empno = 7499; --賦值記錄型別變數       dbms_output.put_line('員工編號=='||emp_row.empno||'員工姓名'||emp_row.ename);    end;    /*      plsql 的條件運算式判斷      if .. 處理陳述句 else if ..處理陳述句      -------------------------      if .. then        elsif .. then        else        end if;       */    ---使用條件運算式判斷員工的工資 使用漢字輸出    declare             emp_row   emp%rowtype ;-- 記錄型別變數    begin             select  * into  emp_row    from emp where empno = 7499; --賦值記錄型別變數       --使用運算式判斷工資       if emp_row.sal > 3000 then          dbms_output.put_line('員工工資大于3000=='||emp_row.sal);       elsif   emp_row.sal < 1000  then          dbms_output.put_line('員工工資小于1000=='||emp_row.sal);       else           dbms_output.put_line('員工工資位于1000到3000之間=='||emp_row.sal);       end if;           end;    /*      回圈結構    第一種-----      loop        exit when 條件      end loop;    第二種 ---      while 條件 loop              end loop;    第三種 ---      for 變數  in  范圍 loop              end loop;    */    -------使用回圈輸出數字 1-----10    /*    第一種      loop        exit when 條件      end loop;    */    declare       v_n number :=1;    begin            loop         --只是用來判斷退出使用的,并不是相當于if()else{}        exit when v_n>10 ;   --退出條件        dbms_output.put_line(v_n);        v_n:=v_n+1;   --自增      end loop;    end;    /*    第二種      while 條件  loop              end loop;    */    declare       v_n number :=1;    begin            while v_n<11  loop        dbms_output.put_line(v_n);        v_n:=v_n+1;   --自增      end loop;    end;    /*      第三種      for 變數 in 范圍 loop  變數的宣告和范圍的控制是由for回圈自動執行              end loop;    */    declare    begin            for i in 1..10  loop        dbms_output.put_line(i);      end loop;    end;    /*      游標 游標  是用于接收查詢的記錄結果集 ResultSet 提示記錄使用.next()      游標的使用步驟         宣告游標 cursor 游標名 is select 陳述句 指定游標的記錄結果集         打開游標  open  游標名         提取游標  fetch 游標名 into 記錄型別變數          關閉游標  close cursor      游標的兩個屬性  游標名%found     : 判斷它有找到                      游標名%notfound  : 判斷它沒有找到        if  emp_cursor%found then           dbms_output.put_line('found');         elsif  emp_cursor%notfound then           dbms_output.put_line('notfound');         elsif emp_cursor%notfound is null then            dbms_output.put_line('null');         end if;    */    --使用while回圈結構演示游標    declare         --宣告游標         cursor emp_cursor is select * from emp;         --宣告記錄型別變數 用于接收游標提取的記錄         emp_row  emp%rowtype;     begin         --打開游標         open emp_cursor;          --提取游標(判斷下一個是否有值)         fetch emp_cursor into emp_row ;         --有值就執行while回圈         while emp_cursor%found  loop            dbms_output.put_line(emp_row.empno||'員工姓名'||emp_row.ename);            --繼續提取游標(并判斷下一個是否有值)            fetch emp_cursor into emp_row ;         end loop;         close emp_cursor;    end;    /*     loop          exit when 游標提取不到     end loop    */    declare         --宣告游標         cursor emp_cursor is select * from emp;         --宣告記錄型別變數 用于接收游標提取的記錄         emp_row  emp%rowtype;     begin         --打開游標         open emp_cursor;          loop           fetch emp_cursor into emp_row;           exit when emp_cursor%notfound;             dbms_output.put_line(emp_row.empno||'員工姓名'||emp_row.ename);         end loop;         close emp_cursor;    end;    --使用游標提取某個部門的員工資訊    --宣告帶引數的游標資訊    declare         --宣告游標         cursor emp_cursor(dno number) is select * from emp where deptno = dno ;         --宣告記錄型別變數 用于接收游標提取的記錄         emp_row  emp%rowtype;     begin         --打開游標 時候傳入引數         open emp_cursor(10);          loop           fetch emp_cursor into emp_row;           exit when emp_cursor%notfound;             dbms_output.put_line(emp_row.empno||'員工姓名'||emp_row.ename);         end loop;         close emp_cursor;    end;    /*      錯誤資訊開發中的例外      資料庫中叫做 例外            例外的分類 1.系統例外 系統定義好的例外                                                  2.自定義的例外                         new 自定義類繼承Exception 自定義傳值(錯誤代碼,提示資訊)                         使用場景                            不滿足某些特定業務場景,拋出自定義例外            例外的處理               java  try{}catche(IndexOutOfBoundException e){}catche(Exception e){}               java  try{}catche(Exception e){} catche(IndexOutOfBoundException e){}--報錯               資料庫可以捕捉處理例外                     exception   關鍵字捕捉例外                       when 例外型別 then 處理陳述句   判斷例外型別 處理例外                                */    --例外的簡單示例    /*      --除0的例外 除數為0      --賦值錯誤          */    declare      v_n number :=0;      v_m number :=1;          begin      v_m:='s';  --將字串賦值給數值變數      v_m:= v_m/v_n;    exception            when zero_divide then         dbms_output.put_line('除數不能為0');      when value_error then        dbms_output.put_line('賦值有誤');    end;    ---處理太多記錄數例外    declare             emp_row   emp%rowtype ;-- 記錄型別變數    begin             select  * into  emp_row  from emp ; --賦值記錄型別           exception             when too_many_rows then          dbms_output.put_line('太多記錄數');         when others then    --others是最大范圍的例外 相當于java 的 Exception         dbms_output.put_line('其他例外');    end;    /*       需求 :使用游標查詢部門下的員工資訊              如果部門下沒有員工 報錯提示       需要自定義例外        變數名  exception     --宣告自定義例外                  */    declare             cursor emp_cursor is select * from emp where deptno= 40;  --游標結果集不存在        emp_row   emp%rowtype ;-- 記錄型別變數       no_dept_emp  exception ;  --宣告自定義例外    begin       open emp_cursor;  --打開游標                   fetch emp_cursor into emp_row;           if emp_cursor%notfound then             --沒有員工  拋出錯誤例外             raise no_dept_emp;           end if;       close emp_cursor;    exception       when no_dept_emp then          dbms_output.put_line('部門下面沒人,快招人吧');    end;    /*           存盤程序 是一段封裝好的代碼塊,程序是編譯好放在服務器提供開發人員呼叫                    封裝的代碼塊意義:  提升開發效率  可以復用 誰用直接呼叫                                  提升運行效率 一呼叫直接運行       語法:create [or repalce]   procedure 程序名稱(引數名 out|in  引數型別)              as|is                 --宣告變數的部分              begin                 --處理程序陳述句代碼塊             end;       呼叫存盤程序          在begin和end之間使用 程序名傳參呼叫    */    --存盤程序的簡單示例  使用存盤程序給某個員工增加工資100    create or replace procedure add_sal(eno in number )    as      emp_sal number :=0;    begin      select sal into emp_sal from emp where empno = eno ;      dbms_output.put_line('漲工資之前是===='||emp_sal);      update emp set sal=sal+100 where empno = eno;      select sal into emp_sal from emp where empno = eno ;      dbms_output.put_line('漲工資之后是===='||emp_sal);      commit;    end;    --------呼叫存盤程序    declare    begin      add_sal(7499);    end;    /*      使用存盤程序統計某個員工的年薪,年薪需要回傳輸出列印      in 型別輸入引數可以 省略 默認就是輸入引數    */    create or replace procedure count_sal(eno number,year_sal out number)    as    begin              select sal*12+nvl(comm,0) into year_sal  from emp where empno=eno; --使用into賦值給輸出引數    end;    ----呼叫存盤程序計算年薪    declare      v_emp_sal number :=0;      begin      count_sal(7499,v_emp_sal);      dbms_output.put_line('年薪為=='||v_emp_sal);    end;    /*      使用存盤程序 查詢出某個部門的員工資訊      某個部門應該接受一個in型別的輸入引數      查詢到的部門員工多條記錄回傳應該使用結果集       宣告游標 cursor 游標名 is select 陳述句指定結果集      系統參考游標       sys_refcursor        宣告系統參考游標  變數名 sys_refcursor;  --不需要指定結果集       打開游標      open 系統參考游標 for select 陳述句  --使用for關鍵字裝入資料    */    create or replace procedure dept_emp(dno number,cusor_emp out sys_refcursor)    as    begin      --根據傳進來的部門編號給游標裝入結果集資料      open cusor_emp for select * from emp  where deptno = dno;       end;    ----呼叫存盤程序查詢部門下的員工    declare       cursor_emp sys_refcursor;  --宣告系統參考游標傳參使用       emp_row emp%rowtype ;--記錄型別變數    begin      dept_emp(10,cursor_emp);      --提取游標中的資料      loop        fetch cursor_emp into emp_row;        exit when cursor_emp%notfound;        dbms_output.put_line('編號'||emp_row.empno||'姓名'||emp_row.ename);      end loop;      close cursor_emp;     end;    /*      存盤函式 是一段封裝好的代碼塊,是編譯好放在服務器提供開發人員呼叫                    封裝的代碼塊意義:  提升開發效率  可以復用 誰用直接呼叫                                  提升運行效率 一呼叫直接運行                                         語法:create [or repalce]   function 函式名稱(引數名 out|in  引數型別) return 資料型別                                                    in 代表傳入引數,out 代表傳出引數                                     as|is                 --宣告變數的部分              begin                 --處理程序陳述句代碼塊                 --return 變數             end;       呼叫存盤函式          在begin和end之間使用 函式名傳參呼叫 函式必須使用變數接收 回傳值          */    --使用存盤函式統計某個員工的年薪    create or replace function count_emp_sal(eno number,year_sal out number) return number    as      v_sal number :=0;    begin              select sal*12+nvl(comm,0) into year_sal  from emp where empno=eno; --使用into賦值給輸出引數        return v_sal;    end;    --不帶out型別輸出引數統計年薪    create or replace function count_sal_noout(eno number) return number    as      v_sal number :=0;    begin              select sal*12+nvl(comm,0) into v_sal  from emp where empno=eno; --使用into賦值給輸出引數        return v_sal;    end;    --呼叫函式統計年薪    declare      emp_sal number:=0;      total_sal number :=0;    begin       --total_sal := count_emp_sal(7499,emp_sal);       total_sal := count_sal_noout(7499);       dbms_output.put_line(emp_sal);--0       dbms_output.put_line(total_sal); --統計后年薪    end;    /*       存盤函式和程序的區別                  1.創建的關鍵字  procedure   funciton           2.創建函式 必須使用return 宣告函式的回傳變數資料型別           3.在函式的方法體內 必須使用return 回傳一個變數           4.函式的呼叫 必須有變數接識訓傳值           5.函式可以用在select 查詢陳述句中  select emp.*,count_sal_noout(empno) from emp;              存盤函式和程序使用場景           開發規范 java代碼待用程序 程序是用來處理業務邏輯代碼           如果邏輯中需要用到一些功能性的封裝,可以呼叫函式           90%情況下 函式和程序通用 程序可以呼叫函式,函式同樣可以呼叫程序           */    /*      觸發器 是一個監視器,監視對表中資料的操作           如果對資料的操作滿足觸發器的執行條件,           觸發器會自動運行      觸發器語法:          create or repalce trigger 觸發器名稱          after|before   --觸發器執行時機          insert|update|delete  --監視的動作          on 表名       --表級觸發器          declare          begin                    end;       行級觸發器                    insert        update        delete           :new   動作之后的記錄   要插入的記錄   修改后的記錄     空           :old   動作之前的記錄      空          原始的記錄     原始的記錄               */    --創建觸發器監視表,如果表中有資料插入,輸出一個歡迎陳述句    create or replace trigger insert_trigger    after    insert    on p    declare           begin       dbms_output.put_line('歡迎加入!');    end;    ----插入資料測驗效果    insert into p values(1,'zs');    commit;    --插入資料不能在休息日插入資料    --休息日 周六和周日    /*     raise_application_error(v1,v2) v1錯誤代碼  v2是提示陳述句                                      -20000 -20999     */    create or replace trigger insert_no_work    before    insert    on p    declare       v_day varchar2(10) ;    begin      --獲取到當前星期      select to_char(sysdate,'day') into v_day from dual;      --判斷星期是否在休息日      if trim(v_day)  in ('saturday','sunday') then      --如果休息 錯誤提示         raise_application_error(-20001,'不能休息日插入資料');      end if;    end;    ----插入資料測驗效果    insert into p values(1,'zs');    commit;    --使用觸發器監視表中資料修改,不能做降低工資的操作    create or replace trigger can_not_low    before    update    on emp    for each row --行級觸發器    declare          begin      --獲取到原始記錄的工資  --獲取修改后的工資      if :old.sal > :new.sal then      --談錯誤框提示      raise_application_error(-20002,'不能降低工資');      end if;    end;    --修改員工的工資測驗觸發器    update emp set sal=sal-1 where empno=7499;    /*      觸發器實際應用           使用觸發器實作 插入資料的id 自增長 面試題    **/    create or replace trigger auto_increment_id    before        insert    on test_trigger    for each row     declare     begin      --補全將要插入記錄的id      --補全的id 是自增長的數值 如果沒有提前創建序列,需要提前創建序列   --創建序列  create sequence order_sequence       select order_sequence.nextval into :new.pid from dual;    end;    insert into test_trigger(pname,phone) values('zs','1234566');    commit;    package baidu;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import org.junit.Test;import oracle.jdbc.OracleCallableStatement;import oracle.jdbc.OracleTypes;public class TestJdbc {     String driverClass = "oracle.jdbc.driver.OracleDriver";     String url ="jdbc:oracle:thin:@192.168.17.128:1521:orcl";     String user= "baidu_03";     String password = "baidu_03";     /*      *測驗jdbc連接資料庫      *      * */     @Test     public void querEmp(){         try{         //加載驅動         Class.forName(driverClass);         //獲取鏈接         Connection con = DriverManager.getConnection(url, user,password);         //獲取預編譯的statement         PreparedStatement pst= con.prepareStatement("select * from emp");         //執行查詢         ResultSet rs =  pst.executeQuery();         //處理結果         while(rs.next()){             System.out.println(rs.getInt(1)+"員工姓名"+rs.getString("ename"));         }         rs.close();         con.close();         //關閉連接         }catch(Exception e){             e.printStackTrace();         }              }     /*存盤程序的呼叫      * {call <procedure-name>[(<arg1>,<arg2>, ...)]}        add_sal(eno number,addsal number)      * */     @Test     public void callAddSal(){         try{         //加載驅動         Class.forName(driverClass);         //獲取鏈接         Connection con = DriverManager.getConnection(url, user,password);         //獲取預編譯的statement         CallableStatement pst= con.prepareCall("{call add_sal(?,?)}");         pst.setInt(1, 7499);         pst.setInt(2, 1000);         //執行查詢         pst.execute();         con.close();         //關閉連接         }catch(Exception e){             e.printStackTrace();         }              }          /*存盤程序的呼叫      * {call <procedure-name>[(<arg1>,<arg2>, ...)]}        count_yearsal(eno number,total_year_sal out number)      * */     @Test     public void callCountSal(){         try{         //加載驅動         Class.forName(driverClass);         //獲取鏈接         Connection con = DriverManager.getConnection(url, user,password);         //獲取預編譯的statement         CallableStatement pst= con.prepareCall("{call count_yearsal(?,?)}");         pst.setInt(1, 7499);         //注冊輸出引數         pst.registerOutParameter(2, OracleTypes.NUMBER);         //執行查詢         pst.execute();         int total =  pst.getInt(2);         System.out.println(total);         con.close();         //關閉連接         }catch(Exception e){             e.printStackTrace();         }              }     /*      * pro_dept_emp(dno number,dept_emp out sys_refcursor)      * */     @Test     public void callProEmp(){         try{         //加載驅動         Class.forName(driverClass);         //獲取鏈接         Connection con = DriverManager.getConnection(url, user,password);         //獲取預編譯的statement         CallableStatement pst= con.prepareCall("{call pro_dept_emp(?,?)}");         pst.setInt(1, 10);         //注冊輸出引數         pst.registerOutParameter(2, OracleTypes.CURSOR);         //執行查詢         pst.execute();         OracleCallableStatement ocs = (OracleCallableStatement)pst;         ResultSet rs =  ocs.getCursor(2);         while(rs.next()){             System.out.println(rs.getInt(1)+"員工姓名"+rs.getString("ename"));         }         rs.close();         ocs.close();         pst.close();         con.close();         //關閉連接         }catch(Exception e){             e.printStackTrace();         }              }}public void show4(){         try {                          Class.forName(driverClass);             Connection con = DriverManager.getConnection(url, user,password);             CallableStatement pst= con.prepareCall("{?= call count_sal_noout(?)}");             //給第二個引數賦值             pst.setLong(2, 7499);            // stat2.setLong(2, empno);             //宣告第一個引數的型別             pst.registerOutParameter(1, OracleTypes.NUMBER);             pst.execute();             OracleCallableStatement ocs = (OracleCallableStatement)pst;             NUMBER num = ocs.getNUMBER(1);             System.out.println(num);//             long i = pst.getLong(1);//             System.out.println(i);                      con.close();                      } catch (Exception e) {             e.printStackTrace();         }     }/*

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/39218.html

標籤:Oracle

上一篇:lob 按ROWID磁區并行匯出

下一篇:[20190930]oracle raw型別轉化number腳本.txt

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more