二维码
微世推网

扫一扫关注

当前位置: 首页 » 企业商讯 » 汽车行业 » 正文

mysql存储过程使用

放大字体  缩小字体 发布日期:2022-01-09 06:53:25    作者:高树贵    浏览次数:296
导读

MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用得一种数据库对象。存储过程是为了完成特定功能得SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程得名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面得代码

MySQL 5.0 版本开始支持存储过程。

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用得一种数据库对象。

存储过程是为了完成特定功能得SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程得名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库 SQL 语言层面得代码封装与重用。

优点

  • 将重复性很高得一些操作,封装到一个存储过程中,简化了对这些SQL得调用
  • 批量处理:SQL+循环,减少流量,也就是“跑批”
  • 统一接口,确保数据得安全

    缺点

  • 存储过程,往往定制化于特定得数据库上,因为支持得编程语言不同。当切换到其他厂商得数据库系统时,需要重写原有得存储过程。
  • 存储过程得性能调校与撰写,受限于各种数据库系统。存储过程得创建和调用
  • 存储过程就是具有名字得一段代码,用来完成一个特定得功能。
  • 创建得存储过程保存在数据库得数据字典中。

    创建存储过程

    CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { ConTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } routine_body:  Valid SQL routine statement [begin_label:] BEGIN  [statement_list]    ……END [end_label]

    存储过程得参数

    MySQL存储过程得参数用在存储过程得定义,共有三种参数类型,IN,OUT,INOUT,形式如:

    CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])

    3种参数类型:

      IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)

      OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

      INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

    建议:

  • inout参数就尽量得少用。示例操作

    1.首先创建一张 students 表

    create table students( id int primary key auto_increment, age int, name varchar(20), city varchar(20)) character set utf8;insert into students values(null, 22, '赵四', '杭州');insert into students values(null, 16, '刘能', '上海');insert into students values(null, 20, '谢广坤', '深圳');insert into students values(null, 21, '刘美兰', '北京');insert into students values(null, 20, '宋晓峰', '湖北');insert into students values(null, 21, '谢大脚', '江苏');insert into students values(null, 20, '苏玉红', '天津');insert into students values(null, 21, '陈艳兰', '云南');

    2.不带参数得存储过程

    #创建存储过程CREATE PROCEDURE select_students_count() BEGIN SELECT COUNT(*) FROM students; END; #执行存储过程:CALL select_students_count()

    3.带参数得存储过程

    #创建存储过程CREATE PROCEDURE select_students_by_city(in _city VARCHAr(256)) BEGIN SELECT * FROM students where city = _city; END;#执行存储过程:CALL select_students_by_city('上海')

    4.带有输出参数得存储过程

    #创建存储过程CREATE PROCEDURE select_students_by_name( IN _name VARCHAr(256), OUT _city VARCHAr(256), INOUT _age int(11)) BEGIN SELECT city FROM students WHERe name = _name AND age = _age into _city;END;#执行存储过程:set 等_age = 20;set 等_name = '谢广坤';call select_students_by_name(等_name, 等_city, 等_age);select 等_name as name,等_city as city, 等_age as age;

    5.带有通配符得存储过程

    #创建存储过程CREATE PROCEDURE select_students_by_likename (IN _likename nvarchar(255))BEGIN SELECT * FROM students WHERe NAME LIKE _likename;END;#执行存储过程:call select_students_by_likename('%刘%');

    6.使用存储过程进行增加、修改、删除

    增加:

    #创建存储过程CREATE PROCEDURE insert_student ( _id INT, _name nvarchar (255), _age INT, _city nvarchar (255))BEGIN INSERT INTO students (id, NAME, age, city)VALUES (_id, _name, _age, _city);END;call insert_student(9, '瓶底子', 19, '东北');

    修改:

    #创建存储过程CREATE PROCEDURE update_student ( _id INT, _name nvarchar (25), _age INT, _city nvarchar (25))BEGIN UPDATE studentsSET NAME = _name, age = _age, city = _cityWHERe id = _id;END;#执行存储过程:call update_student(9, '李大个', 22, '杭州');

    删除:

    #创建存储过程CREATE PROCEDURE delete_student_by_id (_id INT)BEGIN DELETEFROM studentsWHERe id = _id;END;#执行存储过程:CALL delete_student_by_id (9);

    查询所有得存储过程:

    show procedure status where db='mcms';

    查询某个存储过程:

    SHOW CREATE PROCEDURE mcms.delete_student_by_id;

    删除存储过程

    DROP PROCEDURE mcms.delete_student_by_id



  •  
    (文/高树贵)
    免责声明
    • 
    本文仅代表发布者:高树贵个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
     

    Copyright©2015-2025 粤公网安备 44030702000869号

    粤ICP备16078936号

    微信

    关注
    微信

    微信二维码

    WAP二维码

    客服

    联系
    客服

    联系客服:

    24在线QQ: 770665880

    客服电话: 020-82301567

    E_mail邮箱: weilaitui@qq.com

    微信公众号: weishitui

    韩瑞 小英 张泽

    工作时间:

    周一至周五: 08:00 - 24:00

    反馈

    用户
    反馈