MySQL默认值基于 View

标签 mysql view

基本上我有一堆基于简单鉴别器列的 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/

相关文章:

MySQL,根据表中的多个其他行选择字段

java - 如何将自定义 View 添加到布局?

mysql - 多个数据库查询在远程服务器上不起作用

php - mysql_insert_id() 可以从另一个脚本的查询中获取值吗

sql - 可以通过使用 JOINS 合并两个表而不丢失所有数据

android - 自定义 TabLayout 指示器。制作标签指示器圆角?

backbone.js - 错误 : A "url" property or function must be specified,,除非指定了 url

Android:如何停止调用 View.OnTouchListener ACTION_MOVE

MySQL 选择连接值中的位置

javascript - 将 javascript 变量传递给 php