🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**1. DML操作** DML操作是指:insert(新增)、update(修改)、delete(删除),直接操作数据,结构不变。 <br/> **2. 视图的DML操作** 因为视图本身没有数据,因此对视图进行的 DML 操作最终都体现在基表中。 ```sql # 1. 基表的数据 mysql> select * from author; +----+-------------+ | id | author_name | +----+-------------+ | 1 | 张三 | | 2 | 李四 | | 3 | 王五 | | 4 | 赵六 | +----+-------------+ # 2. 创建视图 mysql> create view v_author as select * from author with check option; # 3. 对视图进行 update mysql> update v_author set author_name='张33' where id=1; # 4. 再查看基表的数据,被更新了 mysql> select * from author; +----+-------------+ | id | author_name | +----+-------------+ | 1 | 张33 | | 2 | 李四 | | 3 | 王五 | | 4 | 赵六 | +----+-------------+ ``` **3. 如果定义视图的`select`语句包含下面子句之一,则不能对视图进行DML操作** ``` – select子句中包含distinct – select子句中包含组函数 – select语句中包含group by子句 – select语句中包含order by子句 – select语句中包含union 、union all等集合运算符 – where子句中包含相关子查询 – from子句中包含多个表 – 如果视图中有计算列,则不能更新 – 如果基表中有某个具有非空约束的列未出现在视图定义中,则不能做insert操作 ```