mysql第八话 - mysql的其它懒人用法

作为一个合格的curd开发人员,如果使用的是mysql,那么这些懒人用法你可不能不知道!

1. 视图

  • 根据指定的sql逻辑查询出来的临时表,用法和普通表一样,在工作中只用作可读
  • 例如,用户表和身份证表整合的视图
//创建命令
CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `user_info_card` AS 
SELECT u.`*`,uc.card from user_info u left join user_card uc on u.id=uc.user_id order by u.create_time;

作用:在垂直分表的情况下可以建立一个整合的视图用以查询

2.事件

  • 基于mysql定时执行的事件,其实就是定时器
//查看是否开启时间定时
show variables like 'event_scheduler'
//通过设置全局参数开启
SET GLOBAL event_scheduler = ON;
//通过配置文件永久生效 mysql配置文件my.cnf 
[mysqld]
event_scheduler=ON
  • 创建命令
//每天给执行一条这样的插入
CREATE DEFINER=`root`@`%` EVENT `add_time`
	ON SCHEDULE
		//开始执行时间
		AT '2022-04-08 16:55:00'
	ON COMPLETION NOT PRESERVE
	ENABLE
	COMMENT ''
	DO BEGIN
insert into start_time values(curdate());
END

作用:可以用来全局id自增,数据备份,时间主键字段等等

3.触发器

  • 触发器是用来在某些操作前后,自动执行一些操作。
  • 例如用户表新增了一个用户,再新增一个临时的身份证
CREATE DEFINER=`root`@`%` TRIGGER `card_insert` AFTER INSERT ON `user_info` FOR EACH ROW BEGIN
insert into user_card(user_id,card) values(new.id,"xxxx");
END

作用:用户表新增,用户账户的添加。章节添加小说书章节数量修改

4.存储过程

  • 它是一个函数,也是一个方法,可以直接在sql中直接执行逻辑操作,可以在sql中调用
  • 不过慎用(维护太难了)

例如:向一个表中插入指定区间的日期

CREATE DEFINER=`root`@`%` FUNCTION `insert_time_func`(
	`start_time` VARCHAR(50),
	`end_time` VARCHAR(50)
)
RETURNS longtext CHARSET utf8
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '给start_time表插入指定区间的时间且不报错'
BEGIN
DECLARE startTime TEXT;DECLARE endTime TEXT;set startTime = start_time;set endTime = end_time;
WHILE startTime <= endTime
Do
insert into start_time select startTime on duplicate key update state_date=values(state_date);
set startTime = date_add(startTime,interval 1 day);
end while;
//如不用返回值可去掉该行
return endTime;
END

调用方式:

//批量插入
select insert_time_func('2020-01-01','2020-02-01');

作用:批量一次性循环插入操作,多级关联查询(A关联B,B关联C。。。等等)

以上就是本章的全部内容了。

上一篇:mysql第七话 - mysql性能优化总结
下一篇:mysql第九话 - mysql主从复制集群实现

不见只今汾水上,唯有年年秋雁飞

你可能感兴趣的:(mysql,架构,性能优化,mysql,数据库)