一 存储过程与 if 语句
- -- ----------------------------
- -- Procedure structure for `proc_adder`
- -- ----------------------------
- DROP PROCEDURE IF EXISTS `proc_adder`;
- DELIMITER $$
- CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)
- BEGIN
- #Routine body goes here...
- DECLARE c int;
- if a is null then set a = 0;
- end if;
- if b is null then set b = 0;
- end if;
- set sum = a + b;
- END
- $$
- DELIMITER ;
SET @b=5; -- 把 5 传给第二个参数 b
CALL proc_adder(2,@b,@s); -- 调用存储过程
- SELECT @s as sum;
- CALL proc_adder(3,3,@s);
- SELECT @s as sum;
- -- ----------------------------
- -- Procedure structure for `proc_adder`
- -- ----------------------------
- DROP PROCEDURE IF EXISTS `proc_if`;
- DELIMITER $$
- CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_if`(IN type int)
- BEGIN
- #Routine body goes here...
- DECLARE c VARCHAR(500);
- IF type =0 THEN
- SET c= 'param is 0';
- ELSEIF type = 1 THEN
- SET c='param is 1';
- ELSE
- SET c='param is others,not 0 or 1';
- END IF;
- SELECT c;
- END
- $$
- DELIMITER ;
- SET @type =1;
- CALL proc_if(@type)
二 存储过程与 case 语句
- -- ----------------------------
- -- Procedure structure for `proc_adder`
- -- ----------------------------
- DROP PROCEDURE IF EXISTS `proc_case`;
- DELIMITER $$
- CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_case`(IN type int)
- BEGIN
- #Routine body goes here...
- DECLARE c VARCHAR(500);
- CASE type
- WHEN 0 THEN
- SET c='param is 0';
- WHEN 1 THEN
- SET c = 'param is 1';
- ELSE
- SET c = 'param is others,not 0 or 1';
- END CASE;
- SELECT c;
- END
- $$
- DELIMITER ;
- SET @type =1;
- CALL proc_case(@type)
三 存储过程与 while
- -- ----------------------------
- -- Procedure structure for `proc_adder`
- -- ----------------------------
- DROP PROCEDURE IF EXISTS `proc_while`;
- DELIMITER $$
- CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int)
- BEGIN
- #Routine body goes here...
- DECLARE i INT ;
- DECLARE s INT ;
- SET i = 0;
- SET s = 0;
- WHILE i <= n DO
- SET s = s+i;
- SET i = i+1;
- END WHILE;
- SELECT s;
- END $$
- DELIMITER ;
- SET @n =100;
- CALL proc_while(@n);
存储过程其实类似于编程语言中的函数, MySQL 中也有函数, 区别在于函数必须有返回值, 而存储过程没有. 存储过程的参数有 in,out,inout 类型, 而函数的参数只能是 in 类型的. 如有函数需要从其他类型的数据库迁移到 MySQL, 那么可能需要将函数改造成存储过程.
存储过程和函数是从 mysql5.0 开始支持的. 存储过程和函数是事先经过编译并存储在数据库中的一段 sql 语句的集合, 调用存储过程和函数可以简化应用开发 r 人员的很多工作, 减少数据在数据库和应用服务器之间的传输, 对提高数据的处理效率是有好处的
有输入输出参数, 可以声明变量, 有 if/else, case,while 等控制语句, 通过编写存储过程, 可以实现复杂的逻辑功能;
函数的普遍特性: 模块化, 封装, 代码复用;
速度快, 只有首次执行需经过编译和优化步骤, 后续被调用可以直接执行, 省去以上步骤;
对于 MySQL 的表, 能存储多少数据的问题. 在工作中遇到过, 两千万是可以的!, 不过在插入两千万数据的表, 或者是删除数据, 花费的时间比较长. 这个在工作也遇到过.
对于 MySQL 和 Oracle 的比较. 其实 MySQL 学好了, Oracle 也就学好了. 很多东西几乎是一样的. 而且 MySQL 是开源的, 安装后大概 153M
而 oracle 却好几个 G. 运行 oracle, 需要很好的设备来支撑它的性能, 其实一般的企业, 用 MySQL 足够了!!! 如果只是针对几百人的用户系统, MySQL 完全可以满足需要.
平心而论, 自己对于 MySQL 数据库, 了解多少!!! 很多东西需要学习, 自己会的只是基础. 等以后用到, 一些语句, 翻翻博客套用就可以了. 平时多看自己写的博客, 复习. 知道有这么回事!!!
来源: http://www.bubuko.com/infodetail-2877197.html