MySQL-在视图中插入/更新/删除

MySQL-在视图中插入/更新/删除,mysql,view,views,alias,Mysql,View,Views,Alias,我有一个英文和法文的网站 因此,在我的数据库中,我的表有一列名为“name_english”和“name_french”,例如,还有一些其他数字列 我想创建两个视图,或者类似的东西,其中包含列“name”和表中的所有其他列 “table_english”视图的“name_english”列为“name”,而“table_french”视图的“name_french”列为“name” 这对选择上的视图很好,但我还想对视图进行一些插入/更新/删除,以更新表 例如: table: id | name_

我有一个英文和法文的网站

因此,在我的数据库中,我的表有一列名为“name_english”和“name_french”,例如,还有一些其他数字列

我想创建两个视图,或者类似的东西,其中包含列“name”和表中的所有其他列

“table_english”视图的“name_english”列为“name”,而“table_french”视图的“name_french”列为“name”

这对选择上的视图很好,但我还想对视图进行一些插入/更新/删除,以更新表

例如:

table:
id | name_english | name_french | int1 | int2 | int3

table_english (a view):
id | name | int1 | int2 | int3 (name here is name_english)

table_french (a view):
id | name | int1 | int2 | int3 (name here is name_french)
然后我想进行如下查询:

INSERT INTO table_english(id, name, int1, int2, int3) VALUES (1, 'name', 12, 14, 2);
UPDATE table_english set name='new name' WHERE id=1;
这些字段将与相应字段一起插入/更新到表中

因此,最后,“表格”的内容将是:


如何做到这一点?

如果视图遵循某些准则,那么它可以是可更新和可插入的


简短的版本是:不能更新具有任何类型的GROUP BY、DISTINCT或AGGRATE函数的视图。有更多的限制,但手册是您获取这些方面最新信息的最佳选择。

您可以插入/更新视图。视图的目的是显示一个或多个表的全部或部分状态。您必须更新表,并有两个更新和两个插入。。。一个用于更新/插入
name\u english
列,另一个用于
name\u french
列。

您试图以这种方式将站点国际化,这非常奇怪。您可能需要考虑在应用程序本身中拥有这种逻辑,并在数据库之间切换。如果它严格地与视图相关,那么您应该查看gettext。也许有关您选择这种方法的原因的更多信息可能有助于获得更好的答案。我的应用程序具有这种逻辑。但是用户可以添加一些内容,这些内容可以被翻译。如果我使用两个数据库,我将不得不复制两个数据库上的所有操作,以拥有除文本字段之外的完全相同的数据库。因此,表中有一列指示它是英文还是法文,应用程序可以基于此筛选结果。但我已经有了英文网站,我不想通过代码中的所有查询来更改它。我只是想更改表名,就像我可以使用视图一样。因为我有变量中的表名。但如果这是不可能的,我会用艰难的方式来做…从mysql网站:“一个混合了简单列引用和派生列的视图是不可插入的,但是如果你只更新那些没有派生的列,它可以被更新。”我想插入/更新派生列。从mysql网站:混合了简单列引用和派生列的视图是不可插入的,但如果只更新那些未派生的列,则可以对其进行更新。“我想插入/更新派生列。派生了哪些列?”?从您的示例中,它们似乎都是引用。我的视图是这样创建的:创建视图表\u english作为选择id,创建名称\u english作为名称,从表中创建int1、int2、int3这些都是唯一的引用,所以您应该能够更新和插入。根据手册:
视图列必须是简单列引用,而不是派生列。派生列不是简单的列引用,而是从表达式派生的列。
1 | 'new name' | DEFAULT VALUE | 12 | 14 | 2