我正在mySQL中创建一个函数,该函数将在每次任何表插入或删除表时更新表指标。因此,我有了Table_metrics
表,其中包含元素table_name
和row_count
:
CREATE TABLE Table_metrics (
table_name VARCHAR(64),
row_count INTEGER DEFAULT 0 );
因此,只要将任何内容添加到数据库中我的任何表(此表除外)中,匹配的行都将使用该表中的行数进行更新。
为此,我尝试制作一个存储过程:
CREATE PROCEDURE table_update_metric(IN tablename VARCHAR(64))
UPDATE Table_metrics
SET row_count=(SELECT COUNT(*) FROM tablename)
WHERE table_name = tablename;
当我调用过程call table_update_metric('Owners');
(所有者是我数据库中的表)时,这会产生错误
table DB.tablename doesn't exist
我已经对存储过程进行了一些研究,试图弄清楚它们将如何工作。我认为问题出在“ SELECT COUNT(*)FROM tablename)行,因此我尝试在过程中使用存储语句:
CREATE PROCEDURE table_update_metric(IN TABLENAME VARCHAR(64))
SET @s = CONCAT('SELECT COUNT(*) FROM ', tablename)
UPDATE Table_metrics
SET row_count=EXECUTE @s
WHERE table_name = tablename;
我不太确定如何正确地执行存储的语句,因为我对MySQL还是比较陌生的,但是我相信这是要走的路。
有人可以提供有关此问题的任何见解吗?
答案 0 :(得分:0)
Mysql中已经提供了您要执行的操作。信息架构表为您存储此信息:)
SELECT TABLE_NAME, TABLE_ROWS)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '{your_db}';
答案 1 :(得分:0)
根据Somonare的说法,我在数据库中创建了一个使用该信息的表:
firewall-cmd --permanent --direct --remove-rule 'ipv4 filter OUTPUT 2 -o ens32 -p udp -m conntrack --ctstate NEW -j ACCEPT'
此表将在每次Sensor中的表更新时通过触发器进行更新。