把其它表作为条件和更新值的更新语句;例如: 两表(多表)关联update -- 仅在where字句中的连接 --这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别 update customers a -- 使用别名 set customer_type='01' --01 为vip,00为普通 where exists (select 1 from tmp_cust_city b where b.customer_id=a.customer_id )
上一篇文章我详解介绍了mysql中的查询语句是如何工作的,我相信你还记得,一条查询语句需要经过 连接器、分析器、优化器、执行器,最终才能到达存储引擎。
那么,更新语句是如何工作的呢?
我们来看一下下面这条语句
update T set money = money + 1 where ID = 1;
首先可以确认的是,查询语句的那一套流程,更新语句也是同样会走一遍。
执行更新语句首先通过连接器连接数据库。
然后清空这个表的所有缓存。
接下来分析器进行词法语法校验,来识别这个语句是update语句
一、INSERT和REPLACE
INSERT和REPLACE语句的功能都是向表中插入新的数据。这两条语句的语法类似。它们的主要区别是如何处理重复的数据。
1. INSERT的一般用法
MySQL中的INSERT语句和标准的INSERT不太一样,在标准的SQL语句中,一次插入一条记录的INSERT语句只有一种形式。
INSERT INTO tablename(列名…) VALUES(列值);
而在MySQL中还有另外一种形式。
INSERT INTO tablename SET co
背景
最近在一次线上作业过程中执行了一句DML语句,本以为万无一失,结果应用反馈说没有更新,数据还是没有变,最后经过排查才发现是我语句写错了,导致update语句执行的结果与预期不符。
情景再现
为了方便演示,建立一张用户表,同时插入五条数据。
create table user(
id int(12) comment '用户主键id',
name varchar(36) comment '用户名',
age int(12) comment '年龄');
insert into user va