日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL中引入存储引擎意义是_mysql学习九:存储引擎、存储过程和函数的引入

發布時間:2023/12/2 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL中引入存储引擎意义是_mysql学习九:存储引擎、存储过程和函数的引入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

存儲引擎:

存儲引擎是mysql特有的,共有7種,常用的有myisam、memory、innodb

查看表的存儲引擎:

show create table 表名;

修改表的存儲引擎:

alter table 表名 engine=存儲引擎名稱;

1.myisam存儲引擎:可轉換為壓縮只讀表來節省空間

使用三個文件表示每個表:

格式文件--存儲表的結構? 表名.frm

數據文件---存儲表的數據? 表名.MYD

索引文件--存儲表的索引 表名.MYI

2.innodb存儲引擎的特征:

每個innodb表,在數據庫目錄中以.frm格式文件表示

innodb表空間tablespace被用于存儲表的內容

提供一組用來記錄事務性活動的日志文件

用commit提交、savepoint 及rollback(回滾)支持事務處理

提供全部acid兼容

在mysql服務器崩潰后,提供自動恢復

多版本mvcc和行級鎖

支持外鍵,及引用的完整性,包括級聯更新和刪除

3.memory存儲引擎,以前被稱為headp引擎

使用memory存儲引擎的表,因為數據存儲在內存中,且行的長度固定,所以使得memory存儲引擎非常快

memory存儲引擎管理的表具有下列特征

在數據庫目錄內,每個表均以.frm格式文件表示

表數據及索引被存儲在內存中

表級鎖機制

字段屬性不能包含text或blob字段

選擇合適的存儲引擎:

myisam表最適合于大量的數據讀而少量數據更新的混合操作。myisam表的另一種適用情形是使用壓縮的只讀表。

如果查詢中包含較的數據更新操作,應使用innodb。其行級鎖機制和多版本的支持為數據讀取和更新的混合提供了良好的并發機制。

使用memory存儲引擎存儲非永久需要的數據,或者是能夠從基于磁盤的表中重新生成的數據。

存儲過程和函數,是在數據庫中定義一些SQL語句的集合,然后直接調用這些存儲過程和函數來執行已經定義好的sql語句。

存儲過程和函數,可以避免開發人員重復的編寫相同的sql語句;而且,存儲過程和函數是在mysql服務器中存儲和執行的,可以減少客戶端和服務端的數據傳輸;

一、創建存儲過程和存儲函數

1.創建存儲過程

create procedure 存儲過程的名稱 ([proc_parameter[,......]]) [characteristic......] routine_body

proc_parameter:表示存儲過程的參數列表;由3分部分組成,輸入輸出類型、參數名和參數類型---[in | out | inout] param_name type

其中,in表示輸入參數;out表示輸出參數;inout表示既可以是輸入,也可以是輸出

param_name,是存儲過程的參數的名稱

type:指定存儲過程的參數類型,該類型可以是mysql數據庫的任意數據類型

characteristic:指定存儲過程的特性、配置;有多個可取值

language sql:說明 routine_body部分是由sql語言的語句組成,這也是數據庫系統默認的語言

[not] deterministic:指明存儲過程的執行結果是否是確定的。deterministic表明每次執行存儲過程時,相同的輸入會得到相同的輸出。not deterministic表示結果是非確定的,相同的輸入可能得到不同的輸出。默認情況下,結果是非確定的。

{contains sql | no sql | reads sql data | modifies sql data }:指明子程序使用sql語句的限制

contains sql表示子程序包含sql語句;

no sql表示子程序中不包含sql語句

reads sql data表示子程序中包含讀數據的語句

modifies sql data表示子程序中包含寫數據的語句

默認情況下,系統會指定為contains sql

sql security {definer |invoker}:指明誰有權限來執行。definer表示只有定義者自己才能夠執行;invoker表示調用者可以執行。默認情況下,系統指定的權限是definer。

comment "string":注釋信息

routine_boy:是sql代碼的內容,可以用begin......end來標志sql代碼的開始和結束。如果bign,end中有多條語句,則要在begin,end的前后再加上delimiter |......| delimiter

delimiter &&

CREATE PROCEDURE pro_book ( IN bt INT, OUT count_num INT) READS SQL DATABEGIN

SELECT COUNT(*) FROM book WHERE bookTypeId=bt;END &&delimiter;

調用存儲過程:1,是輸入的參數;@total是輸出的參數;@表示定義的是全局參數

call pro_book(1, @total);

2.創建存儲函數

create function 存儲函數的名稱 ([func_parameter[,......]])

returns type [characteristic....] routine_body;

func_parameter:存儲函數的參數列表。可以由多個參數組成,每個參數由參數名稱和參數類型組成,形式如下:

param_name type:其中,param_name參數是存儲函數的參數名稱;type參數是指定存儲函數的參數類型,該類型可以是mysql數據庫的任意數據類型

returns type:指定返回值的類型

characteristic:指定存儲過程的特性,該參數的取值與存儲過程中的聚會是一樣的

routine_body:是sql的代碼內容,可以用begin....end來標志sql代碼的開始和結束

delimiter &&

CREATE FUNCTION func_book ( bookId INT ) RETURNS VARCHAR ( 20)BEGIN

RETURN ( SELECT bookName FROM book WHERE id =bookId );END &&delimiter;

調用存儲函數:

select func_book(1);select func_book(2);

3.變量的使用

1.)定義變量

declare 變量名稱[,...] type [default value]

創建示例表:

create table test_user(id int not null auto_increment primary key,

userNamevarchar(20),

passwordvarchar(64)

)

創建存儲過程,定義變量:

delimiter &&

CREATE PROCEDURE pro_user ( ) BEGIN

DECLARE a,b VARCHAR ( 20);INSERT INTO test_user values(null, a, b );END &&delimiter;

調用存儲過程:

call pro_user();

調用存儲過程的結果:

2).為變量賦值

set 變量名=expr[, 變量名=expr].........

創建存儲過程,定義變量,給變量賦值:

delimiter &&

CREATE PROCEDUREpro_user2 ( )BEGIN

DECLARE a,b VARCHAR ( 20);set a='java123',b='1234235';INSERT INTO test_user values(null, a, b );END &&delimiter;

調用存儲過程:

call pro_user2;

另一種賦值方式: select ..... into 變量名

delimiter &&

CREATE PROCEDUREpro_user3 ( )BEGIN

DECLARE a,b VARCHAR ( 20);SELECT userName, password INTO a,b FROM test_user where id=1;INSERT INTO test_user values(null, a, b );END &&delimiter;

call pro_user3;

4.游標的使用

查詢語句可能查詢出多條記錄,在存儲過程和存儲函數中使用游標來逐條讀取查詢結果集中的記錄。

游標的使用,包括聲明游標、打開游標、使用游標和關閉游標。

游標必須聲明在處理程序之前,并且聲明在變量和條件之后。

1).聲明游標:

declare 游標名稱 cursor for select查詢語句;

2).打開游標

open 游標名稱;

3).使用游標

fetch 游標名稱 into 變量名稱[,變量名稱......]

創建存儲過程,定義變量,定義打開使用關閉游標:使用游標查詢的結果,賦值給變量

delimiter &&

CREATE PROCEDUREpro_user4 ( )BEGIN

DECLARE a,b VARCHAR ( 20);DECLARE cur_test_user CURSOR FOR SELECT userName,password FROM test_user where id=2;OPENcur_test_user;FETCH cur_test_user INTOa, b;INSERT INTO test_user values(null, a, b );CLOSEcur_test_user;END &&delimiter;

調用存儲過程:

call pro_user4;

5.流程的控制

存儲過程和存儲函數中,可以使用流程控制來控制語句的執行。

mysql中,可以使用if、case、loop、leave、iterate、repeat、while語句來控制流程

1).IF語句

IF search_condition THENstatement_list[ELSEIF search_condition THEN statement_list]........[ELSE statement_list]

END IF

示例:

delimiter &&

CREATE PROCEDURE pro_user5 (in id int)BEGIN

SELECT count(*) INTO @numm from user1 WHERE id=id;IF @num > 0 THEN UPDATE user1 SET userName='java12345' WHERE id=id;ELSE

INSERT INTO user1 VALUES(null, 'java12345', '123123');END IF;END &&delimiter;

call pro_user5(5);

call pro_user5(5);

2).CASE語句

CASEcase_valueWHEN when_value THENstatement_list[WHEN when_value THEN statement_list]......[ELSE statement_list]

END CASE

示例:

delimiter &&

CREATE PROCEDURE pro_user6 (in id int)BEGIN

SELECT count(*) INTO @numm from user1 WHERE id=id;CASE @num

WHEN 1 THEN UPDATE user1 SET userName='python123' where id=id;WHEN 2 THEN INSERT INTO user1 VALUES(null,'python123', '123456');ELSE INSERT INTO user1 VALUES(null, 'JS123', '1111111');END CASE;END &&delimiter;

call pro_user6(5);

3).LOOP、LEAVE語句

LOOP語句可以使某些特定的語句重復執行,實現一個簡單的循環。

但是LOOP語句本身沒有停止循環的語句,必須遇到LEAVE語句等,才會停止。

[begin_label:]LOOP

statement_listEND LOOP [end_label]

示例:

delimiter &&

CREATE PROCEDURE pro_user7 (in totalNum int)BEGINaaaLable:LOOPIF totalNum=0 THENLEAVE aaaLable;ELSE INSERT INTO user1 VALUES (totalNum, '123', '123');END IF;SET totalNum=totalNum-1;ENDLOOP aaaLable;END &&delimiter;

call pro_user7(10);

4.ITERATE語句:也是用來跳出循環。但是,ITERATE語句是跳出本次循環,然后直接進入下一次循環。相當于,continue

ITERATE label;

delimiter &&

CREATE PROCEDURE pro_user8 (in totalNum int)BEGINaaaLable:LOOPSET totalNum=totalNum-1;IF totalNum=0 THENLEAVE aaaLable;

ELSEIF totalNum=3 THENITERATE aaaLable;END IF;INSERT INTO user1 VALUES (totalNum, '123456', '123456');ENDLOOP aaaLable;END &&delimiter;

call pro_user8(11);

5.REPEAT語句:是有條件控制的循環語句。當滿足特定條件時,就會跳出循環語句。

[label:]REPEAT

statement_list

UNTIL search_conditionEND REPEAT [label]

delimiter &&

CREATE PROCEDURE pro_user9 (in totalNum int)BEGINaaaLable:REAPEATSET totalNum=totalNum-1;INSERT INTO user1 VALUES (totalNum, '111', '111');

UNTIL totalNum=1;ENDREPEAT aaaLable;END &&delimiter;

6.WHILE語句

[label:] WHILEsearch_condition DO

statement_list

END WHILE [label]

示例:

delimiter &&

CREATE PROCEDURE pro_user10 (in totalNum int)BEGIN

WHILE totalNum > 0DOINSERT INTO user1 VALUES (totalNum, '111', '111');SET totalNum=totalNum-1;END WHILE;END &&delimiter;

call pro_user10(10);

二、調用存儲過程和函數

1.調用存儲過程

call 存儲過程的名稱([parameter[,........]);

2.調用存儲函數

call 存儲函數的名稱([parameter[,........]);

三、查看存儲過程和函數

1 show status:查看存儲過程和函數的狀態

show {procedure|function} status [like 'pattern'];

2.show create:查看存儲過程的函數的定義

show create {procedure|function} 存儲函數的名稱;

3.從information_schema.Routins表中,查看存儲過程和函數的信息

四、修改存儲過程和函數

alter {procedure|function} 名稱 [characteristic.......]

characteristic:

contains sql | no sql | reads sql data | modifies sql data

| sql security {definer | invoker}

|comment 'string'

contains sql:表示子程序包含sql讀或寫語句,默認值

no sql:表示子程序中不包含sql語句

reads sql data:表示子程序中包含讀數據的語句

modifies sql data:表示子特別子程序中包含寫數據的語句

sql security {definer | invoker}:指明誰有權限執行

definer---表示只有定義者自己才能夠執行;invoker--表示調用者可以執行

comment 'string':注釋信息

alter procedure pro_book comment '測試....';

刪除存儲過程或函數:

drop produce pro_book;

總結

以上是生活随笔為你收集整理的MySQL中引入存储引擎意义是_mysql学习九:存储引擎、存储过程和函数的引入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲视频在线网 | 精品一二三区 | 日韩精品一二三四区 | 久久久久久1 | 国产精品一区二区三区免费在线观看 | 天堂a√在线 | 麻豆影视在线免费观看 | 天天干夜夜操 | 蜜桃视频久久一区免费观看入口 | 好吊色一区二区三区 | 爱爱视频在线看 | 成年午夜视频 | 久久亚洲熟女cc98cm | 久久噜噜噜 | 中文字幕久久av | 视频在线观看91 | 日本天堂影院 | www.操| 国产精品久久久久久久久久久不卡 | 青青草青青操 | 亚洲国产av一区二区三区 | 乱熟女高潮一区二区在线 | 夜夜操网 | 九九免费在线视频 | 6080成人 | 日韩人妻无码一区二区三区 | 欧美日韩激情 | 国产成人无码AA精品区 | 欧美久久影院 | 国产高清sp | 中文字幕一区二区三 | 国产一级片自拍 | 成人午夜视频网站 | 波多野结衣亚洲一区 | 免费观看成年人网站 | aa毛片视频| 激情五月开心婷婷 | 欧美激情 国产精品 | 色无极亚洲色图 | 亚洲国产日韩欧美在线观看 | 男人天堂国产 | 在线播放不卡 | 动漫玉足吸乳羞免费网站玉足 | 亚洲美女一区 | 免费观看黄一级视频 | 成人在线免费观看网址 | 羞羞成人 | 精品国自产在线观看 | 天堂资源网 | 无码人妻一区二区三区在线视频 | 2018天天操 | 在线看片你懂得 | 99干99 | 欧美夫妻性生活视频 | 老熟女高潮一区二区三区 | 日韩精品欧美精品 | 精品欧美一区二区久久久久 | 大尺度叫床戏做爰视频 | 欧美日韩亚洲激情 | 日本电车痴汉 | 无码成人精品区一级毛片 | 韩国日本美国免费毛片 | 爱爱91 | 天天色综合av | 91av影院 | 欧美少妇b | 欧美性猛交ⅹxx乱大交 | 久久99久久99精品免视看婷婷 | 吊侵犯の奶水授乳羞羞漫画 | 91在线免费播放 | 巨乳xxx| 蜜桃在线一区二区三区 | 欧美肥妇bwbwbwbxx | 国产毛片毛片毛片毛片毛片 | 国产高中女学生第一次 | 成人免费视频一区二区 | 涩涩97| 亚洲福利社区 | 四川丰满妇女毛片四川话 | 91视频久久 | 又大又长粗又爽又黄少妇视频 | 黄色三级免费观看 | 麻豆免费在线视频 | 不卡二区 | 免费黄色国产 | 成人欧美在线 | 好吊色一区二区三区 | 很色的网站| 就去干成人网 | 黄色片在线免费看 | 日本高清无吗 | 亚洲av无码一区二区二三区软件 | 日本一区欧美 | 国产探花一区 | 奇米影视7777 | melody在线高清免费观看 | 2019中文字幕在线观看 | 国产精品久久久久久久久久久久久久久久 | 亚洲熟女乱综合一区二区三区 |