MySQL数据分析进阶(三)插入、更新、删除

※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,前期笔记整理比较粗糙,没有数据库呈现效果图,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!)

【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!icon-default.png?t=N7T8https://www.bilibili.com/video/BV1UE41147KC/?spm_id_from=333.1007.0.0&vd_source=b287f1f4a1fa54cc438e31a0f87ef4e2

第三章:插入、更新、删除

1、COLUMN ATTRIBUTES——列属性:插入、更新、删除数据

若字符为5:VARCHAR(50),只显示5字符;CHAR(50)填补多45个空字符,达到50字符

2、INSERTING A SINGLE ROW——插入单行

 

如果INSERT INTO指定修改,则VALUES补充信息即可

可以修改排序,上下都需修改

3、INSERTING MULTIPLE ROWS——插入多行

 

4、INSERTING HIERARCHICAL ROWS——插入分层行

如何插入一笔订单以及它对应的所有项目

亲子关系一笔实际订单可以有一个或多个订单项目

order是母表,order_items是子表,order中的一行可以在里有order_items一子或者多子

根据customer_id、order_date、status,这三个进行填写,order_id自行生成序列

利用现有的顾客,下一个新的订单,设置好一个新的订单

①顾客id中选一个生成一个新的订单

②获取新生成订单的id

LAST_INSERT_ID(),内置函数

5、CREATING A COPY OF A TABLE——创建表复制

如何从一张表复制数据到另外一张表

创建复制表:orders arvhive(订单存档)

没有PK主键,也没有AI自动递增列,需要重新赋值

 

截断表(删除表中多有行)

只复制表中一部分数据到orders arvhiver例如19年前的订单

无需提供名列,给查询的每一列都赋值

使用选择语句作为插入语句中的子查询

练习:

创建invoices_archive,不要client_id,要client_name,只要支付过的发票

①将两个表连接在一起

②选择想要展示的列

③只返回有支付的发票or付款记录大于0

④把现在的查询,用作CREATE TABLE AS语句的子查询

如果再次执行,出现错误,因为表已存在:Drop Table

6、UPDATING A SINGLE ROW——更新单行

假设记录payment_total、payment_date信息的系统出现了问题,支付10,对其进行更新

①UPDATE语句锁定要更新的表格

②SET指定一列或者多列的新值

③WHERE识别记录或者需要被更新的记录

假设更新了错误的记录,应该更改的是发票3

①将发票1恢复到初始值

payment_total默认值为0.00、payment_date默认值为NULL

可以把payment_total改成DEFAULT

②更新发票3,假设在due_date支付了invoice_total的50%

payment_total被修改了小数点后没有数字

7、UPDATING MULTIPLE ROWS——更新多行

与UPDATING A SINGLE ROW一样,但需修改WHERE

client_id3有多张发票,写一段更新所有该顾客的发票

————————————————————————————————————

如果执行会错误提示,因为默认情况下MySQL Workbench会在安全更新模式下运行,它只让你更新一条;如果使用别的MySQL客户端或者用应用程序代码写这段,都没问题

取消勾选Safe Update(防止意外更新或者删除了一些表记录)

现需要重新连接MySQL instance,关闭重启后在执行

————————————————————————————————————

也可运用IN运算更新client_id3、client_id4

所有WHERE子句运算都可以使用,严格来说WHERE是可选的,如果跟新整个表则无需写

练习:

8、USING SUBQUERIES IN UPDATES——在UPDATES中用子查询

如上,更改client3的数据,如果没有这位客户的id,只有名字怎么处理

*子查询是另一段SQL语句里的选择语句

如果查询执行多名客户怎么办

假设想更新所有位于NY、CA的客户发票

①写出想修改的

②因为子查询返回多条记录,不能再使用‘=’,改用IN

③更新了所有state是NY、CA的客户的发票

最好在执行UPDATE语句前,先执行查询,确认更新什么记录

假如没有子查询,还可以查询到会被更新的记录

假设更新所有payment_date是NULL的发票

①执行整个UPDATE语句前,先执行查询

②在连接到UPDATE语句下

练习:

为超过3000积分的客户更新comments,超过3000的客户为金牌客户,找到他们的订单

只选择customer_id,用这个选择语句,作为UPDATE语句的一段子查询

返回多行使用IN

一起缩进按Tab键

9、DELETING ROWS——删除行

如果没有WHERE,则会删除整个invoices表 (危!从入门到删库跑路)

假如先删除invoices_id=1de发票

也可以用子查询,假如想删掉客户M有works的所有发票

①找到该客户

②知道了该客户的client_id,可以用在查找条件里

                     
‘Myworks’=clients表中的client_id=2,所以删除了

10、RESTORING THE DATABASES——恢复数据库

找到脚本所在位置,打开databases,点击执行,然后刷新Schems,进行覆盖。

(我似乎无法执行,也怕影响后面做题,先搁置一下)

————TBC

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值