前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL学习10_通配符和存储过程

MySQL学习10_通配符和存储过程

作者头像
皮大大
发布2021-03-02 14:59:44
8800
发布2021-03-02 14:59:44
举报
文章被收录于专栏:机器学习/数据可视化

通配符

通配符的主要作用是对特殊的数据进行搜索,它是用来匹配一部分特定字符。通配符只能用于文本数据,非文本数据不能使用通配符。

菜鸟课程

搜索模式

由字面值、通配符或者两者组成的搜索条件。

%
  • %表示任意字符出现任意次数,包含0个,1个或者多个字符
  • %不能匹配NULL
代码语言:javascript
复制
select prod_id, prod_name
from Products
where prod_name like 'Fish%'  -- 查询Fish开头
where prod_name like '%Fish'  -- 查询Fish结尾
where prod_name like '%Fish%' -- 查询包含Fish,两边是任意字符
下划线_

下划线通配符是只能匹配单个字符,而不是多个字符。一个_只能匹配一个字符,不能多也不能少

代码语言:javascript
复制
select prod_id, prod_name
from Products
where prod_name like '_ inch teddy bear';   -- 找出个位数的teddy bear
where prod_name like '__ inch teddy bear';  -- 两个下划线,找出两位数的teddy bear
方括号[]

方括号[]通配符用来匹配一个字符集,它必须指定匹配的位置。用来匹配方括号里面的一个内容即可。

表示否定含义的 符号是前缀符号^,表示取反操作

代码语言:javascript
复制
select cust_contact
from Customers
where cust_contact likt '[JM]%'     -- 表示匹配以J或者M开头的内容,后面是任意字符
where cust_contact likt '[^JM]%'    -- ^表示取反
where not cust_contact likt '[JM]%' -- 效果等同于^取反操作
order by cust_contact;
通配符使用技巧
  • 不要过度地使用通配符
  • 不要搜索模式置于开始处
  • 注意任意通配符的位置

存储过程

存储过程Stored Procedure,是为以后可以使用而保存的一条或者多条SQL语句。它是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

为什么需要存储过程
  • 简化操作:将处理封装在一个单元中,简化复杂的操作,隐藏赋复杂的业务逻辑
  • 防止错误:不必要建立重复的一系列处理步骤,保证数据的一致性
  • 保证安全:简化对变动的管理。通过存储过程限制对数据库的访问,减少数据讹误。
  • 提高性能:存储过程通常是以编译的形式存在,DBMS处理命令需要的时间少,提高性能
  • 不同的DBMS对存储过程的语法有所不同,一般不能移植

总结:简单,安全,高性能

执行存储过程

执行存储过程使用的execute关键字,它接受存储过程名和需要传递的参数,一个栗子:

代码语言:javascript
复制
execute addNewProduct(   -- 执行该名字的存储过程
    'JS01',   --供应商
    'Shufujia',   -- 商品名字
    7.08,   -- 价格
    'a product of skin' -- 描述
);

存储过程自动将新的行添加到Products表中,并且将传入的属性传给对应的列。

创建存储过程
代码语言:javascript
复制
CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body
 
proc_parameter:
    [ IN | OUT | INOUT ] param_name type   -- 3个主要的参数
 
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]

声明语句结束符:

代码语言:javascript
复制
DELIMITER $$   -- 两者皆可
delimiter //

声明存储过程

代码语言:javascript
复制
CREATE PROCEDURE demo_in_parameter(IN p_in int)

存储过程开始和结束符号:

代码语言:javascript
复制
BEGIN .... END

变量赋值:

代码语言:javascript
复制
SET @p_in=1

变量定义:

代码语言:javascript
复制
DECLARE l_int int unsigned default 4000000;

创建mysql存储过程、存储函数:

代码语言:javascript
复制
create procedure 存储过程名(参数)

存储过程体:

代码语言:javascript
复制
create function 存储函数名(参数)
栗子

创建某个数据库用于实例操作

代码语言:javascript
复制
mysql> create database db1;   -- 创建库
mysql> use db1;      -- 使用库
mysql> create table PLAYERS as select * from TENNIS.PLAYERS;
mysql> create table MATCHES  as select * from TENNIS.MATCHES;

存储过程实例

代码语言:javascript
复制
mysql>delimiter $$    -- 将SQL语句的结束符临时改为$$(这个符号可以自定义)
mysql>create procedure delete_matches(in p_playerno integer)
->begin
->    delete from matches
->    where playerno = p_playerno;
->end$$

mysql>delimiter ;   -- 结束符号改回;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-5,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通配符
    • 搜索模式
      • %
        • 下划线_
          • 方括号[]
            • 通配符使用技巧
            • 存储过程
              • 为什么需要存储过程
                • 执行存储过程
                  • 创建存储过程
                    • 栗子
                    相关产品与服务
                    对象存储
                    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档