MySQL(基础篇)数据库知识总结

本篇均为博主学习数据库MysSQL基础篇时的知识点总结,给大家推荐一下超详细的学习网址:MySQL

1.MySQL使用小技巧

1.tab自动补齐

2.F12自动调整代码

3.光标放上双击字段名直接出代码

4.使用*号的缺点,不能改变查询结果字段顺序

5.查询前先打开库,查询前用:USE 表名

6.字段用单引号表示,用以区分

7.对哪条代码操作,选中哪条代码

2.关于查询

(1)查询常量值
SELECT 100;
SELECT 'john';(数据库没有字符与字符串的差别)
(2)查询表达式
SELECT 100%98;(查询计算结果)
(3)查询函数
SELECT VERSION();(查询函数返回值)

3.查询结果取别名

方法一:
 SELECT  字段名  AS  别名 FROM 表名;
方法二:
SELECT  字段名 别名 FROM 表名;

注意:当别名遇到特殊符号时,要加单/双引号

4.查询结果去重

加DISTINCT去重

SELECT DISTINCT 字段名 FROM 表名;

5.+号的作用

在mysql中,加好仅代表运算符

SELECT 90+100;    --如果两个字段都为数值型,则进行运算

SELECT '90'+100;  --如果一个是字符型,一个是数值型,尝试将字符型转化为数值型
进行运算,如果转换成功,则进行运算,如果转换失败,将字符型转换为0

SELECT NULL+99;   --只要一方为NULL,结果肯定为NULL

6.使用CONCAT实现连接字段

SELECT CONCAT('a','b','c');  --查询结果:abc

7.显示表结构

DESC 表名

8.IFNULL

判断字段是否为空,如果为空返回相应值

SELECT IFNULL(待判断字段名,为空时返回值);

9.筛选条件

.条件运算符:大于>    小于<    等于=     不等于<>=.逻辑运算符:&&     ||    !   
           and    or   not.模糊查询:
   **like**  :
                 通配符:‘%’:任意多个字符,包含0个字符
                         ‘_’:任意单个字符
            
                 注意:当模糊查询出现通配符时
                 解决:用转义字符
                 第一种转义
                 LIKE ' _/_*'--代表查找第二个字符是‘_’的字段
    
                 第二种转义
                 LIKE '_&*' ESCAPE '&'--说明'&'是一个转义字符
   
   
  **BETWEEN and**:
                     WHERE 字段名 BETWEEN 'a'  and  'b';  --筛选出字段在[a,b]区间的数据
                    注意:包含临界值,且两个值不能颠倒
               
                    
    **IN**:
              WHERE 字段名 IN('a','b','c'); --判断字段中的值是否满足列表中的某一项
              注意:列表中值类型必须统一或兼容,且不支持通配符


    **is null**:
            WHERE 字段名 IS NULL;   --筛选为空的字段
            SHERE 字段名 IS NOT NULL; --筛选不为空的字段
            注意:'='不能判断空值,IS NUL 只能用于判空值
    
    
    **安全等于<<==>>**:
            WHERE 字段 <<=>>  'a';      --判断字段等于某一个值
            WHERE 字段 <<=>>  NULL;     --判断字段为空
  

10.排序查询

语法

select 查询列表
from 表
【where 筛选条件】
order by 排序列表 【asc |  desc】//desc降序,asc升序,默认升序

特点
1.order by子句可以支持单个字段、多个字段、表达式、函数、别名
2.order by子句一般是放在查询语句的最后面,limit子句除外

11.常用函数

概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名

好处:1.隐藏了实现细节 2.提高代码的重用性

调用select 函数名(实参列表)【from 表】;

特点
1.叫什么(函数名)
2.干什么(函数功能)

分类
1.单行函数:concat、length、ifnull等
2.分组函数

功能:做统计使用,又称为统计函数、聚合函数、组函数

一.字符函数

1.lenght   获取参数值的字节个数
     SELECT LENGTH('john');  --返回4
     
2.concat   拼接字符串
      cancat(a,'_',b); --结果:a_b

3.upper(转换为大写)  lower(转换为小写)
SELECT UPPER('a');     --结果:A
SELECT lower('A');     --结果:a

4.substr、substring    截取字符串
注意:索引从1开始
SELECT substr('abcd',3);  --结果:cd
SELECT substr('abcd',3,1); --结果:c

5.instr  返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR('abcdef','cd');  --结果:3
SELECT INSTR('acdbcdef','cd');  --结果:2

6.trim   去前后空格
SELECT TRIM('     abc     ');  --结果:3
也可以实现去前后指定字符
SELECT TRIM('a' FROM 'aaaaooaaaa'); --结果:oo

7.lpad 用指定的字符实现左填充指定长度
SELECT LPAD('abc',5,'*');   --结果:**abc

8.rpad 用指定的字符实现右填充指定长度
SELECT RPAD('abc',5,'*');   --结果:abc**

9.replace 替换
SELECT REPLACE('oxoxoxox','o','x'); --结果:xxxxxxxx

二.数学函数

1.round  四舍五入
SELECT ROUND(1.56);  --结果:2
SELECT ROUND(1.567,2)  --结果:1.57 (保留两位小数)

2.ceil 向上取整
SELECT CEIL(1.02)    --结果:2

3.floor 向下取整
SELECT FLOOR(9.99)  --结果:9

4.truncate 截断
SELECT TRUNCATE(1.6999,1);  --结果:1.6 (截断保留一位小数,且不会四舍五入)

5.mod  取余
SELECT MOD(10,3);   --结果:1

三.日期函数

1.now  返回当前系统日期+时间
SELECT NOW();

2.curdate 返回当前系统日期,不包含时间
SELECT CURDATE();

3.curtime 返回当前时间,不包含日期

4.获取指定部分,年,月,日,小时,分钟,秒
SELECT YEAR('1999-11-16');  结果:1999
SELECT MONTH('1999-11-16');  结果:11
SELECT DAY('1999-11-16');     结果:16

四.其他函数

SELECT VERSION();
SELECT DATABASE();  查看当前数据库
SELECT USER();    查看当前用户

五.分组函数

功能:用于统计使用,又称为聚合函数或统计函数或组函数
分类:
sum(求和)、avg(平均值)、max(最大值)、min(最小值)、count(计算个数)
特点:
1、sum、avg一般用于处理数值型
    max、min、count可以处理任何类型
    
2.以上分组函数都忽略null3.可以和DISTINCT搭配去重使用

4.count单独介绍
一般使用count(*)用作统计行数

5.和分组函数一同查询的字段要求是group by后的字段

12.分组查询

语法

select 分组函数,列(要求出现在group by的后面)
from 表
【where 筛选条件】        --分组前的筛选
group by 分组的列表
【order by 子句】
【having 筛选条件】     --分组后的筛选

注意:查询列表必须特殊,要求是分组函数和group by后出现的字段

特点:
1.分组查询中的筛选条件分为两类  
                            数据源               位置            关键字
     分组前筛选             原始表             group by前面      where
     分组后筛选             分组后的结果集     group by后面       having
     
     **1.分组函数做条件肯定放在having字句中**
     **2.能用分组前筛选的就尽量使用分组前筛选**
2.group by 子句支持单个字段分组,多个字段分组(多个字段之间逗号隔开没有顺序要求),表达式或函数(用的较少)
3.也可以添加排序(排序放在整个分组查询的最后)

13.连接查询

含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

笛卡尔乘积现象:表1 有m行,表2 有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件

为提高语句简洁度,可以为表取别名
格式:WHERE 表名 AS 新表名
注意:如果取了别名,则查询的字段就不能使用原始表名去限定

1.等值连接

1.多表等值连接的结果为多表的交集部分
2.n表连接,至少需要n-1个连接条件
3.多表的顺序没有要求
4.一般需要为表起别名
5.可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

2.非等值连接

笛卡尔积后,按取值范围筛选比如
A表:工资
B表:工资等级   最低工资    最高工资
查询工资的工资等级:

SELECT 工资,工资等级
FROM A,B
WHERE 工资>=最低工资 AND 工资<=最高工资

3.自连接

相当于创了一张相同的表

A表:员工编号 员工姓名 员工上级编号
查询员工姓名和他的上级姓名
分析:执行顺序:A表的员工姓名 → 员工上级编号 → A表的员工编号 → 员工姓名

SELECT a.员工姓名,b.员工姓名
FROM A AS a,A AS b                 --相当于创了一张b表
WHERE a.员工上级编号=b.员工编号

4.外连接(sql99语法)

语法:
       select 查询列表
       from 表1 别名 【连接类型】
       join 表2 别名
       on 连接条件
       【where 筛选条件】
       【group by 分组】
       【having 筛选条件】
       【order by 排序列表】
       
分类:
    内连接(※):inner
    外连接:
           左外连接(※):left【outer】
           右外连接(※):right【outer】
           全外连接:full【outer】
    交叉连接:cross(笛卡尔积)
       
  
 (一)内连接
 语法:
      select 查询列表
      from 表1 别名
      inner join 表2 别名 on 连接条件
      【inner join 表3 别名 on 连接条件】
      分类:
           (1)等值
               特点:
                    1.添加排序、分组、筛选
                    2.inner可以省略
                    3.筛选条件放在where后面,连接条件放在on后面,提交分离性,便于阅                           读
                    4.inner join连接和sql92语法中的等值连接效果是一样的,都是查询多 表交集
           (2)非等值(与sql92一样)
           (3)自连接(与sql92一样)

()外连接
应用场景:用于查询一个表中有,另一个表中没有的记录


特点:
1.外连接的查询结果为主表中的所有记录,如果从表中有和他匹配的,则显示匹配的值
                                     如果从表中没有和它匹配的,则显示null
                                     外连接查询结果=内连接结果+主表中有而从表中没有的记录
                                    
2.左外连接,left outer join左边的是主表(FROM 后面跟主表)
  右外连接,right outer join右边的是主表 (FROM 后面跟从表)
3.左外和右外交换两个表的顺序,可以实现同样的效果

14.子查询

含义
出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询

分类
按查询出现的位置:
select后面:
标量子查询
from后面:
支持表子查询
where或having后面:
标量子查询(单行),列子查询(多行)
exists后面(相关子查询):
表子查询
语法:exists(完整的查询语句) 结果1或0

按结果集的行列数不同:
标量子查询(结果只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般有多行)

.where或having后面
1.标量子查询(单行子查询)
2.列子查询(多行子查询)
3.行子查询(一行多列)
特点:
(1)子查询放在小括号内
(2)子查询一般放在条件右侧
(3)标量子查询,一般搭配着单行操作符使用   > < >= <= = <>
列子查询,一般搭配着多行操作符使用
in、any/some、all

在这里插入图片描述

15.分页查询

应用场景:当显示的数据,一页显示不全,需要分页提交sql请求

语法

select 查询列表
from1join type join2
 on 连接条件
 where 筛选条件
 group by 分组字段
 having 分组后的筛选
order by 排序的字段】
limit offset,size;(offset 表示要显示条目的起始索引,从0开始;size表示要显示的条数)

特点
1.limit放在查询语句的最后
2.公式:
要显示的页数page,每页的条目数size
*select 查询列表
form 表
limit (page-1)size,size;

下面是所有语句执行过程:

在这里插入图片描述

16.联合查询

union 联合 合并:将多条查询语句的结果合并成一个结果

语法:
          查询语句1
          union
          查询语句2
          union
          ........

应用场景:
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致
特点:
     1.要求多条查询语句的查询列数是一致的
     2.要求多条查询语句的查询的每一列的类型和顺序最好一致
     3.union关键字默认去重,如果使用union all可以包含重复项

17.插入语句

方式一:
语法:
      insert into 表名(列名,....)values(1,,....)
特点:
    1.支持插入多行
       insert into 表名
       values(1,2)(值a,值b)
    2.支持子查询
       insert into 表名
       子查询                      //将子查询结果集插入表中


方式二:
语法:
      insert into 表名
      set 列名=值,列名=

18.修改语句

1.修改单表记录
语法:
      update 表名
      set=新值,列=新值.....
      where 筛选条件

2.修改多表记录【补充】
语法:
sql92语法;
update1 别名,表2 别名
set=值,....
where 连接条件    and  筛选条件

sql99语法:
update1 别名
inner|left|right join2 别名
on 连接条件
set=,...
where 筛选条件

19.删除语句

方式一:delete
语法:
1.单表删除
     delete from 表名 where 筛选条件
 
2.多表删除【补充】
   sql92语法:
       delete1的别名,表2的别名
       from1 别名,表2 别名
       where 连接条件
       and 筛选条件;
       
    sql99语法:
       delete1的别名,表2 的别名
       from1 别名
       inner|left|right join2 别名 on 连接条件
       where 筛选条件



方式二:truncate
语法 truncate table 表名;        //删除表的全部数据

注意:
1.假如删除表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,在插入数据,自增长列的值从1开始
2.truncate删除没有返回值,delete删除有返回值(返回受影响行数)
3.truncate删除不能回滚,delete删除可以回滚
4.delete 可以加where条件,truncate不能加
5.truncate删除,效率高一点

10.库的管理

一.库的创建

语法:
create databaseif not exists】库名;

二.库的修改
更改字符集

语法:
ALTER DATABASE 库名 CHARACTER SET 新字符集

三.库的删除

语法:
     DROP DATABASEIF EXISTS】 库名

21.表的管理

一.表的创建

create tableIF NOT EXISTS】表名(
     列名  列的类型【(长度) 约束】,
     列名  列的类型【(长度) 约束】,
     列名  列的类型【(长度) 约束】,
     ....
     列名  列的类型【(长度) 约束】,
)

二.表的修改

核心语法:
       alter table 表名 add|drop|modify|change  column  列名 【列类型 约束】
       
1.修改列名
    ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 类型;
    
2.修改列的类型或约束
    ALTER TABLE 表名 MODIFY COLUMN 列名 新类型 约束条件;
    
3.添加列
    ALTER TABLE 表名 ADD COLUMN  列名 类型;
    
4.删除列
    ALTER TABLE 表名 DROP COLUMN 列名;
    
5.修改表名
    ALTER TABLE 表名 RENAME TO 新表名;

三.表的删除

语法:
   DROP TABLEIF EXISTS】 表名;

四.表的复制

1.仅仅复制表的结构
  CREATE TABLE 新表名 LIKE 旧表名;
 
2.复制表的结构+数据
  CREATE TABLE 新表名
  SELECT * FROM 旧表名
  
3.复制表的结构+部分数据
  CREATE TABLE 新表名
  SELECT 复制的字段
  FROM 旧表名
  WHERE 筛选条件

工作中通用的写法:

DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;

DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 表名();

22.数据类型

.整型
    分类:
        tinyintsmallintmediumintint/integerbigint  
 字节:   1          2         3          4           8
 特点:
 1.如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
 2.如果插入的数值超出了整型的范围,会报 out of range 异常,并且插入临界值
 3.如果不设置长度,会有默认长度
   长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用,展示宽度和该类型数字能表示的取值范围是没有关系的,取值范围直接由类型决定


二.浮点型
分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
特点:
1.M:整数部位+小数部位
  D:小数部位
  如果超过范围,则插入临界值
2.M和D都可以省略
  如果是decimal,则M默认为10,D默认为0
  如果是floatdouble,则会根据插入的数值的精度来决定精度
3.定点型的精度较高,如果要求插入数值的精度较高如货币运算则考虑使用,一般用浮点型


三.字符型
较短的文本:
char(M)
varchar(M)
其他:
binaryvarbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合

较长的文本:
test
blod(较大的二进制)

特点:
                        M的意思                             特点                    空间的耗费     效率
char(M)         最大的字符数,可以省略                   固定长度字符                 比较耗费        高
varchar(M)      最大字符数,不可以省略                   可变长度字符                 比较节省        低


四.日期型
分类:
date 只保存日期
time 只保存时间
year 只保存年

datetime 保存日期+时间
timestamp保存日期+时间
特点:
               字节               范围                  时区等影响
datetime        8                1000-9999                不受                      
timestamp       4                1970-2038

选取类型原则:
所选类型越简单越好,能保存数值的类型越小越好

23.常见约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:六大约束
           NOT NULL:非空,用于保证该字段值不能为空
           DEFAULT:默认,用于保证该字段有默认值
           PRIMARY  KEY:主键,用于保证该字段的值具有唯一性,并且非空
           UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
           CHECK:检查约束【mysql不支持】
           FOREIGE KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值
                   在从表添加外键约束,用于引用主表中某列的值号


添加约束的时机:
        1.创建表时
            添加列级约束:
                语法:
                    直接在字段名和类型后面追加 约束类型即可
                    只支持:默认、非空、主键、唯一,可以添加多个列级约束
            添加表级约束:
                语法:在各个字段最下面
                    【constraint 约束名】 约束类型(字段名)
                    外键:FOREIGN KEY(外键字段) REFERENCES  主键表(主键字段)
                    
        2.修改表时
              添加列级约束:
                 语法:
                 ALTER TABLE 表名 MODIFY COLUMN 列名 字段类型 新约束条件;
              添加表级约束:
                 语法:
                 ALTER TABLE 表名 ADDconstraint 约束名】 约束类型(字段名) 【外键引用】
                 外键:ALTER TABLE 外键表名 ADDconstraint 约束名】 FOREIGN KEY(外键字段) REFERENCES  主键表(主键字段)

               删除约束:
                语法:
                使用*表的修改语法*,将类型空着就会有删除的效果
                删除主键:
                  ALTER TABLE 表名 DROP PRIMARY KEY;
                删除外键:
                  ALTER TABLE 表名 DROP FOREIGN KEY 外键名
                删除唯一:
                  ALTER TABLE 表名 DROP INDEX  唯一键名


主键和唯一的对比:
                     保证唯一性     允许非空       一个表可以有多少个    是否允许组合
        主键           √               ×               至多一个         √,但不推荐
        唯一           √               √               可以有多个       √,但不推荐

外键:
      1.要求在从表设置外键关系
      2.从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
      3.主表的关联列必须是一个key(一般是主键或唯一)
      4.插入数据时,先插入主表,再插入从表
        删除数据时,先删除从表,再删除主表

列级约束与表级约束的区别:                          
                 位置             支持的约束类型             是否可以取约束名
列级约束:      列的后面      语法都支持,但外键没有效果           不可以
表级约束:      所有列下面     默认和非空不支持,其他支持        可以(主键没有效果)             

24.标识列

又称自增列
含义:可以不用手动的插入值,系统提供默认的序列值
语法:
   创建标识设置标识列:
                     列名 类型  约束条件 AUTO_INCREMENT
   修改表时设置标识列:  
                      ALTER TABLE 表名 MODIFY COLUMN 列名 INT 类型 约束条件  AUTO_INCREMENT;
    修改表时删除标识列:
                      ALTER TABLE 表名 MODIFY COLUMN 列名 INT 类型 约束条件  ;
            
特点:
     1.标识列要求是一个key,不一定是主键
     2.一个表至多一个标识列
     3.标识列的类型只能是数值型
     4.标识列可以通过SET auto_increment_increment=3;设置步长
      可以通过手动插入值,设置起始值
一.创建表时设置标识列

25.事务

含义:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行 

在这里插入图片描述
一.事务的创建
隐式的事务:事务没有明显的开启和结束的标记
比如insert、update、delect语句

显式事务:事务具有明显的开启和结束标记
前提:必须设置自动提交功能为禁用:set autocommit=0

步骤1:开启事务
set autocommit=0;             --针对当前会话有效
start transaction;   可选的

步骤2:编写事务的sql语句(select  insert  update  delete)
语句1;
语句2

步骤3:结束事务
commit;提交事务
rollback;回滚事务



补充:savepoint 节点名;       --设置保存点,放在语句之间
使用:搭配rollback使用       
语法:
      rollback to  保存点节点名    --回滚到保存点状态

在这里插入图片描述
二.delete和truncate在事务使用时的区别
delete支持回滚,trucate不支持回滚

26.视图

含义:虚拟表,和普通表一样使用
特点:1.重用sql语句
      2.简化复杂的sql操作,不必知道它的查询细节
      3.保护数据,提高安全性
      
一.创建视图
语法:  
     creat view 视图名
     AS
     查询语句  

二.修改视图
  方式一:
         create or replace view 视图名
         as
         查询语句;

  方式二:
        alter view 视图名
        as
        查询语句;.删除视图
      drop view 视图名,视图名,...;.查看视图
     方式一:DESC 视图名;
     方式二: SHOW CREATE VIEW 视图名;.更新视图 
视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的。
1.包含以下关键字的sql语句:分组函数、distinctgroup byhavingunion、或者union all
2.常量视图
3.select包含子查询
4.join
5.from一个不能更新的视图
6.where子句的子查询引用了from子句的表

如果可以更新,语句与表的更新一样


视图与表的区别
         创建语法关键字          是否实际占用物理空间            使用
视图      create view             只是保存了sql逻辑       增删改查,一般不能增删改
表        create table               保存了数据                 增删改查

27.变量

这部分的详细介绍:MySQL变量

系统变量:全局变量,会话变量
自定义变量:用户变量,自定义变量

一系统变量:
  说明:变量由系统提供,不是用户定义,属于服务器层面
  注意:如果是全局级别,则需要加global,如果是会话级别,则需要加session,如果不写默认,则默认session
  全局变量作用域:服务器每次启动将为所有的全局变量赋初值,针对于所有会话(连接)有效,但不能跨重启
  会话变量作用域:仅仅针对于当前会话(连接)有效 
  使用的语法:
      1.查看所有的系统变量
               show global|session】 variables;
      2.查询满足条件的部分系统变量
               show global|session】variables like '%char%';
      3.查看指定的某个系统变量的值
               select @@globall|session.系统变量名;
      4.为某个系统变量赋值
         方式一:
                set global|session】 系统变量名 = 值
         方式二:
                set @@global|session.系统变量名=值
         

          
二.自定义变量:
说明:变量是用户自定义的,不是由系统的
使用步骤:
声明
赋值
使用(查看、比较、运算等)

1.用户变量
作用域:针对于当前会话(连接)有效,同会话变量的作用域
应用在任何地方,也就是begin end

赋值符号:=或:=1)声明并初始化
     方式一:SET @用户变量名 = 值
     方式二:SET @用户变量名:= 值
     方式三:SELECT @用户变量名:=(2)赋值(更新用户变量的值)
     方式一:通过SETSELECT
             SET @用户变量名 =SET @用户变量名:=SELECT @用户变量名:= 值
      方式二:通过SELECT INTO
             SELECT 字段 INTO @变量名
             FROM;
 (3)使用(查看用户变量的值)
              SELECT @变量名

2.局部变量
作用域:仅仅在定义他的begin end中有效
应用在begin end中的第一句话 
 (1)声明
      DECLARE 变量名 类型;
      DECLARE 变量名 类型 DEFAULT;  (声明并初始化)2)赋值
      方式一:通过SETSELECT
             SET 局部变量名 =SET 局部变量名:=SELECT @用户变量名:= 值
      方式二:通过SELECT INTO
             SELECT 字段 INTO 局部变量名
             FROM;3SELECT 局部变量名;


对比用户变量和局部变量
              作用域                  定义和使用位置                                  语法
 用户变量    当前会话                 会话中的任何地方                         必须加@符号,不用限定类型
 局部变量    BEGIN END中       只能在BEGIN END中,且为第一句话                一般不用加@符号,需要限定类型

28.存储过程

这部分的详细介绍MySQL存储过程

存储过程:类似于java中的方法
好处
1.提高代码的重用性
2.简化操作

含义:一组预先编译号的SQL语句的集合,理解成批处理语句
好处
1.提高代码的重用性
2.简化操作
3.减少了编译器次数并且减少了和数据库服务器的连接次数,提高了效率

.创建语法
    CREATE PROCEDURE 存储过程名(参数列表)
    BEGIN
         存储过程体(一组合法的SQL语句)
    END

注意:
1.参数列表包含三部分
  参数模式  参数名  参数类型
  参数模式:
  IN:该参数可以作为输入,该参数需要调用方传入值
  OUT:该参数可以作为输出,也就是该参数可以作为返回值
  INOUT:该参数即可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
2.如果存储过程体仅仅只有一句话,BEGIN END可以省略
3.存储过程体中的每条SQL语句的结尾要求必须加分号
  存储过程的结尾可以使用DELIMITER重新设置
  语法:
  DELIMITER 结束标记
  案例:
  DELIMITER $


二.调用语法
CALL 存储过程名(实参列表);.删除存储过程
语法:DROP procedure 存储过程名;.查看存储过程的信息
SHOW CREATE PROCEDURE 存储过程名;

29.函数

含义:一组预先编译号的SQL语句的集合,理解成批处理语句
函数:类似于java中的方法
好处
1.提高代码的重用性
2.简化操作
3.减少了编译器次数并且减少了和数据库服务器的连接次数,提高了效率

函数与存储过程的区别
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数:有且仅有1个返回,适合做处理数据后返回一个结果

.创建语法
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
	函数体
END
注意:
1.参数列表包含两部分:参数名、参数类型
函数体:肯定会有return语句,如果没有会报错(如果return语句没有放在函数体2.的最后也不报错,但不建议)
3.函数体中仅有一句话,则可以省略begin end
4.使用delimiter语句设置结束标记

二.调用函数
SELECT 函数名(参数列表)

三.查看函数
SHOW CREATE FUNCTION 函数名;.删除函数
DROP FUNCTION 函数名;

30.流程控制结构

顺序结构:程序从上往下依次执行
分支结构:程序从两条或多条路径中选择一条
循环结构:程序满足一定条件的基础上,重复执行一段代码

31.分支结构

.if函数     if   else  的效果
SELECT IF(10>5,'大','小');  --结果:大
SELECT IF(10<5,'大','小');  --结果:小.case结构
1.作为表达式(应用在任何地方)
使用一:switch case 的效果
case 表达式
when 常量1 then 返回的值1
when 常量2 then 返回的值2
when 常量3 then 返回的值3
......
else 返回的值n
end;

使用二:类似 多重if
case
when 条件1 then 返回的值1
when 条件2 then 返回的值2
.....
else 返回的值n
end;


2.作为独立语句(应用在BEGIN END 中)
使用一:switch case 的效果
case 表达式
when 常量1 then 语句1;
when 常量2 then 语句2;
when 常量3 then 语句3;
......
else 语句n;
end case;

使用二:类似 多重if
case
when 条件1 then 语句1;
when 条件2 then 语句2;
.....
else 语句n;
end case;

特点:
    1.可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,BEGIN END中或BEGIN END 的外面,可以作为独立的语句去使用,只能放在BEGIN END2.如果WHEN中的值满足或条件成立,则执行对应的THEN后面的语句,并且结束CASE,如果都不满足,则执行ELSE中的语句或值
    3.ELSE可以省略,如果ELSE省略了,并且所有WHEN条件都不满足,则返回NULL


3.if结构(应用在BEGIN END中)
功能:实现多重分支
语法:
     if 条件1 then 语句1;
     else 条件2 then 语句2;
     ...else 语句n;end if;
     

32.循环结构

应用范围:应用在BEGIN END中

分类:whilelooprepeat
循环控制:
        iterate 类似于 continue,继续,结束本次循环,继续下一次
              语法:iterate 循环标签;
        leave 类似于 break,跳出,结束当前所在的循环
               语法:leave 循环标签;

1.while
语法:
【标签:】while 循环条件 do
          循环体;
 end while【标签】;


2.loop
语法:
【标签:】loop
     循环体;
end loop 【标签】;
可以用来模拟简单的死循环


3.repeat
语法
【标签:】repeat
      循环体;
until 结束循环条件
end repeat 【标签】;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值