程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL存儲結構的使用

MySQL存儲結構的使用

編輯:MySQL綜合教程

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()
BEGIN
  set @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()
begin
    DECLARE 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 DO
        insert 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)
begin
    DECLARE 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 age1 DO
        insert into student2(name, age) values(s_name, s_age);
        fetch cur1 into s_name, s_age;
    end while;
    close cur1;
end &&
DELIMITER ;

4.使用方式:

 

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved