更新view是可以update到表的
2024-09-04 19:45:10
视图不是表,视图里面的数据是通过sql语句去表中查询得到的。当表中的数据发送更改之后,视图里的数据也会发生相应的更改。所以我么一般有两种方式更新视图里面的数据:一是更新表中的数据,从而间接地更新视图中的数据;二是直接写sql已经更新视图。第一种是方式是一定可以的,第二中方法,能否可行取决于视图的具体结构。以下对第二种方法进行分析。
一、视图只包含一张表的字段
1、包含全部字段
视图定义如下:
DROP VIEW IF EXISTS t_student;
CREATE VIEW t_student AS
SELECT * FROM student
WITH CHECK OPTION;
该视图是查询student表中的所有记录,进行更新的语句如下。
1 INSERT INTO `t_student` VALUES ('10004', '赵六', 22, 'wang123'); -- 插入时如果其他未设置的字段有默认值,可以插入,如果没有就报错
2 UPDATE t_student SET name='赵六2' where id='10004'; -- 更新可以
3 DELETE FROM t_student WHERE id = '10004'; -- 删除也可以
UPDATE,INSERT,DELETE,都是可以的。INSERT的时候,如果之增加部分字段的值,如果未增加的字段没有默认值,且不能为空,则报错。
2、带有id的部分字段
视图定义如下:
CREATE OR REPLACE VIEW t_student2 AS
SELECT id, name, age FROM student;
该视图查询student表中的id,name,age字段的记录,进行更新的语句如下:
INSERT INTO t_student2 VALUES ( 4,'wangwu', 30); -- 插入时如果其他字段有默认值,可以插入,如果没有就报错
UPDATE t_student2 SET name='王五2' where id='4'; -- 更新可以
DELETE FROM t_student2 WHERE id = 4; -- 删除也可以
由于student表中password字段默认值为null,所以INSERT的时候password没有赋值,也是可以增加的,UPDATE和DELETE也是成功的。
3、不带有id的部分字段
视图定义如下:
CREATE OR REPLACE VIEW t_student3 AS
SELECT name, age FROM student;
该视图查询student表中的name,age字段的记录,进行更新的语句如下:
1 INSERT INTO t_student3 VALUES ('wangwu', 30); -- id 没有默认值,不能插入
2 UPDATE t_student3 SET age=40 where name='wangwu'; -- 更新可以
3 DELETE FROM t_student3 WHERE name = 'wangwu'; -- 删除可以
INSERT的时候id没有默认值,所以失败。UPDATE和DELETE都成功。
最新文章
- gnuplot: 一种更为简洁的曲线,柱状图绘图软件
- HashMap合并相同key的value
- Nginx下Magento伪静态规则,适用于LNMP一键包
- apue第四章学习总结
- 【转】java正则表达式
- ZOJ 3633 Alice's present 倍增 区间查询最大值
- epub格式电子书剖析之三:NCX文件构成
- WebService开发应用
- css 改变scroll样式
- 关于HTML5中audio标签在手机中的autoplay
- JAVA类型修饰符(public,protected,private,friendly)
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
- jq dom操作
- 255.Spring Boot+Spring Security:使用md5加密
- CC2640蓝牙芯片开发备记
- Django_tips
- Openwrt中用iftop查看网络流量情况
- CentOS下配置redis允许远程连接
- java jni调用
- windows下MySQL的安装(非安装包)