只有努力方得成功
我们大家已经对数据库的一些基本操作都比较的熟悉了,那么今天我们来学习一些MySQL数据库中一些简单的日常操作,什么是多种查询、什么是联合查询以及什么是事务。开发工具:IDLE (Python 3.7 64-bit或者32-bit) , pycharm(professional的版本), Ubuntu,xshell6(注:不需要3.7版本的也行,只需要Python3的版本都可以)1.创建五张关系数据表
创建一个名为info的数据库
键表
最重要的中间表
查看当前存在的表
2.往表中插入数据
往几个表中添加数据
往中间表中添加数据并查看其结构
3.查询
SELECT * FROM `department`; 查询的是学院(department)信息表中的内容。
查看学院信息
SELECT * FROM `student`; 查询的是学生信息表(student)中的具体内容。
查看学生表
SELECT * FROM `stu_details`; 查询的是学生详细信息表(stu_details)中的内容。
查看学生详细信息表
SELECT * FROM `course`; 查询的是课程表(course)中的信息。
查看课程表
SELECT * FROM `select`; 查询的是中间表(select)中的信息。
查看中间表信息
mysql> SELECT * FROM `student`; 查询的是表中的所有记录。如果我们想要指定查询表中的一部分内容要怎么样操作呢?mysql> SELECT name,dept_id FROM student; 我们只查看学生的学号和姓名。
指定查询表中的信息
mysql> SELECT * FROM student WHERE `name`='小红'; 查询指定条件下的记录。如果我们想查询之后为列取一个名字,实现这样的功能的应该怎么办?SELECT name AS `姓名` ,dept_id AS 学院id FROM student WHERE s_id>=2;
查询后为列取名
恢复原状
查询指定改名
模糊查询:就是查询所有带有你所指定字段的表信息。
查询指定字段的所有表内信息
mysql>select * from student where name like '小_';mysql> select * from student where name like '%小%';% 多个字(任意个)和星号的作用类似(*)_ 只可以匹配一个字
or
and
select * from student where dept_id is null; 查询学院名为null的字段。select * from student where dept_id is not null; 查询学院不为null的字段4.分组查询
一般和聚合函数一起使用。如果我们要对学生表中学院栏进行分组,并统计学院的学生人数的时候我能应该要怎么办呢?
实现统计学院的学生人数
group by 只能跟聚合函数一起用, 一般用 做统计。select sex , MAX(age) from stu_details group by sex
group 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.子查询
嵌套在查询内部;必须始终出现在圆括号内;可以包含多个关键字或条件.
求出平均年龄
查找大于平均年龄的数据
子查询放入上一条语句中
现在我们呢有一个需求,我们呢现在需要要查找,计算机和外国语 的学生。
找到学院表对应学院的ID
找到对应学院的学生
select * from student where dept_id not in (1,3);
除了括号内的内容输出表中其他的内容
select * from student where dept_id in (1,3);
只输出括号范围的数据
6.联表查询(几张表一起查询)
内连接:[INNER|CROSS]JOIN
无条件内连接:无条件内连接,又名交叉连接/笛卡尔连接.
第一张表中的每一项会和另一张表的每一项依次组合.
有条件内连接:在无条件的内连接基础上,加上一个ON子句
当连接的时候,筛选出那些有实际意义的记录行来进行拼接
注意:在写条件时注意两张表的列名是否一样,如果时一样的则要在前面加上表名,tb_name.colname这种形式存在。
无条件内连接
无条件内连接会使得两个表每一条数据 相互连接,有错误的匹配出现。
有条件内连接
我们有个想法,如果我们需要将学生姓名,和对应学院名都查询出来要怎么操作呢?
得到所求
外连接:{LEFT|RIGHT}[OUTER]JOIN左外连接: (以左表为基准),两张表做连接的时候,在连接条件不匹配的时候,留下左表中的数据,而右表中的数据以NULL填充.
右外连接: (以右表为基准),对两张表做连接的时候,在连接条件不匹配的时候,留下右表中的数据,而左表中的数据以NULL填充.
插入数据并查看表信息
使用内连接加条件
注意:使用内连接加条件只能看到有分配好学院的学生的信息。
左外连接
注意:使用左连接把学生的数据全取出来,该学生没有学院信息的用NULL填充。
右外连接
注意:使用右外连接把目前还没有学生的学院的数据也显示出来。
我们在日常生活中,我们在读书的时候,班主任总是会有本班学生的所有信息。那么怎样才能使得学生的 ( 姓名,选的课程名,所属学院 )都显示出来呢?
需要显示的三个表
第一步
第二步:学生选课的信息
关联好`select和`course`表
学生表学院表选课表关联好
所有的表
实现最终的结果
7.事务
事务: 是数据库运行中的一个逻辑工作单位。
原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性:事务在完成时,必须使所有的数据都保持一致状态。隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。为了保证数据库记录的更新从一个一致性状态变更为另一个一致性状态使用事务来处理。
创建一张银行表
假设现在用户小明在商店买了500元东西,现在要转账给商店,那么就需要从小明的账户上减去500,然后在商店的用户上加上500,但是如果在减500的过程中出现了系统故障,再重新启动后发现小明的钱扣了,但商店却没有收到,这时候就会出现数据变动不一致。对于这种数据的修改我们需要的就是要么同时修改成功,要么同时修改失败,所以这就需要用事务来进行出来。
START TRANSACTION:开始一个新的事务。COMMIT:提交当前事务,做出永久改变。ROLLBACK:回滚当前事务,放弃修改。
操作
扣费操作
当在付费的时候系统发生故障,那么小明的那500块钱会怎么样。这时候我们系统默认设置了一个ROLLBACK:回滚当前事务,放弃修改。
回滚初始状态
一个正常的网上交易流程
注意:当COMMIT后,数据修改成功,ROLLBACK也没法回到之前了。
好了今天就和大家分享到这里吧!大家也要加油啊,小编都从零基础学到这里,大家不要掉队,多练习还是多练习才是学好编程的正确打开方式。大家加油