mysql事务和连接区别_简单容易上手的数据库操作:MySQL中的多种查询、联合查询和事务...

c05f14a2ad8cf4e61ebe92a59110eac6.png只有努力方得成功

我们大家已经对数据库的一些基本操作都比较的熟悉了,那么今天我们来学习一些MySQL数据库中一些简单的日常操作,什么是多种查询、什么是联合查询以及什么是事务。开发工具:IDLE (Python 3.7 64-bit或者32-bit) , pycharm(professional的版本), Ubuntu,xshell6(注:不需要3.7版本的也行,只需要Python3的版本都可以)1.创建五张关系数据表

fdb1169179fbf9af0d6e5c195feace6c.png创建一个名为info的数据库

ec9fedefa62599b3178c29c5afce4dea.png键表

b86513c4995f3c35418cc3efe7b3760f.png最重要的中间表

b0c315d1d239a081f8c13f57d9d4e328.png查看当前存在的表

2.往表中插入数据

366a872f30ebb7d31869c05e926ba237.png往几个表中添加数据

e04f654e9a058d1c208c378015d1bae2.png往中间表中添加数据并查看其结构

3.查询

SELECT * FROM `department`; 查询的是学院(department)信息表中的内容。

88eccba929c80f4ee926e456710879c7.png查看学院信息

SELECT * FROM `student`; 查询的是学生信息表(student)中的具体内容。

6162ef2f23a008b086b93e3f48601a98.png查看学生表

SELECT * FROM `stu_details`; 查询的是学生详细信息表(stu_details)中的内容。

32a12b08e96d49083a0a475d66d8ecdd.png查看学生详细信息表

SELECT * FROM `course`; 查询的是课程表(course)中的信息。

e3be5b6751c8e8e7cacfbde092820f2f.png查看课程表

SELECT * FROM `select`; 查询的是中间表(select)中的信息。

1de48e35f2e99ab5df36850fd7b2893c.png查看中间表信息

mysql> SELECT * FROM `student`; 查询的是表中的所有记录。如果我们想要指定查询表中的一部分内容要怎么样操作呢?mysql> SELECT name,dept_id FROM student; 我们只查看学生的学号和姓名。

25184e217ba9c9c65cf70af07d084786.png指定查询表中的信息

mysql> SELECT * FROM student WHERE `name`='小红'; 查询指定条件下的记录。如果我们想查询之后为列取一个名字,实现这样的功能的应该怎么办?SELECT name AS `姓名` ,dept_id AS 学院id FROM student WHERE s_id>=2;

d0ebb94b725464e963425a7be921c1a6.png查询后为列取名

7454f32ee0eec15e74854dccc332507b.png恢复原状

2f85cf501f79e399bae045e830eb5507.png查询指定改名

模糊查询:就是查询所有带有你所指定字段的表信息。

5236c1db76c3d32993cead968a7dfbea.png查询指定字段的所有表内信息

mysql>select * from student where name like '小_';mysql> select * from student where name like '%小%';% 多个字(任意个)和星号的作用类似(*)_ 只可以匹配一个字

65bfc7d435c8e0081d50e5606be14b68.pngor

f912f969c92f5d15435b9ae34dff9791.pngand

select * from student where dept_id is null; 查询学院名为null的字段。select * from student where dept_id is not null; 查询学院不为null的字段4.分组查询

一般和聚合函数一起使用。如果我们要对学生表中学院栏进行分组,并统计学院的学生人数的时候我能应该要怎么办呢?

db0dea5a62d5c5eacf4893ff46ef9be2.png实现统计学院的学生人数

group by 只能跟聚合函数一起用, 一般用 做统计。select sex , MAX(age) from stu_details group by sex

6eb1917eee812418057cb401281522ac.pnggroup by 只能跟聚合函数一起用做统计

HAVING 后的字段必须是SELECT后出现过的。实现方式: mysql> SELECT dept_id AS 学院id,count(dept_id) AS 学生个数 FROM student GROUP BY `dept_id` HAVING 学生个数=1;

区别:

where 带着条件 去表里面,删选内容, (table)having :select 出来了结果,在进行一次删选。5.子查询

嵌套在查询内部;必须始终出现在圆括号内;可以包含多个关键字或条件.

ec155614e730b14d9fb58d69736d3b35.png求出平均年龄

93ae8e66ac8769eee5830a106bf85d9d.png查找大于平均年龄的数据

aae530cca35b88bcdbf7e824d37a61c5.png子查询放入上一条语句中

现在我们呢有一个需求,我们呢现在需要要查找,计算机和外国语 的学生。

9908f89c07c974ca1ad72d35332cf752.png找到学院表对应学院的ID

22a208290f9d62998a72f93ede82611e.png找到对应学院的学生

select * from student where dept_id not in (1,3);

83115524842ddcea870ec6a0917fd2b4.png除了括号内的内容输出表中其他的内容

select * from student where dept_id in (1,3);

1aa074c06a1e11fcda3607e70f693859.png只输出括号范围的数据

6.联表查询(几张表一起查询)

内连接:[INNER|CROSS]JOIN

无条件内连接:无条件内连接,又名交叉连接/笛卡尔连接.

第一张表中的每一项会和另一张表的每一项依次组合.

有条件内连接:在无条件的内连接基础上,加上一个ON子句

当连接的时候,筛选出那些有实际意义的记录行来进行拼接

注意:在写条件时注意两张表的列名是否一样,如果时一样的则要在前面加上表名,tb_name.colname这种形式存在。

86e43bc2de6bc6de553c7675f0eaea8d.png无条件内连接

无条件内连接会使得两个表每一条数据 相互连接,有错误的匹配出现。

04a624d8d98e8b364e26ba2e3070a0f9.png有条件内连接

我们有个想法,如果我们需要将学生姓名,和对应学院名都查询出来要怎么操作呢?

5255dd7c11d98e90420fe2a8f15af5c0.png得到所求

外连接:{LEFT|RIGHT}[OUTER]JOIN左外连接: (以左表为基准),两张表做连接的时候,在连接条件不匹配的时候,留下左表中的数据,而右表中的数据以NULL填充.

右外连接: (以右表为基准),对两张表做连接的时候,在连接条件不匹配的时候,留下右表中的数据,而左表中的数据以NULL填充.

fbe87ed8ba71367ac97506e98c7e62ca.png插入数据并查看表信息

667eb4a92906960a6a1e07b5bd8de0f2.png使用内连接加条件

注意:使用内连接加条件只能看到有分配好学院的学生的信息。

8448fd42e4c045191e64570b041388ef.png左外连接

注意:使用左连接把学生的数据全取出来,该学生没有学院信息的用NULL填充。

4286aa9f208406dc772db5fdc6232062.png右外连接

注意:使用右外连接把目前还没有学生的学院的数据也显示出来。

我们在日常生活中,我们在读书的时候,班主任总是会有本班学生的所有信息。那么怎样才能使得学生的 ( 姓名,选的课程名,所属学院 )都显示出来呢?

dbe40a150eb6e481df0571627e2e8590.png需要显示的三个表

4ef70cb2546950c0bd52597789b896cd.png第一步

c06b3250a33b280b7035b3239cf3bf50.png第二步:学生选课的信息

a78c65069dc173e02a06664a73e645db.png关联好`select和`course`表

1e405d1b235c5be17f2839ac63c15557.png学生表学院表选课表关联好

926822910ea543e74bccf7d5f9823b8d.png所有的表

caa0cf0ce8097cd5a6517ae1442fd7c4.png实现最终的结果

7.事务

事务: 是数据库运行中的一个逻辑工作单位。

原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性:事务在完成时,必须使所有的数据都保持一致状态。隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。为了保证数据库记录的更新从一个一致性状态变更为另一个一致性状态使用事务来处理。

618c252e32c095e1b6fb5931dc6d07b4.png创建一张银行表

假设现在用户小明在商店买了500元东西,现在要转账给商店,那么就需要从小明的账户上减去500,然后在商店的用户上加上500,但是如果在减500的过程中出现了系统故障,再重新启动后发现小明的钱扣了,但商店却没有收到,这时候就会出现数据变动不一致。对于这种数据的修改我们需要的就是要么同时修改成功,要么同时修改失败,所以这就需要用事务来进行出来。

START TRANSACTION:开始一个新的事务。COMMIT:提交当前事务,做出永久改变。ROLLBACK:回滚当前事务,放弃修改。

a6dd4aa234b98926c8403067d1c3ffb8.png操作

bc75e7882ab8d4eb546333ef270788a7.png扣费操作

当在付费的时候系统发生故障,那么小明的那500块钱会怎么样。这时候我们系统默认设置了一个ROLLBACK:回滚当前事务,放弃修改。

87c218e9953813f2287a3b4f49e90f37.png回滚初始状态

948e41d0f841c59f880ba91b63540006.png一个正常的网上交易流程

注意:当COMMIT后,数据修改成功,ROLLBACK也没法回到之前了。

好了今天就和大家分享到这里吧!大家也要加油啊,小编都从零基础学到这里,大家不要掉队,多练习还是多练习才是学好编程的正确打开方式。大家加油

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值