基本上我有一堆基于简单鉴别器列的 View (例如 CREATE VIEW tablename AS SELECT * FROM tablename WHERE discrcolumn = "discriminator value")。
在此 View 中插入新行后,它应将“鉴别器值”插入 discrcolumn
。
我试过了,但显然 MySQL 自己并没有解决这个问题,因为它抛出了一个错误“ View View 名称基础表的字段没有默认值”。鉴别器列当然设置为 NOT NULL。
我该如何解决这个问题?也许是预插入触发器?
更新:触发器不适用于 View ,请参阅下面的评论。
是否可以在使用变量的表上创建触发器,并在建立连接时设置该变量?对于每个连接,该变量的值都是相同的,但它可能与其他连接不同。
编辑:
这似乎有效...
设置:
CREATE TRIGGER insert_[tablename] BEFORE INSERT ON [tablename]
FOR EACH ROW SET NEW.[discrcolumn] = @variable
运行时:
SET @variable = [descrvalue];
INSERT INTO [viewname] ([columnlist]) VALUES ([values]);
最佳答案
我认为您不需要这么复杂的东西。如果您创建了一个 View ,例如
CREATE VIEW MYVIEW AS
SELECT COLUMN1,
COLUMN2,
DISCRIMINATOR_COLUMN
FROM MYTABLE
WHERE DISCRIMINATOR_COLUMN = 1;
然后你可以插入到这个 View 中......
INSERT INTO MYVIEW (COLUMN1,
COLUMN2,
DISCRIMINATOR_COLUMN)
VALUES (1, 2, 3)
如果表中不存在于 View 中的所有列都具有合适的默认值,则 View 应该正确更新。请注意,DISCRIMINATOR_COLUMN
中的新值不必是在 View 中选择的值,尽管它自然不会在下一次选择时出现在 View 中,除非它是。
关于MySQL默认值基于 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836759/