Я создаю функцию в 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, но я считаю, что это путь.
Может кто-нибудь предложить какое-либо понимание этой проблемы?