基本上我有一堆基于简单鉴别器列的视图(例如,CREATE VIEW tablename AS SELECT * FROM tablename WHERE discrimincolumn =“discriminator value”)。
在此视图中插入新行后,应将“discriminator value”插入discrcolumn
。
我试过这个,但显然MySQL并没有弄明白这一点,因为它会抛出一个错误“视图视图名称基础表没有默认值”。鉴别器列当然设置为NOT NULL。
我该如何修补?也许是一个预插入触发器?
更新:触发器不适用于视图,请参见下面的注释。
是否可以在使用变量的表上创建触发器,并在建立连接时设置该变量?对于每个连接,该变量的值将相同,但它可能与其他连接不同。
编辑:
这似乎有用......
设定:
CREATE TRIGGER insert_[tablename] BEFORE INSERT ON [tablename]
FOR EACH ROW SET NEW.[discrcolumn] = @variable
运行时:
SET @variable = [descrvalue];
INSERT INTO [viewname] ([columnlist]) VALUES ([values]);
答案 0 :(得分:0)
我认为你不需要那么复杂的东西。如果您创建了一个视图,例如
CREATE VIEW MYVIEW AS
SELECT COLUMN1,
COLUMN2,
DISCRIMINATOR_COLUMN
FROM MYTABLE
WHERE DISCRIMINATOR_COLUMN = 1;
然后你可以插入这个视图......
INSERT INTO MYVIEW (COLUMN1,
COLUMN2,
DISCRIMINATOR_COLUMN)
VALUES (1, 2, 3)
如果视图中不存在的表中的所有列都具有合适的默认值,则视图应该正确更新。请注意,DISCRIMINATOR_COLUMN
中的新值不一定是视图中选取的值,但除非是下一个选择,否则它自然不会出现在视图中。