MySQL 其他常用语法

LIKE操作符

mysql中利用like可以进行字符的模糊匹配,用于where语句中。

比如下表中,

 希望查找姓'大'的学生有哪些,我们可以用:

select * from students where name like ‘大%’;

得到结果如下:

通配符:

'%':类似正则中的*,可以通配任意多个字符。‘大%’ 表示以‘大’开头的字段,‘%大’表示以‘大’结尾的字段,‘%大%’表示包含‘大’的字段。

'_':通配一个字符。‘大_’ 表示以大开头且后面只有一个字符的字段。

escape:转义通配符,有时字符里包含%或者_,使用escape转义成普通字符。假设学生里有外国人,他们的first name和last name用下划线隔开,那么匹配名字带peng的,like语句写成这样:like '%/_peng' escape '/'     表示 / 后的字符需要转义,这个用于指示位置的字符可以任取。

如果不加通配符,就是精确匹配。

同where一样,like也是不区分大小写的,如需区分like后加上binary。

正则表达式

正则表达式(REGEXP)是一种字符匹配工具,MySQL也支持正则表达式,不过MySQL中的语法仅为完整正则表达式的一个子集。

像LIKE一样,正则也是匹配字符串,不过它的功能强大得多。

eg:SELECT * FROM students WHERE name REGEXP '';

上面的语句将匹配name中含有‘红’的所有记录。可以看出和LIKE不一样,如果是LIKE,将会匹配名字是‘红’的记录。

正则表达式的语法丰富,功能强大,详细的语法可以自行学习正则表达式。

视图

正如前所述,SQL语句和子句都会产生一个虚表,并不是实际存储在数据库中,但是又能对其进行操作的虚表。例如一条SELECT语句显示的表我们就可以称之为虚表。虚表是表的组成部分而不是整个表。对于嵌套查询,就是从一个虚表中再次查询。有时候将这样的虚表包装起来,可以实现复用,能极大提高工作效率。对虚表的包装在Mysql中称为视图,关键词VIEW。

CREATE VIEW myview AS 
SELECT class_id,name,gender,score
FROM students
WHERE class_id=1;

上面语句创建了一个视图,名称为myview,内容为紧接着的select语句,选出班级id为1的所有学生记录。接下来我们可以将视图当作一个表使用,如筛选出分数大于80的学生记录:

SELECT class_id,name,gender,score
FROM myview
WHERE score>=80;

当然这里仅仅展示如何使用视图,实际上面的例子一条select即可完成,不过当操作十分复杂时,使用视图将会变得很有意义。

视图还可以嵌套,视图的名称必须唯一。

删除视图语句为:DROP VIEW <viewname>;

还可以对视图使用更新语句,即可以使用INSERT、UPDATE、DELETE更新数据。对视图进行更新会直接改变组成视图的基表。但并不是所有视图都允许更新,当视图中有如下操作时,更新是不允许的,包括:分组(GROUP BY)、连接、子查询、组合、聚集函数、DISTINCT去重。虽然视图提供了更新接口,但视图通常用于数据检索,一般不用于更新数据。

存储过程

存储过程类似函数,不过它允许多个输出。就像函数一样,存储过程将一些SQL语句封装起来,作为API既方便了使用,还可以隐藏实现细节给其他用户使用。其关键字为PROCEDURE,下面看看怎么使用它。

#创建存储过程
CREATR PROCEDURE proname(OUT parm1 type, ……, IN parm2 type, ……)
BEGIN
    ……
END;

使用CREATE创建存储过程,括号中是该存储过程用到的参数,OUT表示是从存储过程传出的(类比函数的返回值,这里可以有多个),IN表示是传入存储过程的,还有一种INOUT类型参数,既可以作输入也可以做输出,至于到底是输入还是输出,在具体的调用时会指出。存储过程的具体内容以BEGIN开始,END结尾。下面看一个简单的例子。

CREATE PROCEDURE studentScore(
    OUT s_max INT,
    OUT s_avg DECIMAL(5,2))
BEGIN
    SELECT MAX(score)
    INTO s_max
    FROM students;
    SELECT AVG(score)
    INTO s_avg
    FROM students;
END;

上述存储过程从students表中选出最高分和平均分。可以看到,s_max, s_avg都是OUT类型,在语句内部通过INTO传出参数。允许的参数类型是数据库的数据类型,即数值类型、字符、时间日期等。参数不能是记录集,即不能传一张表到存储过程。

上面是存储过程的定义,下面看看怎么调用它。

CALL proname(@var1,@var2…,val1,val2,…);

使用CALL进行调用,根据该存储过程的定义,括号里填参数。@表示这是一个变量,存储过程输出的值都应该用变量储存,不加@的val即传入的‘形参’。现在我们知道了怎么调用,但如何知道得到的结果呢?可以使用SELECT,如过我们调用了上面的studentScore,那么可以SELECT @s_max,@s_avg来展示结果。

当业务变更,原来的存储过程作废后,我们需要删除它。语句是:DROP PROCEDURE proname;  只需给出存储过程的名称即可。

游标

触发器

事务

原文地址:https://www.cnblogs.com/cpcpp/p/13547749.html