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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql storage_mySQL__storage课堂笔记和练习

發(fā)布時間:2023/12/15 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql storage_mySQL__storage课堂笔记和练习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

#存儲過程和函數(shù)

/*

存儲過程和函數(shù)類似于Java中的方法

好處:

1、提高代碼重用性

2、簡化操作

*/

#存儲過程

/*

含義:一組編譯好的SQL語句的集合,理解成批處理語句

1、提高代碼的重用性

2、簡化操作

3、減少了編譯次數(shù)

4、減少了和數(shù)據(jù)庫服務器連接次數(shù),提高了效率

*/

#一、創(chuàng)建

CREATE PROCEDURE 存儲過程名(參數(shù)列表)

BEGIN

存儲過程體(一組合法的SQL語句)

END

注意:

1、參數(shù)列表包含3個部分

參數(shù)模式 參數(shù)名 參數(shù)類型

舉例:

IN stuname VARCHAR(20)

參數(shù)模式:

IN:修飾的參數(shù)可以作為入口,也就是說該參數(shù)需要調用方傳入值

OUT:修飾的參數(shù)可以作為出口,也就是說該參數(shù)可以作為返回值

INOUT:修飾的參數(shù)可以作為出口/入口,既可以傳入值又可以返回值

2、如果存儲過程體僅僅只有1句話,BEGIN END可以省略

3、存儲過程體中的每條SQL語句的結尾要求必須加分號,

存儲過程的結尾可以使用DELIMITER重新設置

語法:

DELIMITER 結束標記

案例:

DELIMITER $

#二、調用

CALL 存儲過程名(實參列表);

#1、空白列表

#案例:插入到admin表中5條記錄

SELECT * FROM admin;

#設置結束標志

DELIMITER $

#定義

CREATE PROCEDURE myp1()

BEGIN

INSERT INTO admin(username,`password`)

VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');

END $

#如果SQLyog中運行不了,就粘貼到cmd打開girls數(shù)據(jù)庫,再運行

#調用

CALL myp1()$#之后結束符號都不是;了,都換成$

SELECT * FROM admin$

#如果SQLyog中運行不了,就粘貼到cmd打開girls數(shù)據(jù)庫,再運行

#2、創(chuàng)建帶in模式參數(shù)的存儲過程

#案例1:創(chuàng)建存儲過程實現(xiàn),根據(jù)女神名查詢對應的男神信息

#IN 可以省略,但是不建議

#定義

CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))

BEGIN

SELECT bo.*

FROM boys bo

RIGHT JOIN beauty b ON bo.id = b.boyfriend_id

WHERE b.name=beautyName;

END$

#調用

CALL myp2('宋茜')$

#如果出現(xiàn)報錯: Incorrect string value: '\xC1\xF8\xD1\xD2' for column 'beautyName' at row 8

#說明是字符集的問題,這時要重新設置一下字符集

SET NAMES gbk$

CALL myp2('宋茜')$#不報錯了

#案例2:創(chuàng)建存儲過程實現(xiàn),用戶登陸是否成功

#定義

CREATE PROCEDURE myp5(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))

BEGIN

#聲明變量,存放存儲結果

DECLARE result INT DEFAULT 0;#聲明并初始化

#賦值

SELECT COUNT(*) INTO result

FROM admin

WHERE admin.`username`=username

AND admin.`password`=PASSWORD;

#使用

SELECT IF(result>0,'成功','失敗');

END$

#調用

CALL myp5('張飛','8888')$

#3、創(chuàng)建帶out模式的存儲過程

#案例1:根據(jù)女神名,返回對應的男神名

CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyname VARCHAR(20))

BEGIN

SELECT bo.boyName INTO boyName

FROM boys bo

INNER JOIN beauty b ON b.boyfriend_id=bo.id

WHERE b.name=beautyName;

END$

#調用

#第二個參數(shù)就是一個變量,不需要有值,用于接收返回值

SET @bName$#定義一個用戶變量,甚至可以不定義,直接用@bName

CALL myp6('宋茜',@bName)$

SELECT @bName$#這就是男神名

#案例2:根據(jù)女神名,返回對應的男神名和男神的魅力值

CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)

BEGIN

SELECT bo.boyName,bo.userCP INTO boyName,userCP

FROM boys bo

INNER JOIN beauty b ON b.boyfriend_id=bo.id

WHERE b.name=beautyName;

END$

#調用

CALL myp7('宋茜',@bName,@usercp)$

SELECT @bName,@usercp$

#4、創(chuàng)建帶有inout模式參數(shù)的存儲過程

#案例1:傳入a和b兩個值,最終a和b都翻倍并返回

CREATE PROCEDURE myp8(INOUT a INT, INOUT b INT)

BEGIN

SET a=a*2;

SET b=b*2;

END$

#調用

#注意:不可以直接往存儲過程中傳常數(shù),如果傳常數(shù),返回的值將沒有位置放

#因此在調用之前,必須要先定義兩個有值的變量

SET @m=10$

SET @n=20$

CALL myp8(@m,@n)$

SELECT @m,@n$

#三、存儲過程的刪除

/*

語法:drop procedure 存儲過程名稱

說明:每次只能刪除一個【在SQLyog中就可以運行】

*/

DROP PROCEDURE test_prop3;

#四、查看存儲過程信息

SHOW CREATE PROCEDURE myp2;

#desc myp2是錯誤寫法

#【練習】

#練習1:創(chuàng)建存儲過程,實現(xiàn)傳入用戶名和密碼,插入到admin表中

CREATE PROCEDURE test_pro1(IN username VARCHAR(20),IN loginPwd VARCHAR(20))

BEGIN

INSERT admin(admin.username,PASSWORD)

VALUES(userName,loginPwd);

END;$#這里也可以加個分號

CALL test_pro1('admin','0000')$

SELECT * FROM admin$

#練習2:創(chuàng)建存儲過程實現(xiàn)傳入女神編號,返回女神名稱和女神電話

CREATE PROCEDURE test_pro2(IN id INT, OUT `name` VARCHAR(20) , OUT phone VARCHAR(20))

BEGIN

SELECT b.name,b.phone INTO `name`,phone

FROM beauty b

WHERE b.id=id;

END$

CALL test_pro2(7,@n,@p)$

SELECT @n,@p$

#練習3:創(chuàng)建存儲過程或函數(shù)實現(xiàn)傳入兩個女神生日,返回大小

CREATE PROCEDURE test_pro3(IN birth1 DATETIME, IN birth2 DATETIME,OUT result INT)

BEGIN

SELECT DATEDIFF(birth1,birth2) INTO result;

END$

CALL test_pro3('1998-1-1',NOW(),@result)$

SELECT @result$

#練習4:創(chuàng)建存儲過程或函數(shù)實現(xiàn)傳入一個日期,格式化成xx年xx月xx日并返回

CREATE PROCEDURE test_pro4(IN mydate DATETIME,OUT strDate VARCHAR(50))

BEGIN

SELECT DATE_FORMAT(mydate,'%y年%m月%d日') INTO strDate;

#DATE_FORMAT將日期轉換為字符串并且返回一個字符串

END$

CALL test_pro4(NOW(),@str)$

SELECT @str$

#練習5:創(chuàng)建存儲過程或函數(shù)實現(xiàn)傳入女神名稱,返回:女神 and 男神 格式的字符串

CREATE PROCEDURE test_pro5(IN beautyName VARCHAR(20),OUT str VARCHAR(50))

BEGIN

SELECT CONCAT(beautyName,' and ',IFNULL(boyName,'null')) INTO str

FROM boys bo

RIGHT JOIN beauty b ON b.boyfriend_id=bo.id

WHERE b.name=beautyName;

END$

CALL test_pro5('宋茜',@str)$

SELECT @str$

#練習6:創(chuàng)建存儲過程函數(shù),根據(jù)傳入的條目數(shù)和起始索引,查詢beauty表的記錄

CREATE PROCEDURE test_pro6(IN startIndex INT, IN size INT)

BEGIN

SELECT * FROM beauty LIMIT startIndex,size;

END$

CALL test_pro6(1,2)$#索引和id無關

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的mysql storage_mySQL__storage课堂笔记和练习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。