是否可以自动更新视图列(Mysql)?

时间:2016-12-21 11:50:03

标签: mysql views

我有以下情况:

有一个数据库(主要)包含公共信息,例如“模块”,“菜单”等,每个项目包含一个数据库,其中包含每个表的视图主数据库。例如:

主要

  • modules(id,description)
  • 菜单(id,label,href,...)
  • ...

PROJECT1

  • modules_view
  • menu_view

创建简单的视图:

CREATE VIEW menu_view AS SELECT * FROM main.menu

现在,我必须创建一个'命令'菜单的列,但视图列未更新。

ALTER TABLE `menu` ADD `menu_order` INT NOT NULL AFTER `href`;

每次我必须在主表中创建新列时,是否可以维护视图列而不必手动操作?

OBS:有10个以上的项目......因此随着这个数字的增长,维护将变得更难

1 个答案:

答案 0 :(得分:1)

您正在使用CREATE VIEW menu_view AS SELECT * FROM main.menu; 定义视图:

*

唉,当{em>创建视图时解释SELECT *,而不是视图运行时解释public function saveChange(Request $request) { if($request->ajax()) { Affectationabc::create($request->all()); return response()->json([ 'testdata' => $request->all() ]); } } 。您实际上可以在元数据中看到列已定义。

执行所需操作的唯一方法是重新编译/更改新列的视图。

documentation

中对此进行了解释
  

视图定义在创建时“冻结”,不受影响   通过后续更改基础表的定义。对于   例如,如果视图在表上定义为public function saveChange(Request $request) { if($request->ajax()) { $firstDay = date('l',strtotime(date('Y-01-01'))); $lastDay = date('l',strtotime(date('Y-12-31'))); $request->merge(array('HISTO_AFFECT_DATE_DEB' => $firstDay, 'HISTO_AFFECT_DATE_FIN' => $lastDay)); Affectationabc::create($request->all()); return response()->json([ 'testdata' => $request->all() ]); } } ,则为新列   稍后添加到表中不会成为视图和列的一部分   从表中删除将导致从中选择时出错   图。