Mysql 如何在存储过程中执行存储语句
我正在mySQL中创建一个函数,每当任何表插入或删除某些内容时,该函数都会更新表度量。因此,我得到了我的Mysql 如何在存储过程中执行存储语句,mysql,stored-procedures,Mysql,Stored Procedures,我正在mySQL中创建一个函数,每当任何表插入或删除某些内容时,该函数都会更新表度量。因此,我得到了我的Table\u metrics表,其中包含元素Table\u name和row\u count: CREATE TABLE Table_metrics ( table_name VARCHAR(64), row_count INTEGER DEFAULT 0 ); 因此,每当有东西被添加到数据库中我的任何表(除了这个表)中时,匹配的行就会被更新为该表
Table\u metrics
表,其中包含元素Table\u name
和row\u 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;
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;
当我调用过程calltable_update_metric(“所有者”)时,这会产生一个错误代码>(所有者是数据库中的表)
我对存储过程做了一些深入研究,试图弄清楚它们是如何工作的。我假设问题来自“SELECT COUNT(*)from tablename)行,因此我尝试在过程中使用一个存储语句:
CREATE PROCEDURE table_update_metric(IN tablename VARCHAR(64))
UPDATE Table_metrics
SET row_count=(SELECT COUNT(*) FROM tablename)
WHERE table_name = 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还比较陌生,但我相信这是一条路要走
有人能对这个问题提供一些见解吗 Mysql中已经提供了您想要做的事情。信息架构表为您存储以下信息:)
根据Somonare所说,我在数据库中创建了一个表,使用这些信息:
CREATE TABLE Table_metrics
SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'Sensors';
每次更新传感器中的表时,该表都将使用触发器进行更新 表_行将为您提供表中行数的估计值,因此您的起点将不正确。如果需要实际数字,则需要使用tbl_name中的COUNT(*)。