一、更新数据

1、更新数据

  1. ###
  2. 更新全部数据:
  3. 使用UPDATE关键字。语法如下:
  4. UPDATE 表名 SET 字段名=新的值;
  5.  
  6. 比如:
  7. 更新学生表中的所有学生性别为男:
  8.  
  9. UPDATE student SET gender = '男';
  10.  
  11. ###
  12. 更新部分数据:
  13. 使用UPDATE关键字。语法如下:
  14. UPDATE 表名 SET 字段名=新的值 WHERE 限定条件;
  15.  
  16. 比如:
  17. 更新学生方东美的性别为女:
  18. UPDATE student SET gender = '女' WHERE student_name = '方东美';
  19.  
  20. ###
  21. 更新部分数据的多个字段:
  22. 使用UPDATE关键字。语法如下:
  23.  
  24. UPDATE 表名
  25. SET 字段名1=新的值1,字段名2=新的值2,…
  26. WHERE 限定条件;
  27.  
  28. 比如:
  29. 更新学生方东美的性别为女,分数为85.50
  30.  
  31. UPDATE student
  32. SET gender = '女',score = 85.50
  33. WHERE student_name = '方东美';
  34.  
  35. 建议在更新、删除数据时,加上where,避免更新或删除全表数据;
  36.  
  37. mysql中:
  38. mysql -U 可以限制updatedelete必须加上where限制条件,如果更新和删除数据不添加where限制条件,就会报错;
  39.  
  40. 可以设置别名,命令:alias mysql='mysql -U'
  41.  
  42. 也可以开启安全模式:
  43. set sql_safe_updates=1; //安全模式打开状态
  44. set sql_safe_updates=0; //安全模式关闭状态

2、根据其他表更新数据

  1. 根据其他表更新数据:
  2. 使用UPDATE关键字。语法如下:
  3. UPDATE 表名
  4. SET 字段名=(子查询)
  5. [ WHERE 限定条件 ];
  6.  
  7. 比如:
  8. 在学生表中添加老师姓名字段,并使用老师表中的数据进行更新:
  9.  
  10. alter table student add column teacher_name varchar(30);
  11.  
  12. UPDATE student a
  13. SET teacher_name = ( SELECT b.teacher_name
  14. FROM teacher b
  15. WHERE a.teacher_id = b.teacher_id);

二、删除数据

1、删除全部表数据

  1. 删除全部数据:
  2. 使用DELETE关键字。
  3.  
  4. 语法如下:
  5. DELETE FROM 表名;
  6.  
  7. 比如,删除学生表中的数据,使用如下语句:
  8. DELETE FROM student;

2、删除部分数据

  1. 删除部分数据:
  2. 使用DELETE关键字。
  3.  
  4. 语法如下:
  5. DELETE FROM 表名 WHERE 筛选条件;
  6.  
  7. 比如,删除学生表方东美的数据,使用如下语句:
  8. DELETE FROM student WHERE student_name = '方东美';

3、根据其他表删除数据

  1. 根据其他表删除数据:
  2. 使用DELETE关键字。
  3.  
  4. 语法如下:
  5. DELETE FROM 表名 WHERE 子查询;
  6.  
  7. 比如,删除学生表中老师姓名为NULL的数据,使用如下语句:
  8. DELETE FROM student
  9. WHERE teacher_id in ( SELECT teacher_id
  10. FROM teacher
  11. WHERE teacher_name IS NULL );

三、视图

1、建表

  1. ###
  2. teacher表;
  3. CREATE TABLE `teacher` (
  4. `teacher_id` varchar(255) DEFAULT NULL COMMENT '老师编号',
  5. `teacher_name` varchar(255) DEFAULT NULL COMMENT '老师姓名',
  6. `gender` varchar(255) DEFAULT NULL COMMENT '性别'
  7. ) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='老师';
  8.  
  9. INSERT INTO `teacher` VALUES ('T0001','高齐妍','男'),('T0002','李红','女'),
  10. ('T0003','李一萱',NULL),('T0004','刘金霞','男'),('T0005','刘思哲','男'),
  11. ('T0006','刘兆祥','男'),('T0007','刘哲宇','男'),('T0008','梅艺涵','女'),
  12. ('T0009','梅姿君','女'),('T0010','牛雨','女'),('T0011','牛光滢','女'),
  13. ('T0012','黄雅','女'),('T0013','任筱','女'),('T0014','吴静婷','男'),
  14. ('T0015','习芸颍','女'),('T0016','叶惠燕','女'),('T0017','周纯','男'),
  15. ('T0018','周圣杰','男'),('T0019','方焓','女'),('T0020','方杰萍','女');
  16.  
  17. ###
  18. student表:
  19. CREATE TABLE `student` (
  20. `student_id` varchar(50) NOT NULL COMMENT '学生编号',
  21. `student_name` varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
  22. `gender` varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
  23. `birth_day` date NOT NULL COMMENT '生日',
  24. `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
  25. `class_id` varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
  26. `score` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
  27. `teacher_id` varchar(20) DEFAULT NULL COMMENT '老师编号'
  28. ) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='学生';
  29.  
  30. INSERT INTO `student` VALUES
  31. ('S20180001','方东美','女','2006-02-04',12,'G0101',80.65,'T0003'),
  32. ('S20180002','方香','女','2008-09-28',10,'G0101',75.48,NULL),
  33. ('S20180003','高紫菡','男','2006-07-22',12,'G0101',74.46,'T0003'),
  34. ('S20180004','胡未迟','男','2007-07-25',11,'G0101',51.27,'T0003'),
  35. ('S20180005','李咏颐','男','2007-03-16',11,'G0101',88.84,'T0003'),
  36. ('S20180006','吴灏潇','男','2008-04-19',10,'G0101',69.93,NULL),
  37. ('S20180007','吴明鸿','男','2007-11-18',11,'G0101',63.65,'T0003'),
  38. ('S20180008','吴鹏宇','男','2007-08-24',11,'G0101',84.69,'T0003'),
  39. ('S20180009','吴少雄','男','2007-08-04',11,'G0101',76.36,'T0003'),
  40. ('S20180010','习芬飘','女','2005-01-27',13,'G0101',83.42,'T0003'),
  41. ('S20180011','俞倚琳','女','2007-07-07',11,'G0101',97.38,'T0003'),
  42. ('S20180012','张琼雪','女','2006-06-12',12,'G0101',81.01,'T0003'),
  43. ('S20180013','陈顺军','女','2006-09-12',12,'G0102',91.13,'T0004'),
  44. ('S20180014','方浩杰','男','2008-03-29',10,'G0102',79.46,NULL),
  45. ('S20180015','方静雅','女','2007-01-27',11,'G0102',54.99,'T0004'),
  46. ('S20180016','胡博涵','男','2008-08-11',10,'G0102',50.32,NULL);
  47.  
  48. student表数据很多,这里只写出一部分;

2、视图简介

  1. 比如:查询学生信息时,同时查询出老师姓名:
  2. SELECT
  3. a.*,b.teacher_name
  4. FROM student a
  5. LEFT JOIN teacher b
  6. ON a.teacher_id = b.teacher_id;
  7.  
  8. 思考:如果有很多地方都需要按上面的逻辑查询,那LEFT JOIN的脚本就需要写
  9. 很多遍,有没有一种简写的方式?
  10.  
  11. ---视图

3、创建视图

  1. 创建视图:
  2. 使用CREATE VIEW关键字。
  3.  
  4. 语法如下:
  5. CREATE VIEW 视图名
  6. AS
  7. SELECT子句;
  8.  
  9. 比如,查询学生信息时,同时查询出老师姓名:
  10. CREATE VIEW v_student
  11. AS
  12. SELECT
  13. a.*,b.teacher_name
  14. FROM student a
  15. LEFT JOIN teacher b
  16. ON a.teacher_id = b.teacher_id;
  17.  
  18. 查询视图:
  19. 与查询表一样,使用SELECT子句。
  20.  
  21. 比如,查询学生信息时,同时查询出老师姓名:
  22. SELECT * FROM v_student;
  23.  
  24. SELECT student_id,student_name,teacher_id,teacher_name from v_student;
  25.  
  26. SELECT * FROM v_student WHERE teacher_id = 'T0003';

4、视图的嵌套

  1. 比如:
  2. 查询所有考试及格的学生信息
  3.  
  4. CREATE VIEW v_student_nesting
  5. AS
  6. SELECT * FROM v_student
  7. WHERE score >= 60;
  8.  
  9. select * from v_student_score;

5、视图与表的区别

  1. 1.视图是已经编译好了的sql,表不是
  2.  
  3. 2.视图没有实际的物理存储记录,表有
  4.  
  5. 3.视图是逻辑概念,表可以进行修改
  6.  
  7. 5.表是内模式,视图是外模式
  8.  
  9. 6.视图是我们查看表的方法,视图不让用户接触数据表,用户也就不知道表结构
  10.  
  11. 7.表属于全局模式中的表,是实表,视图属于局部模式的表,是虚表。
  12.  
  13. 8.视图建立、删除只影响视图本身,不影响表
  14.  
  15. 9、视图适合查询,不适合增、删、改,表可以增、删、改、查;

6、视图常见的使用场景

  1. ###
  2. 场景一:仅提供需要的数据;
  3.  
  4. 比如:只想查询学生编号、学生姓名、分数三个字段的信息:
  5. CREATE VIEW v_student1
  6. AS
  7. SELECT
  8. a.student_id,a.student_name,a.score
  9. FROM student a;
  10.  
  11. ###
  12. 场景二:对特定的用户仅开放特定的数据,达到保护敏感数据的目的,提升了数据安全性;
  13.  
  14. 比如:只想将学生编号、学生姓名、分数三个字段的信息暴露给用户u_read
  15. GRANT SELECT ON v_student1 TO u_read@localhost;
  16.  
  17. ###
  18. 场景三:仅筛选需要的数据
  19.  
  20. 比如:只查询成绩及格的学生信息:
  21. CREATE VIEW v_student3
  22. AS
  23. SELECT
  24. *
  25. FROM student a
  26. WHERE a.score >= 60;
  27.  
  28. ###
  29. 场景四:简化复杂的操作
  30.  
  31. 比如:在应用的多个地方,都需要查询学生信息时,同时查询出老师姓名:
  32. CREATE VIEW v_student4
  33. AS
  34. SELECT
  35. a.*,b.teacher_name
  36. FROM student a
  37. LEFT JOIN teacher b
  38. ON a.teacher_id = b.teacher_id;
  39. SELECT * FROM v_student4;
  40.  
  41. ###
  42. 场景五:重新格式化出新的字段
  43.  
  44. 比如:查询学生出生日期,年月日单独一个字段展示:
  45. CREATE VIEW v_student5
  46. AS
  47. SELECT
  48. a.student_id,a.student_name,
  49. year(a.birth_day) birth_year,
  50. month(a.birth_day) birth_month,
  51. day(a.birth_day) birth_day
  52. FROM student a;
  53.  
  54. ###
  55.  
  56. 场景六:使用计算表达式生成新的字段
  57.  
  58. 必须要对新产生的字段给出字段名,否则可能会报错。
  59.  
  60. 比如:考试总分100分,查询所有学生做错的题目的分数:
  61. CREATE VIEW v_student6
  62. AS
  63. SELECT
  64. a.student_id,a.student_name,
  65. a.score,100 - a.score as 'wrong_score'
  66. FROM student a;
  67.  
  68. ###
  69. 场景七:屏蔽底层实现逻辑及频繁的变更
  70.  
  71. 比如:考试总分100分,查询所有学生做错的题目的分数:
  72. CREATE VIEW v_student7
  73. AS
  74. SELECT
  75. a.student_id,a.student_name,
  76. a.score,100 - a.score as 'wrong_score'
  77. FROM student a;
  78.  
  79. ###
  80. 场景八:合并多个分离的子表
  81.  
  82. 比如:假如有3个学校,每个学校的学生数据在各自的表中,如何一次性查询所有学生的信息:
  83. CREATE VIEW v_student8
  84. AS
  85. SELECT * FROM student1
  86. UNION ALL
  87. SELECT * FROM student2
  88. UNION ALL
  89. SELECT * FROM student3;

SQL基础-更新&删除&视图的更多相关文章

  1. [SQL基础教程] 5-1视图

    [SQL基础教程] 5-1视图 视图和表 从SQL角度看视图就是一张表 视图与表的差别 表保存了实际的数据,视图保存的是SELECT语句: 视图的优点 节省存储空间: 将常用的Select 语句保存成 ...

  2. SQL基础学习_04_视图

    视图 1. 视图的创建     视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作:     由于 ...

  3. 15、SQL基础整理(视图)

    视图 即虚拟表 系统-右键-新建视图 编辑前200行 select *from studentscore 代码创建法: create view studentscore as select stude ...

  4. ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)

    草图   真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...

  5. [SQL基础教程] 1-5 表的删除和更新

    [SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...

  6. SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介

    本文介绍SQL的基本查询语句 (1) select... from  * 表示全部, 选择的东西还可以进行简单的运算, 可以列别名 select * from student; -sage from ...

  7. SQL Server基础之《视图的概述和基本操作》

     数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用, ...

  8. SQL基础--视图

     视图其实就是一条查询SQL语句,用于显示一个或多个表或其它视图中相关数据. 创建视图: CREATE [OR REPLACE] [FORCE |NOFORCE ]VIEW view_name [al ...

  9. (2.9)Mysql之SQL基础——索引的查看与删除

    (2.9)Mysql之SQL基础——索引的查看与删除 关键词:mysql索引查看,mysql索引删除 1.索引查询(以下包括主键,唯一,普通,复合,全文,但不包括外键) (1)按库查询 select ...

随机推荐

  1. 基于hystrix的线程池隔离

    hystrix进行资源隔离,其实是提供了一个抽象,叫做command,就是说,你如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内 对这个依赖服务的所有调用请求,全部走这个资源池内的资源 ...

  2. MVC Filter的使用方法

    相信对权限过滤大家伙都不陌生 用户要访问一个页面时 先对其权限进行判断并进行相应的处理动作 在webform中 最直接也是最原始的办法就是 在page_load事件中所有代码之前 先执行一个权限判断的 ...

  3. 【转载】C#中使用float.TryParse方法将字符串转换为Float类型

    在C#编程过程中,将字符串string转换为单精度float类型过程中,时常使用float.Parse方法,但float.Parse在无法转换的时候,会抛出程序异常,其实还有个float.TryPar ...

  4. DEDECMS文章标题显示不全的原因以及解决方法

    首先这里说一下编码问题:UTF-8与GBK(通常为GB2312). GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准):GBK编码专门用来解决中文编码的,是双字节的 ...

  5. insmod/rmmod

    insmod -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入 -k 将模块设置为自动卸除 -m 输出模块的载入信息 -o <模块名称> 指定模块的名 ...

  6. shell EOF 用户自定义终止符

    #!/bin/bash ftp -n << EOF user guest 123456 binary cd /home/ prompt mget * close bye EOF 使用Tab ...

  7. 我的oracle 健康检查报告

    最近一直想用sql来生成oracle的健康检查报告,这样看起来一目了然,经过网上搜资料加自己整理终于算是成型了,部分结果如下图所示, 具体参考附件,恳请广大网友看看是否还有需要添加的地方. DB_he ...

  8. Centos7安装DockerCE

    1. 说明 以下使用的系统为centos7,64位,镜像为CentOS-7-x86_64-Minimal-1804,所有操作以root用户操作 2. 安装Docker官方源 2.1 安装yum工具集 ...

  9. MySQL MHA候选主库选择

    MHA在选择新主库时,会将所有存活的从库分为下面几类: 存活从库数组:挑选所有存活的从库 最新从库数组: 挑选Master_Log_File+Read_Master_Log_Pos最高的从库 优选从库 ...

  10. CentOS7-NETWORK,SSH

    SSH CentOS会自带SSH,直接启动服务, systemctl start sshd 打开配置文件 vi /etc/ssh/sshd_config 将文件中的下面2行注释去掉 PasswordA ...