gpt4 book ai didi

mysql - 我可以查看 MySQL 中是否正在使用 View 吗

转载 作者:行者123 更新时间:2023-11-29 02:17:37 25 4
gpt4 key购买 nike

我想将大型数据库中的一些表迁移到另一个结构中。为了向后兼容,我想通过 View 公开旧结构。现在我想看看这个 View 是否被使用,如果它不再被使用我可以删除它。由于数据库大小和架构查询日志无法放上。

有什么办法吗? IE。在该 View 或任何其他方式上选择时将记录插入 accesslog 表。

最佳答案

您可以将函数用作 View 中的列,以在表中写入日志条目。

create table LogView (
Viewname varchar(50) not null,
Username varchar(50) not null,
dt datetime,
primary key (Viewname, Username)
);

delimiter $$

create function fctViewLog(Viewname varchar(50)) returns int deterministic
begin
insert into LogView (Viewname, username, dt)
values (Viewname, Current_User(), now())
on duplicate key update dt = now();
return 0;
end $$

Delimiter ;

create view ViewOldTable as (
select ..., fctViewLog('ViewOldTable') as JustForLogging from YourNewTable);

这将向您的 View 添加一个值为 0 的列。如果该新列是一个问题,您可以使用 View 中的现有列并返回其值。如果您的 View 有任何整数值,例如id,你可以使用:

create function fctViewLog(Viewname varchar(50), in_value int) returns int deterministic
begin
insert into LogView (Viewname, username, dt)
values (Viewname, Current_User(), now())
on duplicate key update dt = now();
return in_value;
end $$

Delimiter ;

create view ViewOldTable as (
select ..., fctViewLog('ViewOldTable', id) as id
from YourNewTable);

那么您的列的编号和名称将保持不变。

它会为您的 View 增加可测量的开销,因为它会为您 View 中的每一行更新 LogTable,但这只会在使用旧结构而不是新结构时发生,我猜这是主要关注点;它可能会产生副作用,促使用户更新客户端。您可以通过例如稍微优化它当条目存在时不更新 dt 行(例如,如果时间无关紧要),但它仍然会减慢它的速度。

关于mysql - 我可以查看 MySQL 中是否正在使用 View 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37133546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com