mysql的高级编程语法

Posted autofelix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的高级编程语法相关的知识,希望对你有一定的参考价值。

〝 古人学问遗无力,少壮功夫老始成 〞

mysql数据库中,有好多高级编程语法,想要学好mysql,高级编程语法也必须学好,才能够更好的掌握mysql数据库的使用。如果大家觉得文章有帮助,请给博主一波关注和评论。

目录

一、外键

二、视图

三、系统变量

四、用户变量

五、局部变量

六、mysql结束符

 七、流程结构

八、函数

九、存储过程


一、外键

  • 使用外键的前提:外键所存在的表必须是Innodb引擎的。

  • 默认情况下被关联的外键数据是无法删除的

  • 默认情况下被关联的字段值是无法被修改的,非关联字段可以修改

  • 主表关联字段修改后,会影响外键字段的值

  • 主表数据删除后,外键字段会自动修改为NULL值

  • 创建外键

create table tableName(
    foreign key (外键字段) references 主表 (主表关联字段) [删除时执行语句] [更新时执行语句];
)engine=Innodb charset=utf-8;
  •  删除外键
alter table 表名 drop  foreign key 外键标识;
-- 删除索引
alter table 表名 drop index 索引字段名;
  • 添加外键
alter table 表名 add foreign key (外键字段) references 主表 (主表关联字段) [删除时执行语句] [更新时执行语句];

二、视图

  • 应用场景1:保密工作,比如有一个员工工资表,如果你只希望财务看到员工工资这个字段,而其他人不能看到工资字段,那就用一个视图,把工资这个敏感字段过滤掉 
  • 应用场景2:有一个查询语句非常复杂,大概有100行这么多,有时还想把这个巨大无比的select语句和其他表关联起来得到结果,写太多很麻烦,可以用一个视图来代替这100行的select语句,充当一个变量角色

  • 视图其实是以表子查询的SQL语句的形态存在的

  • 操作视图就相当于操作原表(一般不会直接操作视图,保持视图数据的干净)

  • 重启MYSQL后,在不同的黑窗口客户端中依然能够使用重启之前创建的视图

  • 视图可以在多个客户端进程中通用

  • 视图必须在选择数据库之后才能进行操作

  • 创建视图
create view 视图名称 as (查询SQL语句);
  • 删除试图
  • 删除的时候不会影响源表
drop view 视图名称;
drop view if exists 视图名称;
  • 查看数据库中所有视图
select * from information_schema.views;

三、系统变量

  • 查看全局所有变量
  • 全局变量指的是MYSQL配置文件中各个配置项的配置信息

show global variables;
  • 查看所有的会话变量操作

  • 会话变量是在复制一份全局变量的基础上再额外增加了一些包含MYSQL版本等信息的变量集合

show  session  variables;
  • 修改全局变量
  • 全局变量如果在某个客户端中修改了,那么,其他的所有客户端进程也会受到影响。

  • 重启数据库后,set方式修改的全局变量将会被重新初始化

set @@global.变量名=变量值;
  • 修改会话变量
  • 如果在某个客户端中修改了会话变量的值,则只影响当前客户端,不对其他的客户端进程产生任何影响。

  • 重启MYSQL之后,set方式修改的会话变量的值将会被还原

set  @@session.变量名=变量值;

四、用户变量

  • 在MYSQL中定义的用户变量,在不同的客户端进程(不同的黑窗口中)不通用!
  • 定义用户变量
set @变量名=变量值;
set @变量名=变量值,@变量名=变量值;
  • 获取用户变量
select @变量名,@变量名;
  • 通过select语句定义用户变量
-- 将查询结果中的最后一条数据的name,age,email分别赋值给不同的用户变量
select @var1=name,@var2=age,@var3=email from table where 1;

五、局部变量

  • 局部变量不能再全局中定义和使用 
  • 定义局部变量
declare 变量名 变量数据类型 [default 默认值];
-- 示例
declare var1 int default 0;

六、mysql结束符

  • 在MYSQL中,默认的语句结束符为分号:“;”,但是mysql支持我们在操作过程中修改语句结束符的符号

  • 修改结束符 

delimiter 新符号

 七、流程结构

  • if分支
if  条件语句  then
	if结构体
[elseif  条件语句  then
	elseif结构体]
else
	else结构体
end if;

-- 示例
if @var > 100 then
    insert into values('');
else
    insert into values('');
end if;
  •  while循环
while 条件 do
	循环结构体
end while;

八、函数

  •  定义函数
create  function  函数名(形参1 形参1数据类型, 形参2  形参2数据类型,…, 形参n  形参n数据类型)
returns  预估的函数返回值数据类型
[begin]
函数的结构体
[end]
  • 使用函数
  • 如果我们在函数中定义了形参列表,则默认这些形参都为局部变量,我们可以通过set的方式来改变局部变量的值。

select  函数名(实参列表);
  •  删除函数
drop  function  函数名;

九、存储过程

  • 创建存储过程
create  procedure  存储过程名(数据传递类型  形参1  形参1数据类型, 数据传递类型  形参2  形参2数据类型,…, 数据传递类型  形参n  形参n数据类型)
begin
	存储过程结构体
end
  • 调用存储过程
call  存储过程名(实参列表);
  • 参数的传递类型
  •  in 只进不出(只传值不传名) 在存储过程中修改值将不影响外部变量
  • out 只出不进(只传名不传值) 在存储过程中无法获得值

  • inout 能够进也能够出(即传名也传值) 最常用的类型

  • 删除存储过程

drop  procedure  存储过程名;

以上是关于mysql的高级编程语法的主要内容,如果未能解决你的问题,请参考以下文章

mysql高级查询语法

mysql高级查询语法

mysql的基础语法和索引

mysql的基础语法和索引

linux 高级网络编程

Mysql数据同步到Elasticsearch