博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

视图\触发器\存储过程\函数\事务

Posted on 2019-01-23 11:07  GraceNana  阅读(142)  评论(0编辑  收藏  举报

视图(一张虚拟表)

--创建视图
Create view view_name as    
Select id from employee;
--删除视图
Drop view_name;

触发器TRIGGER

Delimiter //  --修改结束符为//
Create trigger trigger_name before(after) insert() on tb1 for each row
BEGIN
……
END //
Delimiter ;

存储过程

创建存储过程(无参数)

Delimiter //
Create procedure name()
BEGIN
……
END //
Delimiter ;

创建存储过程(有参数)

三类参数:

in 仅用于传入参数

out 仅用于返回值用 

inout 既可以传入又可以当返回值

Delimiter //
Create procedure p2(
    In n1 int,
        In n2 int
)
BEGIN
     ……
END//
Delimiter ;

Call p2(1,2) --调用

Delimiter //
Delimiter //
Create procedure p3(
    In n1 int,
   out n2 int,
   inout n3 int
)
BEGIN
     ……     --修改变量
END//
Delimiter ;

Set @res = 1;
Set @res2 = 2;
Call p1(1,@res,@res2)
Select @res,@res2;

事 务

多个SQL捆绑,同时成功或同时失败
四大特性 : 原子性,持久性,一致性,隔离性
start transaction;
update user set balance = 900 where name = ‘aa’;  
--修改的是虚拟表,需要commit之后才能真正修改
update……
update……
commit;
函 数

MySQL中提供了许多内置函数,这些函数只能再sql语句中使用,不能单独调用

1.数学函数

round(x,y)  --返回参数x的四舍五入的有y位小数的值
rand()    --返回0-1内的随机值

2.聚合函数(常用于GROUP BY从句的SELECT查询中)

AVG(col)  --返回指定列的平均值
COUNT(col)  --返回指定列中非NULL值的个数
MIN(col)  --返回指定列的最小值
MAX(col)  --返回指定列的最大值
SUM(col)  --返回指定列的所有值之和
GROUP_CONCAT(col)   --返回由属于一组的列值连接组合而成的结果

 3.字符串函数 

CHAR_LENGTH(str)
--返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
CONCAT(str1,str2,...)  --字符串拼接如有任何一个参数为NULL ,则返回值为 NULL。
CONCAT_WS(separator,str1,str2,...)  --字符串拼接(自定义连接符)
CONCAT_WS()  --不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
CONV(N,from_base,to_base)  --进制转换

4.日期和时间函数

DATE_FORMAT(date,format)根据format字符串格式化date值

SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
      --  -> 'Sunday October 2009' 

5.加密函数

MD5()    --计算字符串str的MD5校验和
PASSWORD(str)   --返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同

6.控制流函数

7.自定义函数

delimiter //
create function f1(
    i1 int,
    i2 int)
returns int
BEGIN
    declare num int;
    set num = i1 + i2;
    return(num);
END //
delimiter ;
自定义函数代码示例

8.删除函数

drop function func_name;

9.执行函数

--获取返回值
select f1(11,nid) into @res;
SELECT @res;
--在查询中使用
select f1(11,nid) ,name from tb2;

数据库集群:

数据可读写分离

主从复制

高可用技术 :

Heartbeat + drbd
Keeplive  + LVS
K8s + docker