建设项目安监备案网站,网站首页设计特点有哪些,跨境电商怎么发货到国外,公司企业网站免费建设1、参数分类 存储过程的参数类型可以是IN、OUT和INOUT。根据这点分类如下#xff1a;
1、没有参数#xff08;无参数无返回#xff09; 2、仅仅带 IN 类型#xff08;有参数无返回#xff09; 3、仅仅带 OUT 类型#xff08;无参数有返回#xff09; 4、既带 IN 又带 O…1、参数分类 存储过程的参数类型可以是IN、OUT和INOUT。根据这点分类如下
1、没有参数无参数无返回 2、仅仅带 IN 类型有参数无返回 3、仅仅带 OUT 类型无参数有返回 4、既带 IN 又带 OUT有参数有返回 5、带 INOUT有参数有返回 注意 IN、OUT、INOUT 都可以在一个存储过程中带多个。
2、创建存储过程 语法 CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...) [characteristics ...] BEGIN 存储过程体 END
说明
IN当前参数为输入参数也就是表示入参 存储过程只是读取这个参数的值。如果没有定义参数种类默认就是 IN表示输入参数。 OUT当前参数为输出参数也就是表示出参 执行完成之后调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了。 INOUT当前参数既可以为输入参数也可以为输出参数。 编写存储过程并不是一件简单的事情可能存储过程中需要复杂的 SQL 语句。
1. BEGIN…END BEGIN…END 中间包含了多个语句每个语句都以;号为结束符。 2. DECLARE DECLARE 用来声明变量使用的位置在于 BEGIN…END 语句中间而且需要在其他语句使用之前进行变量的声明。 3. SET赋值语句用于对变量进行赋值。 4. SELECT… INTO把从数据表中查询的结果存放到变量中也就是为变量赋值。
设置新的结束标记
DELIMITER 新的结束标记 因为MySQL默认的语句结束符号为分号是 ; 。为了避免与存储过程中SQL语句结束符相冲突需要使用DELIMITER改变存储过程的结束符。
示例
#建议新的结束标记不要太花里胡哨了 DELIMITER $
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...) [characteristics ...] BEGIN sql语句1; sql语句2; END $
3、调用存储过程 语法 CALL 存储过程名(实参列表)
格式 1、调用in模式的参数 CALL sp1(值);
2、调用out模式的参数 SET name; CALL sp1(name); SELECT name;
3、调用inout模式的参数 SET name值; CALL sp1(name); SELECT name;
4、删除存储过程 语法结构 DROP PROCEDURE [IF EXISTS] 存储过程名
5、查看存储过程 1. 使用SHOW CREATE语句查看存储过程和函数的创建信息 语法结构 SHOW CREATE PROCEDURE 存储过程名
2. 使用SHOW STATUS语句查看存储过程和函数的状态信息 语法结构: SHOW PROCEDURE STATUS [LIKE pattern]
这个语句返回子程序的特征如数据库、名字、类型、创建者及创建和修改日期。 [LIKE pattern]匹配存储过程的名称可以省略。当省略不写时会列出MySQL数据库中存在的所有存储过程的信息。
举例 #查询名称以select开头的存储过程 mysql SHOW PROCEDURE STATUS LIKE SELECT%; *************************** 1. row *************************** Db: test_db Name: SelectAllData Type: PROCEDURE Definer: rootlocalhost Modified: 2021-10-16 15:55:07 Created: 2021-10-16 15:55:07 Security_type: DEFINER Comment: character_set_client: utf8mb4 collation_connection: utf8mb4_general_ci Database Collation: utf8mb4_general_ci
3. 从information_schema.Routines表中查看存储过程的信息 MySQL中存储过程的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息。 语法结构 SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME存储过程的名 [AND ROUTINE_TYPE PROCEDURE]; 说明 如果在MySQL数据库中存在存储过程和函数名称相同的情况最好指定ROUTINE_TYPE查询条件来指明查询的是存储过程还是函数。
6、修改存储过程 修改存储过程不影响存储过程功能只是修改相关特性。使用ALTER语句实现。 ALTER PROCEDURE 存储过程名;
7、练习题加强 #准备工作 CREATE TABLE admin ( id INT PRIMARY KEY AUTO_INCREMENT, user_name VARCHAR (15) NOT NULL, pwd VARCHAR (25) NOT NULL ) ; CREATE TABLE beauty ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (15) NOT NULL, phone VARCHAR (15) UNIQUE, birth DATE ) ;
INSERT INTO beauty(NAME,phone,birth) VALUES (朱茵,13201233453,1982-02-12), (孙燕姿,13501233653,1980-12-09), (田馥甄,13651238755,1983-08-21), (邓紫棋,17843283452,1991-11-12), (刘若英,18635575464,1989-05-18), (杨超越,13761238755,1994-05-11);
#1. 创建存储过程insert_user(),实现传入用户名和密码插入到admin表中 DELIMITER $ #‘$’代表着语句的结束 CREATE PROCEDURE insert_user(IN username VARCHAR(15),IN password VARCHAR(25)) BEGIN INSERT INTO admin VALUES (username,password); END $ #存储过程结束 DELIMITER ; #修改语句结束的标识符为‘;’
#2. 创建存储过程get_phone(),实现传入女神编号返回女神姓名和女神电话 DELIMITER $ CREATE PROCEDURE get_phone(IN id INT,OUT bname VARCHAR(15),OUT bphone VARCHAR(15)) BEGIN SELECT beauty.name , beauty.phone INTO bname,bphone FROM beauty WHERE beauty.id id; END $ DELIMITER ;
#调用 CALL get_phone(1,name,phone); SELECT name , phone;
十分钟带你搞懂mysql存储过程-mysql教程-PHP中文网