SQL基础-更新删除视图
一、更新数据
1、更新数据
### 更新全部数据:使用UPDATE关键字。语法如下:UPDATE 表名 SET 字段名=新的值;比如:更新学生表中的所有学生性别为男:UPDATE student SET gender = '男';### 更新部分数据:使用UPDATE关键字。语法如下:UPDATE 表名 SET 字段名=新的值 WHERE 限定条件;比如:更新学生方东美的性别为女:UPDATE student SET gender = '女' WHERE student_name = '方东美';### 更新部分数据的多个字段:使用UPDATE关键字。语法如下:UPDATE 表名SET 字段名1=新的值1,字段名2=新的值2,…WHERE 限定条件;比如:更新学生方东美的性别为女,分数为85.50:UPDATE student SET gender = '女',score = 85.50WHERE student_name = '方东美';建议在更新、删除数据时,加上where,避免更新或删除全表数据;mysql中:mysql -U 可以限制update和delete必须加上where限制条件,如果更新和删除数据不添加where限制条件,就会报错;可以设置别名,命令:alias mysql='mysql -U'也可以开启安全模式:set sql_safe_updates=1; //安全模式打开状态set sql_safe_updates=0; //安全模式关闭状态
2、根据其他表更新数据
根据其他表更新数据:使用UPDATE关键字。语法如下:UPDATE 表名SET 字段名=(子查询)[ WHERE 限定条件 ];比如:在学生表中添加老师姓名字段,并使用老师表中的数据进行更新:alter table student add column teacher_name varchar(30);UPDATE student aSET teacher_name = ( SELECT b.teacher_nameFROM teacher b WHERE a.teacher_id = b.teacher_id);
二、删除数据
1、删除全部表数据
删除全部数据:使用DELETE关键字。语法如下:DELETE FROM 表名;比如,删除学生表中的数据,使用如下语句:DELETE FROM student;
2、删除部分数据
删除部分数据:使用DELETE关键字。语法如下:DELETE FROM 表名 WHERE 筛选条件;比如,删除学生表方东美的数据,使用如下语句:DELETE FROM student WHERE student_name = '方东美';
3、根据其他表删除数据
根据其他表删除数据:使用DELETE关键字。语法如下:DELETE FROM 表名 WHERE 子查询;比如,删除学生表中老师姓名为NULL的数据,使用如下语句:DELETE FROM studentWHERE teacher_id in ( SELECT teacher_idFROM teacher WHERE teacher_name IS NULL );
三、视图
1、建表
### teacher表; CREATE TABLE `teacher` (`teacher_id` varchar(255) DEFAULT NULL COMMENT '老师编号',`teacher_name` varchar(255) DEFAULT NULL COMMENT '老师姓名',`gender` varchar(255) DEFAULT NULL COMMENT '性别' ) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='老师';INSERT INTO `teacher` VALUES ('T0001','高齐妍','男'),('T0002','李红','女'), ('T0003','李一萱',NULL),('T0004','刘金霞','男'),('T0005','刘思哲','男'), ('T0006','刘兆祥','男'),('T0007','刘哲宇','男'),('T0008','梅艺涵','女'), ('T0009','梅姿君','女'),('T0010','牛雨','女'),('T0011','牛光滢','女'), ('T0012','黄雅','女'),('T0013','任筱','女'),('T0014','吴静婷','男'), ('T0015','习芸颍','女'),('T0016','叶惠燕','女'),('T0017','周纯','男'), ('T0018','周圣杰','男'),('T0019','方焓','女'),('T0020','方杰萍','女');### student表: CREATE TABLE `student` (`student_id` varchar(50) NOT NULL COMMENT '学生编号',`student_name` varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',`gender` varchar(10) NOT NULL DEFAULT '' COMMENT '性别',`birth_day` date NOT NULL COMMENT '生日',`age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',`class_id` varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',`score` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',`teacher_id` varchar(20) DEFAULT NULL COMMENT '老师编号' ) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='学生';INSERT INTO `student` VALUES ('S20180001','方东美','女','2006-02-04',12,'G0101',80.65,'T0003'), ('S20180002','方香','女','2008-09-28',10,'G0101',75.48,NULL), ('S20180003','高紫菡','男','2006-07-22',12,'G0101',74.46,'T0003'), ('S20180004','胡未迟','男','2007-07-25',11,'G0101',51.27,'T0003'), ('S20180005','李咏颐','男','2007-03-16',11,'G0101',88.84,'T0003'), ('S20180006','吴灏潇','男','2008-04-19',10,'G0101',69.93,NULL), ('S20180007','吴明鸿','男','2007-11-18',11,'G0101',63.65,'T0003'), ('S20180008','吴鹏宇','男','2007-08-24',11,'G0101',84.69,'T0003'), ('S20180009','吴少雄','男','2007-08-04',11,'G0101',76.36,'T0003'), ('S20180010','习芬飘','女','2005-01-27',13,'G0101',83.42,'T0003'), ('S20180011','俞倚琳','女','2007-07-07',11,'G0101',97.38,'T0003'), ('S20180012','张琼雪','女','2006-06-12',12,'G0101',81.01,'T0003'), ('S20180013','陈顺军','女','2006-09-12',12,'G0102',91.13,'T0004'), ('S20180014','方浩杰','男','2008-03-29',10,'G0102',79.46,NULL), ('S20180015','方静雅','女','2007-01-27',11,'G0102',54.99,'T0004'), ('S20180016','胡博涵','男','2008-08-11',10,'G0102',50.32,NULL);student表数据很多,这里只写出一部分;
2、视图简介
比如:查询学生信息时,同时查询出老师姓名: SELECT a.*,b.teacher_name FROM student a LEFT JOIN teacher b ON a.teacher_id = b.teacher_id;思考:如果有很多地方都需要按上面的逻辑查询,那LEFT JOIN的脚本就需要写 很多遍,有没有一种简写的方式?---视图
3、创建视图
创建视图:使用CREATE VIEW关键字。语法如下:CREATE VIEW 视图名ASSELECT子句;比如,查询学生信息时,同时查询出老师姓名:CREATE VIEW v_studentASSELECT a.*,b.teacher_nameFROM student aLEFT JOIN teacher bON a.teacher_id = b.teacher_id;查询视图:与查询表一样,使用SELECT子句。比如,查询学生信息时,同时查询出老师姓名:SELECT * FROM v_student;SELECT student_id,student_name,teacher_id,teacher_name from v_student;SELECT * FROM v_student WHERE teacher_id = 'T0003';
4、视图的嵌套
比如:查询所有考试及格的学生信息CREATE VIEW v_student_nesting AS SELECT * FROM v_student WHERE score >= 60;select * from v_student_score;
5、视图与表的区别
1.视图是已经编译好了的sql,表不是2.视图没有实际的物理存储记录,表有3.视图是逻辑概念,表可以进行修改5.表是内模式,视图是外模式6.视图是我们查看表的方法,视图不让用户接触数据表,用户也就不知道表结构7.表属于全局模式中的表,是实表,视图属于局部模式的表,是虚表。8.视图建立、删除只影响视图本身,不影响表9、视图适合查询,不适合增、删、改,表可以增、删、改、查;
6、视图常见的使用场景
### 场景一:仅提供需要的数据;比如:只想查询学生编号、学生姓名、分数三个字段的信息:CREATE VIEW v_student1ASSELECT a.student_id,a.student_name,a.scoreFROM student a;### 场景二:对特定的用户仅开放特定的数据,达到保护敏感数据的目的,提升了数据安全性;比如:只想将学生编号、学生姓名、分数三个字段的信息暴露给用户u_read:GRANT SELECT ON v_student1 TO u_read@localhost;### 场景三:仅筛选需要的数据比如:只查询成绩及格的学生信息:CREATE VIEW v_student3ASSELECT *FROM student aWHERE a.score >= 60;### 场景四:简化复杂的操作比如:在应用的多个地方,都需要查询学生信息时,同时查询出老师姓名:CREATE VIEW v_student4ASSELECT a.*,b.teacher_nameFROM student aLEFT JOIN teacher bON a.teacher_id = b.teacher_id;SELECT * FROM v_student4;### 场景五:重新格式化出新的字段比如:查询学生出生日期,年月日单独一个字段展示:CREATE VIEW v_student5ASSELECT a.student_id,a.student_name,year(a.birth_day) birth_year,month(a.birth_day) birth_month,day(a.birth_day) birth_dayFROM student a;###场景六:使用计算表达式生成新的字段必须要对新产生的字段给出字段名,否则可能会报错。比如:考试总分100分,查询所有学生做错的题目的分数:CREATE VIEW v_student6ASSELECT a.student_id,a.student_name,a.score,100 - a.score as 'wrong_score'FROM student a;### 场景七:屏蔽底层实现逻辑及频繁的变更比如:考试总分100分,查询所有学生做错的题目的分数:CREATE VIEW v_student7ASSELECT a.student_id,a.student_name,a.score,100 - a.score as 'wrong_score'FROM student a;### 场景八:合并多个分离的子表比如:假如有3个学校,每个学校的学生数据在各自的表中,如何一次性查询所有学生的信息:CREATE VIEW v_student8ASSELECT * FROM student1UNION ALLSELECT * FROM student2UNION ALLSELECT * FROM student3;
转载于:https://www.cnblogs.com/weiyiming007/p/11445370.html
SQL基础-更新删除视图相关推荐
- SQL基础操作_4_表的插入、更新、删除、合并操作
目录 表的插入.更新.删除.合并操作 7.4.1 插入新的记录 7.4.2 插入含自增列的记录 7.4.3 插入新的多条记录 7.4.4 同时往多个表插入记录 7.4.5 通过其它表插入 7.4.6 ...
- [SQL基础教程] 1-5 表的删除和更新
[SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...
- 零基础学SQL(十一、视图)
目录 前置建表 一.什么是视图 二.为什么使用视图 三.视图的规则和限制 四.视图的增删改查 五.视图数据的更新 前置建表 CREATE TABLE student (id int NOT NULL ...
- 第14章_视图(创建视图、查看视图、更新视图的数据、修改、删除视图)
第14章_视图 第14章_视图 1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 2.2 视图的理解 3. 创建视图 3.1 创建单表视图 3.2 创建多表联合视图 3.3 基于视图创 ...
- 阿里云AI训练营-SQL基础3:复杂查询方法-视图、子查询、函数等
3.1 视图 3.1.1 什么是视图 3.1.2 视图与表有什么区别 3.1.3 为什么会存在视图 3.1.4 如何创建视图 3.1.5 如何修改视图结构 3.1.6 如何更新视图内容 3.1.7 如 ...
- 数据库 SQL Server 视图 创建视图 查询视图 修改视图 删除视图
文章目录 1 视图概述 2 创建视图 3 查询视图 4 修改视图 5 删除视图 总结 1 视图概述 视图就是将一个或多个表中的目标字段抽取出来形成的一个虚拟表.这个虚拟表和真实的表具有相同的功能. 视 ...
- SQL Server修改表结构后批量更新所有视图
--获取指定SQLServer数据库所有表及视图的字段列表及类型.长度 Select o.Name As ObjectsName , c.name As ColumnsName , t.name As ...
- SQL数据库语言基础之SqlServer视图的创建、修改与视图数据的增删改查
文章目录 一.认识视图 二.创建.查询视图 三.修改.删除视图 四.修改视图数据(与操作表一样,只是把table换成view) 一.认识视图 1.视图的理解 从用户角度来看,一个视图是从一个特定的角度 ...
- SQL 已更新或删除的行值要么不能使该行成为唯一行
sqlserver中多行所有数据重复,无法更新或删除问题,通常是在没有主键的情况下的表. 解决办法是为表添加主键,或者用含检索条件的sql语句来删除. sql server设置两列为主键的方法是:按住 ...
最新文章
- 使用Nginx-rtmp-module搭建hls直播
- Python计算机视觉:第一章 图像处理基础
- hibernate mysql写入中文乱码
- Mybatis 逆向工程 自动生成代码
- testid oracle vue,Vue 组件单元测试究竟测试什么?
- Angular应用ng build的一些边界情况boundary condition
- 计算机网络拓跋结构,实战 | 服务端开发与计算机网络结合的完美案例
- [spark程序]统计人口平均年龄(本地文件)(详细过程)
- php的正则匹配方法preg_match_all问题
- alex的ATM学习笔记
- element ui 表格中的渲染有多个状态判断的情况
- 【舆情聚焦】 乐视危机舆情监测专项报告
- 浏览器被7654和2345网页劫持解决办法
- 响应html广告区分手机pc,typecho博客判断电脑PC和手机WAP端进行广告展示
- Linux ssh 端口修改
- 蒙特卡洛树搜索(MTCS)
- java山地自行车怎么看型号_自行车大小型号如何区分的
- Loadrunner之关联——用小故事理解
- 这5种计算机视觉技术,刷新你的世界观
- python设定数值范围_Python 生成周期性波动的数据 可指定数值范围
热门文章
- 了解一下,Android 10 Build系统
- 【日常记录】解决‘GLIBC_2.34‘ not found,并且gcc制定glibc版本编译
- 将自动化测试推向极限
- 收藏:国产服务器和处理器架构
- HTML调用PHP的方法
- Kafka原理+操作+实战
- 北航操作系统课程-第一次作业-操作系统引论1
- 使用python快速搭建接口自动化测试脚本实战总结
- 通信码元速率和带宽理解
- [体感游戏]关于体感游戏的一些思考(一)--- 开篇和“随身”物件