mysql查缺补漏(补充知识点)

#mysql查缺补漏(补充知识点)

USE girls;

#如果存储过程体仅仅只有一句话,begin end可以省略
DELIMITER $
CREATE PROCEDURE proc1()
SELECT * FROM admin;$

#调用函数(推荐)
CALL proc1()$

/*
网上有些文章说,调用 MySQL 存储过程的时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()”,可
是我自己测试了一下,调用无参的存储过程时,小括号是可以省略的,如call proc1()写成call proc1也不会报错,但
是我个人还是不推荐call proc1这种写法,我个人推荐使用call proc1()这种写法,比较规范,可读性比较好
*/

#调用函数(尽管不会报错,但是不推荐使用这种方式)
CALL proc1$

#定义一个存储过程(存储过程体中不止一句话,此时省略begin end会报错,所以此时不能省略begin end)
DELIMITER $
CREATE PROCEDURE proc2()
BEGIN
SELECT * FROM admin;
SELECT * FROM beauty;
END$

#调用函数
CALL proc2()$

#如果函数体仅仅只有一句话,begin end可以省略
DELIMITER $
CREATE FUNCTION function1() RETURNS INT
RETURN 888999;$
#
SHOW CREATE FUNCTION function1;
#调用函数
SELECT function1()$


#定义一个函数(函数体中不止一句话,此时省略begin end会报错,所以此时不能省略begin end)
DELIMITER $
CREATE FUNCTION function2() RETURNS INT
BEGIN
SET @test = "hello";
RETURN 888;
END$
#
SHOW CREATE FUNCTION function2;
#调用函数
SELECT function2()$


#
SELECT * FROM admin;
#
DROP PROCEDURE IF EXISTS proc3;
#存储过程中出现了错误,仍然可以继续执行后面的语句
DELIMITER $
CREATE PROCEDURE proc3()
BEGIN
#这句话的意思就是遇到了23000的错误号,仍然继续往下执行
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @test = 1688888;
#这句话会报错(错误号23000),因为主键等于25的数据已经存在了,再次插入肯定报错
INSERT INTO admin VALUES(25, '李寻欢', '123456');
SELECT * FROM admin;#该条语句仍然可以正常执行
END$

#调用存储过程
CALL proc3()$
#
SELECT @test$


#
DROP PROCEDURE IF EXISTS proc4;
#存储过程中出现了错误,仍然可以继续执行后面的语句
DELIMITER $
CREATE PROCEDURE proc4()
BEGIN
#这句话的意思就是遇到了42S02的错误号,仍然继续往下执行
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @myTest = '江西省赣州市于都县';
#这句话会报错(错误号23000),故意查一张数据库中不存在的表
SELECT * FROM aaa;
SELECT * FROM admin;#该条语句仍然可以正常执行
END$

#调用存储过程
CALL proc4()$
#
SELECT @myTest$

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值