В основном у меня есть куча представлений на основе простого столбца дискриминатора (например, CREATE VIEW tablename AS SELECT * FROM tablename WHERE discrcolumn = "значение дискриминатора").Значение по умолчанию MySQL на основе представления
При вставке новой строки в это представление он должен вставить «значение дискриминатора» в discrcolumn
.
Я пробовал это, но, судя по всему, MySQL не понимает этого сам по себе, так как он выдает сообщение об ошибке «Поле таблицы вида вида не имеет значения по умолчанию». Конечно, столбец дискриминатора установлен NOT NULL.
Как исправить это? Возможно, триггер предварительной вставки?
UPDATE: Триггеры не будут работать на представлениях, см. Ниже комментарий.
Будет ли он работать, чтобы создать триггер в таблице, который использует переменную, и установить эту переменную при установлении соединения? Для каждого соединения значение этой переменной будет одинаковым, но оно может отличаться от других соединений.
EDIT:
Это, кажется, работает ...
Установка:
CREATE TRIGGER insert_[tablename] BEFORE INSERT ON [tablename]
FOR EACH ROW SET NEW.[discrcolumn] = @variable
Runtime:
SET @variable = [descrvalue];
INSERT INTO [viewname] ([columnlist]) VALUES ([values]);
Я попробовал курок, но он не работает. ' 'CREATE TRIGGER insert_account_ [discrval] ПЕРЕД ВСТАВИТЬ НА [ViewName] ДЛЯ КАЖДОЙ ROW SET NEW [discrname] =. '[Discrval]''' Общая ошибка: 1347 '[ViewName]' не является базовой таблицы» В документах также говорится: «Вы не можете связать триггер с таблицей или представлением TEMPORARY».: Http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html – Jake