玩转Mysql系列 - 第5天:DML操作汇总,确定你都会?

本文详细介绍了MySQL中批量插入数据的两种方式,包括直接插入和通过SELECT语句获取数据,同时涵盖单表和多表的更新操作,强调了单表更新的建议。此外,还讨论了数据来源的选择和注意事项,以及互联网大厂对技术人才的需求特点,包括技术热情、基础能力、主动性和团队协作等。
摘要由CSDN通过智能技术生成

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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

下面有部分截图希望能对大家有所帮助。

在这里插入图片描述
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
,可以扫码获取!!(备注Java获取)**

img

总结

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

下面有部分截图希望能对大家有所帮助。

[外链图片转存中…(img-F180Wkv3-1713756604247)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值