视图(一张虚拟表)
--创建视图
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