https://www.cnblogs.com/logon/p/3748020.html
A inner join B on …产生A和B的交集
A full outer join B on …产生A和B的并集,对于没有匹配的记录,记为null
A left (outer) join B on …产生表A的完全集,而表B中匹配的的则有值,没有匹配的为null
mysql的常用engine是InnoDB,在该引擎下使用check约束是无效的。但是可以通过使用触发器来做到检查约束的效果,通过使用触发器使mysql具有检查约束的功能。
存储过程十一组SQL语句集,可以实现复杂的逻辑功能。触发器也是一组SQL集,但存储过程是主动调用的,且功能更强大,触发器石某事件触发后自动调用。
有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;函数的普遍特性:模块化,封装,代码复用;速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;
mysql存储过程中的if语句:
1 | IF expression THEN |
如果上述表达式(expression
)计算结果为TRUE
,那么将执行statements
语句,否则控制流将传递到END IF
之后的下一个语句.
IF ELSE
语句的语法结构:
1 | IF expression THEN |
如果要基于多个表达式有条件地执行语句,则使用IF ELSEIF ELSE
语句,它的语法结构如下:
1 | IF expression THEN |
mysql declare和set定义变量,除了一个不加@和一个加@这个区别之外,还有以下区别:
declare用来定义局部变量
@用来定义会话变量
declare变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。
另外有种变量叫做会话变量(session variable),也叫做用户定义的变量(user defined variable)。这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用途比较广,因为只要在一个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据。
sql server中变量要先申明后赋值:
局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);
申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;
赋值:有两种方法式(@num为变量名,value为值)
set @num=value; 或 select @num=value;
如果想获取查询语句中的一个字段值可以用select给变量赋值,如下:
select @num=字段名 from 表名 where ……
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。
第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量
第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……
注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
MySQL触发器不能执行SELECT返回结果