insert into 表名 set 字段 = 值,字段 = 值;
方式2不常见,建议使用方式1
批量插入2种方式
方式1
insert into 表名 [(字段,字段)] values (值,值),(值,值),(值,值);
方式2
insert into 表 [(字段,字段)]
数据来源select语句;
说明:
数据来源select语句可以有很多种写法,需要注意:select返回的结果和插入数据的字段数量、顺序、类型需要一致。
关于select的写法后面文章会详细介绍。
如:
– 删除test1
drop table if exists test1;
– 创建test1
create table test1(a int,b int);
– 删除test2
drop table if exists test2;
– 创建test2
create table test2(c1 int,c2 int,c3 int);
– 向test2中插入数据
insert into test2 values (100,101,102),(200,201,202),(300,301,302),(400,401,402);
– 向test1中插入数据
insert into test1 (a,b) select 1,1 union all select 2,2 union all select 2,2;
– 向test1插入数据,数据来源于test2表
insert into test1 (a,b) select c2,c3 from test2 where c1>=200;
select * from test1;
mysql> select * from test1;
±-----±-----+
| a | b |
±-----±-----+
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
| 201 | 202 |
| 301 | 302 |
| 401 | 402 |
mysql> select * from test2;
±-----±-----±-----+
| c1 | c2 | c3 |
±-----±-----±-----+
| 100 | 101 | 102 |
| 200 | 201 | 202 |
| 300 | 301 | 302 |
| 400 | 401 | 402 |
±-----±-----±-----+
4 rows in set (0.00 sec)
数据更新
单表更新
语法:
update 表名 [[as] 别名] set [别名.]字段 = 值,[别名.]字段 = 值 [where条件];
有些表名可能名称比较长,为了方便操作,可以给这个表名起个简单的别名,更方便操作一些。
如果无别名的时候,表名就是别名。
示例:
mysql> update test1 t set t.a = 2;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 6 Changed: 4 Warnings: 0
mysql> update test1 as t set t.a = 3;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6 Changed: 6 Warnings: 0
mysql> update test1 set a = 1,b=2;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6 Changed: 6 Warnings: 0
多表更新
可以同时更新多个表中的数据
语法:
update 表1 [[as] 别名1],表名2 [[as] 别名2]
set [别名.]字段 = 值,[别名.]字段 = 值
[where条件]
示例:
– 无别名方式
update test1,test2 set test1.a = 2 ,test1.b = 2, test2.c1 = 10;
– 无别名方式
update test1,test2 set test1.a = 2 ,test1.b = 2, test2.c1 = 10 where test1.a = test2.c1;
– 别名方式更新
update test1 t1,test2 t2 set t1.a = 2 ,t1.b = 2, t2.c1 = 10 where t1.a = t2.c1;
– 别名的方式更新多个表的多个字段
update test1 as t1,test2 t2 set t1.a = 2 ,t1.b = 2, t2.c1 = 10 where t1.a = t2.c1;
使用建议
建议采用单表方式更新,方便维护。
删除数据操作
使用delete删除
delete单表删除
delete [别名] from 表名 [[as] 别名] [where条件];
注意:
如果无别名的时候,表名就是别名
如果有别名,delete后面必须写别名
如果没有别名,delete后面的别名可以省略不写。
示例
– 删除test1表所有记录
delete from test1;
– 删除test1表所有记录
delete test1 from test1;
– 有别名的方式,删除test1表所有记录
delete t1 from test1 t1;
– 有别名的方式删除满足条件的记录
delete t1 from test1 t1 where t1.a>100;
上面的4种写法,大家可以认真看一下。
多表删除
可以同时删除多个表中的记录,语法如下:
delete [别名1],[别名2] from 表1 [[as] 别名1],表2 [[as] 别名2] [where条件];
说明:
别名可以省略不写,但是需要在delete后面跟上表名,多个表名之间用逗号隔开。
示例1
delete t1 from test1 t1,test2 t2 where t1.a=t2.c2;
删除test1表中的记录,条件是这些记录的字段a在test.c2中存在的记录
看一下运行效果:
– 删除test1
drop table if exists test1;
– 创建test1
create table test1(a int,b int);
– 删除test2
drop table if exists test2;
– 创建test2
create table test2(c1 int,c2 int,c3 int);
– 向test2中插入数据
insert into test2 values (100,101,102),(200,201,202),(300,301,302),(400,401,402);
– 向test1中插入数据
insert into test1 (a,b) select 1,1 union all select 2,2 union all select 2,2;
– 向test1插入数据,数据来源于test2表
insert into test1 (a,b) select c2,c3 from test2 where c1>=200;
mysql> select * from test1;
±-----±-----+
| a | b |
±-----±-----+
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
| 201 | 202 |
| 301 | 302 |
| 401 | 402 |
mysql> select * from test2;
±-----±-----±-----+
| c1 | c2 | c3 |
±-----±-----±-----+
| 100 | 101 | 102 |
| 200 | 201 | 202 |
| 300 | 301 | 302 |
| 400 | 401 | 402 |
±-----±-----±-----+
4 rows in set (0.00 sec)
mysql> delete t1 from test1 t1,test2 t2 where t1.a=t2.c2;
Query OK, 3 rows affected (0.00 sec)
mysql> select * from test1;
±-----±-----+
| a | b |
±-----±-----+
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
±-----±-----+
3 rows in set (0.00 sec)
从上面的输出中可以看到test1表中3条记录被删除了。
示例2
delete t2,t1 from test1 t1,test2 t2 where t1.a=t2.c2;
同时对2个表进行删除,条件是test.a=test.c2的记录
看一下运行效果:
– 删除test1
drop table if exists test1;
– 创建test1
create table test1(a int,b int);
– 删除test2
drop table if exists test2;
– 创建test2
create table test2(c1 int,c2 int,c3 int);
– 向test2中插入数据
insert into test2 values (100,101,102),(200,201,202),(300,301,302),(400,401,402);
– 向test1中插入数据
insert into test1 (a,b) select 1,1 union all select 2,2 union all select 2,2;
– 向test1插入数据,数据来源于test2表
insert into test1 (a,b) select c2,c3 from test2 where c1>=200;
mysql> select * from test1;
±-----±-----+
| a | b |
±-----±-----+
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
| 201 | 202 |
| 301 | 302 |
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
,可以扫码获取!!(备注Java获取)**
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
[外链图片转存中…(img-F180Wkv3-1713756604247)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!