日期:2014-05-16  浏览次数:20740 次

MySQL快速掌握之进阶篇

-- ---------------------MySQl进阶-------------------------------------

-- MySQL的存储过程
-- declare生命局部变量
delimiter //
CREATE PROCEDURE pro(IN myid INT);
BEGIN
DECLARE name VARCHAR(20);
SELECT id INTO myid FROM tab1 WHERE name="zhangran";
SELECT myid;
END
//


CALL pro(1);
//




-- 用set命令赋值
delimiter //
CREATE PROCEDURE pro(IN num1 INT,IN num2 INT);
DECLARE num INT;
SET num=num1+num2;
SELECT num;
END
//


-- 流程控制语句 IF
delimiter //
CREATE PROCEDURE pro(IN type VARCHAR(20));
IF type="a" THEN SELECT "a等级";
ELSEIF type="b" THEN SELECT "b等级";
ELSE SELECT "c等级";
END IF;
END
//



-- 流程控制语句 CASE
delimiter //
CREATE PROCEDURE pro(IN num INT);
BEGIN
CASE num
WHEN 1 THEN SELECT "1等级";
WHEN 2 THEN SELECT "2等级";
WHEN 3 THEN SELECT "3等级";
END CASE;
END
//



-- 循环语句之LOOP
delimiter //
CREATE PROCEDURE pro(IN num INT);
BEGIN
lable : LOOP
SET num=num+1;
IF num>10 THEN LEAVE lable;
END IF;
END LOOP;
SET @a=num;
END
//


CALL pro(2);
//
SELECT @a;
//


-- 循环之WHILE
delimiter //
CREATE PROCEDURE pro();
BEGIN
DECLARE num INT DEFAULT 0;
WHILE num<10 DO;
SET num=num+1;
END WHILE;
SELECT i;
END
//




-- 循环之REPEAT
-- 类似于do while循环,无论如何都是先执行一步的
delimiter //
CREATE PROCEDURE pro();
BEGIN
SET @num=0;
REPEAT @num=@num+1 UNTIL @num>10;
END REPEAT;
END
//


-- 查看存储过程的相关信息
-- 查看创建语法信息
show create procedure pro\G


--查看存储过程的特征
show procedure status;




-- 修改存储过程 用alter,这一部分掌握的不太全面!!!!!!!!!!!!!
alter procedure mypro
sql security invoker


-- 删除存储过程 用drop
DROP PROCEDURE IF EXISTS pro;


-- 触发器-------------------
-- MySQL5 开始计入了触发器技术
-- 触发器无参数
-- 同一个动作不能触发两次
delimiter //
CREATE TRIGGER myter
BEFORE INSERT
ON tab1
FOR EACH ROW
BEGIN
INSERT INTO tab2 SET name=NEW.name;
UPDATE tab3 SET name="newname" WHERE name=NEW.name;
END
//
-- 上面的触发器经过验证无任何错误!!!


-- 查看触发器
show triggers\G


-- 删除触发器
drop trigger myter;


-- 另外当前尚无法修改触发器,故只能删除重建的方式来更新




-- 游标--------------
-- 游标部分比较复杂,而且并不常用,以后再逐渐补充吧






-- 视图---
-- 视图是根据已经存在的表,经过一定的筛选所组成的,这样可以有选择的让用户看到或是修改部分数据不至于让数据完全曝光
-- 演示实例
create table user(id int not null,name varchar(20) not null,address varchar(50) not null,age int not null,tel varchar(11) not null);
-- 该表中的个人信息,名称,住址可以公开,但是年龄跟电话不愿意公开,可以建立一个视图
create view myview as select name,address from user;
select * from myview;
-- 这样就达到了目的


-- 查看视图的创建语法
show create view myview\G


-- 删除视图
drop view myview;


-- 差不多就这些吧,以后会慢慢补充的,还是记得有时间多回过头来看看