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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL存储结构的使用

發布時間:2025/3/20 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL存储结构的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

? 今天公司老大讓我做一個MySQL的調研工作,是關于MySQL的存儲結構的使用。這里我會通過3個例子來介紹一下MySQL中存儲結構的使用過程,以及一些需要注意的點。


筆者環境

? 系統:Windows 7

? MySQL:MySQL 5.0.96


準備工作

1.新建兩張數據表:student1, student2

新建student1

DROP TABLE IF EXISTS student1; CREATE TABLE student1 ( id INT NOT NULL auto_increment, name TEXT, age INT, PRIMARY KEY(id) );
新建student2

DROP TABLE IF EXISTS student2; CREATE TABLE student2 ( id INT NOT NULL auto_increment, name TEXT, age INT, PRIMARY KEY(id) );

2.向student1中新增數據

INSERT INTO student1 (name, age) VALUES ('xiaoming', 18); INSERT INTO student1 (name, age) VALUES ('xiaohong', 17); INSERT INTO student1 (name, age) VALUES ('xiaogang', 19); INSERT INTO student1 (name, age) VALUES ('xiaoyu', 18); INSERT INTO student1 (name, age) VALUES ('xiaohua', 20);

實現功能說明

1.打印student1中的部分信息
2.把student1中的部分數據復制到student2中
3.傳入參數作為限制條件,把student1中的部分數據復制到student2中


注意事項

在編寫存儲結構的時候,我們不能以分號(;)結束。因為我們的SQL語句就是以分號(;)結尾的。這里我們要修改一下存儲結構的結束符號(&&)。

這里我們使用MySQL中的DELIMITER進行修改,并在存儲結構創建完畢時,再改為分號(;)結束即可。

關于這一點在后面的例子中有所體現。在編寫MySQL的觸發器中,也會用到類似的情況。


使用方式

1.打印student1中的部分信息

--------------------------------------------------------------- DROP PROCEDURE IF EXISTS test_pro1; --------------------------------------------------------------- DELIMITER && CREATE PROCEDURE test_pro1() BEGINset @sentence = 'select * from student1 where age<19;';prepare stmt from @sentence;execute stmt;deallocate prepare stmt; END && DELIMITER ;?

2.復制表存儲過程的編寫(不帶參數)

--------------------------------------------------------------- DROP PROCEDURE IF EXISTS test_pro2; --------------------------------------------------------------- DELIMITER && create procedure test_pro2() beginDECLARE stop_flag INT DEFAULT 0;DECLARE s_name TEXT default '';DECLARE s_age INT default 0;DECLARE cur1 CURSOR FOR (select name, age from student1 where age<19);DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop_flag=1;open cur1;fetch cur1 into s_name, s_age;while stop_flag<>1 DOinsert into student2(name, age) values(s_name, s_age);fetch cur1 into s_name, s_age;end while;close cur1; end && DELIMITER ;

3.復制表存儲過程的編寫(帶參數)

--------------------------------------------------------------- DROP PROCEDURE IF EXISTS test_pro3; --------------------------------------------------------------- DELIMITER && create procedure test_pro3(IN p_age INT) beginDECLARE stop_flag INT DEFAULT 0;DECLARE s_name TEXT default '';DECLARE s_age INT default 0;DECLARE cur1 CURSOR FOR (select name, age from student1 where age<p_age);DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop_flag=1;open cur1;fetch cur1 into s_name, s_age;while stop_flag<>1 DOinsert into student2(name, age) values(s_name, s_age);fetch cur1 into s_name, s_age;end while;close cur1; end && DELIMITER ; 這里的SQLSTATE '02000'和NOT FOUND系統返回值是一樣的。

4.使用方式

call test_pro1(); or call test_pro1(123);

總結

以上是生活随笔為你收集整理的MySQL存储结构的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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