MySQL默认值基于视图

时间:2011-01-29 12:07:17

标签: mysql views

基本上我有一堆基于简单鉴别器列的视图(例如,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]);

1 个答案:

答案 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中的新值不一定是视图中选取的值,但除非是下一个选择,否则它自然不会出现在视图中。