本文實例講述了MySQL存儲結(jié)構用法。分享給大家供大家參考,具體如下:
前言
今天公司老大讓我做一個MySQL的調(diào)研工作,是關于MySQL的存儲結(jié)構的使用。這里我會通過3個例子來介紹一下MySQL中存儲結(jié)構的使用過程,以及一些需要注意的點。
筆者環(huán)境
系統(tǒng):Windows 7
MySQL:MySQL 5.0.96
準備工作
1.新建兩張數(shù)據(jù)表: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中新增數(shù)據(jù)
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);
實現(xiàn)功能說明
1.打印student1中的部分信息
2.把student1中的部分數(shù)據(jù)復制到student2中
3.傳入?yún)?shù)作為限制條件,把student1中的部分數(shù)據(jù)復制到student2中
注意事項
在編寫存儲結(jié)構的時候,我們不能以分號(;)結(jié)束。因為我們的SQL語句就是以分號(;)結(jié)尾的。這里我們要修改一下存儲結(jié)構的結(jié)束符號()。
這里我們使用MySQL中的DELIMITER進行修改,并在存儲結(jié)構創(chuàng)建完畢時,再改為分號(;)結(jié)束即可。
關于這一點在后面的例子中有所體現(xiàn)。在編寫MySQL的觸發(fā)器中,也會用到類似的情況。
使用方式
1.打印student1中的部分信息
---------------------------------------------------------------
DROP PROCEDURE IF EXISTS test_pro1;
---------------------------------------------------------------
DELIMITER
CREATE PROCEDURE test_pro1()
BEGIN
set @sentence = 'select * from student1 where age19;';
prepare stmt from @sentence;
execute stmt;
deallocate prepare stmt;
END
DELIMITER ;
2.復制表存儲過程的編寫(不帶參數(shù))
---------------------------------------------------------------
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 age19);
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.復制表存儲過程的編寫(帶參數(shù))
---------------------------------------------------------------
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 agep_age);
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 ;
這里的SQLSTATE '02000'和NOT FOUND系統(tǒng)返回值是一樣的。
4.使用方式
or
更多關于MySQL相關內(nèi)容感興趣的讀者可查看本站專題:《MySQL存儲過程技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》及《MySQL數(shù)據(jù)庫鎖相關技巧匯總》
希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。
您可能感興趣的文章:- MySQL兩種表存儲結(jié)構MyISAM和InnoDB的性能比較測試
- Mysql通過Adjacency List(鄰接表)存儲樹形結(jié)構
- mysql 存儲過程中變量的定義與賦值操作
- mysql存儲過程詳解
- 更改Mysql數(shù)據(jù)庫存儲位置的具體步驟
- mysql存儲過程 游標 循環(huán)使用介紹
- mysql 海量數(shù)據(jù)的存儲和訪問解決方案
- MySQL存儲引擎總結(jié)
- MySQL存儲毫秒數(shù)據(jù)的方法
- MySql存儲過程與函數(shù)詳解