MySQL编程笔记

1.查看修改MySQL变量
show variables,show session variables,show global variables
其中:show variables等同于show session variables
查看所有变量:show variables;
查看指定变量:show variables like 'wait_timeout';
查看指定条件变量:show variables like '%timeout%';

2.MySQL变量定义
a. "=",
如 set @a =3, @a:=5
b. ":="
如 select常常这样使用
c. declare var_name[,...] type[default value]
如 declare last_date date;

set @VAR=(select sum(user_id) from user_info);
select @VAR:=sum(user_id) from user_info;
select sum(user_id) into @VAR from user_info;

3.变量的类型
a.用户变量:以"@"开始,形式为"@变量名"
用户变量是跟MySQL客户端绑定的,当前客户端设置的用户变量只对当前的客户端有效。
b.全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名  或者  set @@global.变量名
对所有客户端生效。只有具有super权限才可以设置全局变量
c.会话变量:只对连接的客户端有效
d.局部变量:作用范围在从 begin 到 end 之间。
在该语句块里设置的变量declare语句专门用于定义局部变量。
set语句是设置不同类型的变量,包括会话变量和全局变量
  
4.函数的定义
示例一:
	DELIMITER $$
	DROP FUNCTION IF EXISTS getformatdate $$
	CREATE FUNCTION getformatdate (gdate datetime) RETURNS varchar(255)
	BEGIN
		DECLARE x VARCHAR(255) DEFAULT '';
		SET x= date_format(gdate,'%Y年%m月%d日%h时%i分%s秒');
		RETURN x;
	END $$
	DELIMITER ;
调用:
select getformatdate(now());

   示例二(分支结构):
	DELIMITER $$
	DROP FUNCTION IF EXISTS str_replace $$
	create function str_replace(in_string varchar(255),in_find_str varchar(255),in_replace_str varchar(255)) returns varchar(255)
	BEGIN
		declare l_new_string varchar(255);
		declare l_find_pos    	int;
		
		set l_find_pos = instr(in_string, in_find_str);
		if(l_find_pos > 0) then
			set l_new_string = insert(in_string, l_find_pos, length(in_find_str), in_replace_str);
		else
			set l_new_string = in_string;
		end if;
		return l_new_string;
	END $$
	DELIMITER ;
调用:
select str_replace("123456789","2","b");

示例三(循环结构):
	DELIMITER $$
	DROP FUNCTION IF EXISTS morestar $$
	CREATE FUNCTION morestar(n INT) RETURNS text
	BEGIN
		DECLARE i INT DEFAULT 0;
		DECLARE s TEXT DEFAULT '';


		myloop:LOOP
			SET i=i+1;
			IF i > n THEN 
				LEAVE myloop;
			ELSE
				SET s = CONCAT(s,'*');
			END IF;
		END LOOP myloop;
		
		RETURN s;
	END $$
	DELIMITER ;
调用:
select morestar(9);
    ※MySQL流程控制语句参考:http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#while-statement

5.存储过程的定义
	DELIMITER $$
	DROP PROCEDURE IF EXISTS addRandomData $$
	CREATE PROCEDURE addRandomData(count INT) 
	BEGIN
		DECLARE i INT DEFAULT 0;
		declare username varchar(128);
		declare passwd   varchar(128);
		declare email    varchar(128);
		
		while(i<=count) do
			SET i=i+1;
			
			set username = CONCAT("username",right(CONCAT("00000", i), 6));
			set passwd = left(rand()*10000000, 6);
			set email = CONCAT(username, "@kai.jp");
			
			INSERT INTO `tbl_user` (`username`, `password`, `email`) VALUES (username, passwd, email);
		end while;
	END $$
	DELIMITER ;
※MySQL中函数与存储过程的区别:
a.函数只能通过return语句返回单个值或者表对象。而存储过程不允许执行return,但是通过out参数返回多个值。
b.函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。
c.函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
d.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

内容来自:
http://www.cnblogs.com/wangtao_20/archive/2011/02/21/1959734.html
http://www.oschina.net/code/snippet_54100_16
http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值