# Navicat功能总结

# 视图

支持通过外键连接显示虚拟表

# 函数与存储过程

# 函数

函数和存储过程的区别:存储过程是指用户在数据库中完成特定操作或者任务(插入、删除等等),函数用于返回特定数据。

适用场合:如果有返回值,用存储函数,否则,一般用存储过程。

要启用函数创建,首先更改my.ini配置文件,一般在路径C:\ProgramData\MySQL\MySQL Server 8.0

log_bin_trust_function_creators=1

# 创建函数

语法

create function 函数名([参数列表]) returns 数据类型
begin
 sql语句;
 return 值;
end;

例子

-- 创建一个返回 "Hello, World!" 的函数
DELIMITER // 替换为//

CREATE FUNCTION my_hello_world()
RETURNS VARCHAR(255)
BEGIN
    DECLARE result VARCHAR(255);
    SET result = 'Hello, World!';
    RETURN result;
END //

DELIMITER ; // 替换为;

DELIMITER用来指定SQL语句的结束符号

# 查找使用删除

show function status like 'my_%'; # 自定义函数可以以my_开头
drop function my_function; # 删除函数
select my_hello_world() from table; # 使用函数

# 存储过程

# 创建存储过程

语法格式

# 这个地方其实是用来声明SQL语句的结束符号的
delimiter //

# 这个地方此时真正的用来创建一个存储过程的
create procedure 存储过程名称(参数列表)
begin
    -- sql语句
end// 

# 当创建完一个存储过程之后再将分隔符替换为分号,为了不影响其他的操作
delimiter ;

例子

delimiter //

create procedure my_test()
begin
select * from user; # 此时这个分号并不会结束这个语句,存储过程中的SQL语句还是用分隔符进行分隔
end // # 这里使用这个结束符号代表这个存储过程创建完成

delimiter;

# 查找使用删除

show procedure status where Db='db_name'; # 查找
drop procedure my_test; # 删除
call my_test(); # 使用

# 案例

删除表固定日期前的数据

DELIMITER //
CREATE PROCEDURE DeleteBeforeDate()
BEGIN
	DECLARE cutoff_date DATE;
	set cutoff_date = '2023-02-01';
	DELETE FROM tidelevel
	WHERE DATE < cutoff_date;
	SELECT ROW_COUNT() AS deleted_rows;
END //
DELIMITER ;

删除表一个月前的数据

DELIMITER //
CREATE PROCEDURE DeleteOneMonthAgo()
BEGIN
	DECLARE cutoff_date DATE;
	set cutoff_date = DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH);
	DELETE FROM tidelevel WHERE DATE < cutoff_date;
	SELECT ROW_COUNT() AS deleted_rows;
END //
DELIMITER ;

# 事件

事件可用于定时执行某些特定任务,如:

  • 定期数据清理
  • 报表生成
  • 备份数据库
  • 数据库同步
  • ...

使用之前要确保事件功能已经开启

-- 方法一
SELECT @@event_scheduler;
-- 方法二
SHOW VARIABLES LIKE 'event%';

显示ON说明已开启

持久化开启方式:将event_scheduler=1写入my.ini配置文件中

# 创建事件

创建语法

CREATE EVENT [IFNOT EXISTS] event_name
	ON SCHEDULE schedule 调度时间设置
	[ON COMPLETION [NOT] PRESERVE] 事件到期后是否删除
	[ENABLE | DISABLE | DISABLE ON SLAVE] 开启|关闭|从机关闭
	[COMMENT 'comment']
	DO sql_statement; 事件启动要执行的代码

schedule 调度时间配置语法:AT或者EVERY

[+ INTERVAL interval]表示延迟触发时间

AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]


-- interval中包含的时间单位如下:
{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
 WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
 DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

# 单次定时事件

直接执行

CREATE EVENT my_event
ON SCHEDULE AT TIMESTAMP '2024-01-19 14:03:20' 
DO INSERT INTO `users` (`id`, `userName`, `passWord`,`user_sex`) VALUES (null, 'stagworm', '123456','MAN')

延后30秒执行

CREATE EVENT my_event
ON SCHEDULE AT TIMESTAMP '2024-01-19 13:50:00'+ INTERVAL 30 SECOND
DO INSERT INTO `users` (`id`, `userName`, `passWord`,`user_sex`) VALUES (null, 'stagworm', '123456','MAN')

# 循环定时事件

CREATE EVENT my_event 
ON SCHEDULE EVERY 10 SECOND 
ON COMPLETION PRESERVE 
DO INSERT INTO `users` (`id`, `userName`, `passWord`,`user_sex`) VALUES (null, 'stagworm', '123456','MAN')

# 查看修改删除

show events from test; # 查找
和创建语句一样, create改为alter
ALTER ...  # 修改
drop event event_name  # 删除

# 用户

# 身份验证插件

  • mysql_native_password:基于本机密码哈希方法(4.1以前,现已启用)
  • sha256_password:使用SHA-256密码哈希执行身份验证(5.7开始默认)
  • caching_sha2_password:SHA-256,并在服务器端使用缓存(8.0开始默认)

MySQL5.7客户端可以使用caching_sha2_password插件来兼容8.0及更高版本客户端

# 查询

# 报表

# 备份

# 自动运行

# 模型

Last Updated: 11/18/2024, 4:01:47 PM