Как изменить INFORMATION_SCHEMA или добавить в нее триггеры или внешние ключи?

Я пытаюсь создать метаданные для расширения функциональности mysql, но не могу создавать таблицы в базе данных INFORMATION_SCHEMA. Я подумал, что могу просто создать другую базу данных и разместить там свои метаданные, но мне нужны внешние ключи из моих таблиц в некоторые таблицы в базе данных INFORMATION_SCHEMA. Тем не менее, я получаю ошибки при попытке их создать. Затем я подумал, что могу создать триггер, чтобы получать уведомления об изменениях, но, поскольку триггеры связаны с таблицей, и я не могу изменить эту базу данных, я также не могу создавать триггеры.

В частности, у меня есть несколько таблиц, которые ссылаются на information_schema.schemata(schema_name), information_schema.schemata(columns) и некоторые другие. Я хочу иметь этот внешний ключ, чтобы я мог использовать ON UPDATE CASCADE ON DELETE CASCADE, иначе у меня будут некоторые строки в моих таблицах, ссылающиеся ни на что, и я не могу этого допустить.

Я использую mariaDB 5.5.30, который использует MySql 5.3.


person Bishma Stornelli    schedule 11.05.2013    source источник
comment
Интересно, сработает ли материализованное представление о представлении. Чем вы могли бы создавать индексы/ключи из материализованного представления...   -  person xQbert    schedule 12.05.2013


Ответы (2)


Таблицы INFORMATION_SCHEMA на самом деле представляют собой представления, содержимое которых автоматически поддерживается сервером MySQL.

В руководстве содержится дополнительная информация:

Внутри INFORMATION_SCHEMA есть несколько таблиц только для чтения. На самом деле это представления, а не базовые таблицы, поэтому с ними не связаны никакие файлы, и вы не можете устанавливать для них триггеры. Кроме того, нет каталога базы данных с таким именем.

Хотя вы можете выбрать INFORMATION_SCHEMA в качестве базы данных по умолчанию с помощью инструкции USE, вы можете только читать содержимое таблиц, но не выполнять над ними операции INSERT, UPDATE или DELETE.

person Jocelyn    schedule 11.05.2013
comment
Спасибо за эту информацию. Знаете ли вы, как я могу наблюдать, когда что-то меняется в этих представлениях? - person Bishma Stornelli; 12.05.2013
comment
Я думаю, вам нужно добавить триггеры к реальным таблицам, которые вы хотите отслеживать, поскольку таблицы INFORMATION_SCHEMA не принимают триггеры. - person Jocelyn; 12.05.2013

На самом деле это не представления, а временные таблицы, поэтому вы не видите папки. показать создать вид просмотра; ОШИБКА 1347 (HY000): 'information_schema./tmp/#sql_2ac_0' не является ПРОСМОТРОМ

person Sergiu Dan Ilie    schedule 09.12.2014