玖叶教程网

前端编程开发入门

MySQL第29课~参数,默认值,参数验证

所有内容收录在合集~SQL入门到熟练。欢迎点赞关注我哦~

参数 Parameters

使用参数是为了在存储过程中传递值,也可以使用参数为调用程序赋值。

比如用代码创建了一个存储过程

然后我们再创建一个新的过程,但是增加一些条件。

在这个表格中,根据city_id来区分进行搜索。需要用到的一些内容:

CHAR 有几个字符的字符串

VARCHAR 可变长度的字符串,存储姓名,电话号码等信息。

先执行,得出存储,

然后按照id进行搜索,比如搜索300,得出结论。括号里面的值一定要提供,因为Mysql中的系数一定是必填的。

带默认值的参数 Parameters with Default Value

如果存储过程中无法明确哪个id,那么就默认返回一个值,比如300

就是在上面的语句中,增加IF子句。

他的开头是IF SET,结尾是END IF

如果要返回的是所有客户的话,可以这样写

1 分段查询 增加了else,然后写的时候调整一下顺序,IF语句,ELSE语句,END IF语句

这样写很复杂,自己都晕了。

2 调整一下句子,删除不用的部分,然后再写的时候运用ifnull即可。

顺便说一下实际参数,和形参

形参是占位符,我们在函数中定义的小小坑位,提供给形参的值叫做实参。

参数验证 Parameters Validation

这次使用payment表格,先创建一个更新过程,然后其中一个步骤进行参数验证,确保数据库不会往数据库存储错误数据。

CREATE PROCEDURE make_payment

(invoice id INT,

payment_amount DECIMAL(9,2), payment_date DATE

BEGIN

UPDATE invoices i

SET i.payment_total=payment_amount,

i.payment_date = payment_date

WHERE i.invoice_id = invoice_id;

END

然后写完执行,可以直接进行调用。

然后点击这里,就会出现这样的页面,可以直接填写数字


非常方便就可以进行改写

由于设置的问题,我的mysql不知道i代表什么,我只好改写一下

然后执行,打开发票进行查询,ok,对比一下时间已经修改。

众所周知,发票的金额是不可能为负数的,所以有时候手滑一下,输入了负数,那就需要设置一下查验。

先用IF语句来验证一下总额的参数,然后写出对应的代码和错误类别

搜索sqlstate errors,找到IBM打开,然后有很长很长的一串数字

这里我们用到的是22003,同时是一个字符串,

写出来长这样,然后进行测试

delimiter $

CREATE PROCEDURE make_payment

(invoice_id INT,payment_amount DECIMAL(9,2),

payment_date date)

begin

if payment_amount<=0

then signal SQLstate '22003'

set message_text='invalid payment_amount';

end if;

UPDATE invoices

set

invoices.payment_total=payment_amount,

invoices.payment_date=payment_date

where invoices.invoice_id=invoice_id;

end $

然后打开make_payment的窗口,

直接输入负值,就会得出这个结果,完成

一个验证结果是有趣的,如果写太多的验证,就会让你的书写变得复杂。

同时,Mysql自带一定的自主检测,比如这个发票设置了0,就会自动标注错误。所以尽量利用最少的逻辑验证,保留关键的那些,

总结:

1相比访问数据库,直接在应用中检测和报告错误会更快速哦。

2 把参数验证做为终极备选方案,以防有人在没有通过应用直接调用了你的存储过程。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言