2017年07月05号课堂笔记

2017年07月05号 星期三 多云 空气质量:中度污染

内容:mysql第五节课+MySQL自测考试

表连接查询:内连接,左右外连接,自连接

事务:事务的特性 ACID,demo(模拟 银行转账)开启,回滚,提交,关闭/开启事务自动提交

一、表连接查询

1、概念:

1)内连接 : 通过匹配两个表中公共列,找到 公共的行!

2)左外连接: 以左表为准,右表中没有数据返回null

3)右外连接: 以右表为准,左表中没有数据返回null

4)自连接:  把一个表当成多个表来使用 关键是 使用别名

2、demo

1)内连接和隐式内连接

-- 输出学生姓名以及对应的年级名称 内连接
SELECT StudentName,GradeName FROM student INNER JOIN grade
ON student.`GradeId`=grade.`GradeID`

-- 隐式内连接
SELECT StudentName,GradeName FROM student,grade
WHERE student.`GradeId`=grade.`GradeID`

2)查询 考试 课程编号是1的 学生姓名 以及年级名称 和科目名称以及成绩

01.
SELECT s.StudentName,GradeName,SubjectName ,studentResult FROM student s
INNER JOIN grade g ON (s.gradeID=g.gradeID)
INNER JOIN `subject` b ON(g.gradeID=b.gradeID)
INNER JOIN result r ON (b.subjectNo=r.subjectNo)
AND s.studentNo=r.studentNo
AND b.subjectNo=1

02.
SELECT StudentName,GradeName,SubjectName ,studentResult FROM
student s,grade g,`subject` b,result r
WHERE s.gradeID=g.gradeID
AND g.gradeID=b.gradeID
AND s.studentNo=r.studentNo
AND b.subjectNo=r.subjectNo
AND b.subjectNo=1

3)左外连接和右外连接

-- 左外连接
SELECT * FROM grade LEFT JOIN student
ON grade.GradeID=student.gradeid;

-- 右外连接
SELECT * FROM grade RIGHT JOIN student
ON grade.GradeID=student.gradeid;

4)查询的列 不在同一个表中! 必须使用连接查询!建立关联关系!

-- 临时表只有当前连接可见 随连接的关闭 自动删除
-- 临时表的增删改 不会影响到 真表
CREATE TEMPORARY TABLE myStudent
(SELECT * FROM student)

SELECT * FROM myStudent
DELETE FROM mystudent -- 临时表的数据删除
SELECT * FROM student -- 不会影响到真表

5)自连接

SELECT * FROM teacher
-- 查询 老师3 的姓名和 对应的 导师的姓名
-- t1 老师 t2 导师 老师的导师编号=== 导师的编号
SELECT t1.`name` AS a,t2.`name` AS 导师姓名 FROM teacher t1,teacher t2
WHERE t1.`name`='老师3'
AND t2.id=t1.tid

二、事务

1、事务的概念及特性

1)事务:一条或者多条sql语句的集合!

2)事务的特性 ACID

①原子性 (Atomicity):在事务中的操作,要么都执行,要么都不执行!
②一致性(Consistency):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!
③隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!
④持久性(Durability):事务一旦被改变,那么对数据库中数据的影响是永久性的!


2.demo(模拟 银行转账

1)-- 创建数据库
CREATE DATABASE myBank;
-- 切换指定的数据库
USE myBank;
-- 创建表
CREATE TABLE IF NOT EXISTS bank(
customerName VARCHAR(10) NOT NULL COMMENT '用户名',
currentMoney DECIMAL(10,2) NOT NULL COMMENT '账户余额'
);
-- 插入数据
INSERT INTO bank VALUES('小黑',50000),('小白',500000);


-- 小黑 给小白 转账10000
-- 修改两条数据
-- 01.小黑-10000
-- 02.小白+10000


UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName='小黑';
-- 故意写错字段名称 让02 报错
UPDATE bank SET currentMoneysss=currentMoney+10000
WHERE customerName='小白';

2)-- 开启事务 START TRANSACTION 或者 BEGIN
-- 01.02 为一个事务
BEGIN
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName='小黑';
UPDATE bank SET currentMoneysss=currentMoney+10000
WHERE customerName='小白';
-- 事务回滚 ROLLBACK
-- 提交事务 COMMIT

UPDATE bank SET currentMoney=500000
WHERE customerName='小黑';
-- 证明mysql是默认提交事务的!

3)SET autocommit=0(关闭事务自动提交) | 1(开启事务自动提交)

-- 关闭事务自动提交
SET autocommit=0;

BEGIN; -- 开启事务
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName='小黑';
UPDATE bank SET currentMoney=currentMoney+10000
WHERE customerName='小白';
COMMIT; -- 手动提交事务
UPDATE bank SET currentMoney=10000;
ROLLBACK; -- 事务回滚

SET autocommit=1; -- 恢复自动提交

三、MySQL自测考试

1.cmd 命令后 使用mysql的root用户登录语句

 自己答案:

 

2.创建一个用户并给用户授权,刷新权限

自己答案:

 

3.创建一个名称为T13的数据库

自己答案:

 

4.切换到T13数据库

自己答案:

 

5.创建一个Teacher 表
字段有
id 主键 不为空
name
age
address
teacherID 代表导师的编号

创建成功后,给teacher表添加一个sex字段

自己答案:

 

6.创建一个Student表
id 主键 不为空
age
name
tid 代表对应的教师编号

自己答案:

 

7.给两个表中 新增 至少5条测试数据

自己答案:

 

8.创建teacher表和student表的 主外键关系
提示: 外键关系应该建立在 从表上

自己答案:


9.查询 年龄在20 到 25之间的 学生姓名以及对应的老师姓名

自己答案:

 

10.查询老师的姓名和对应导师的姓名 (自身连接)

自己答案:

 

11.查询老师的平均,最大,最小年龄

自己答案:

 

12.查询年龄最大的前2名学生信息,并按照 降序排列
自己答案:

 

13. sql结构化查询语言的分类,并写出相应的单词

自己答案:



14.常见的约束名称以及关键字?
自己答案:

 

15.在模糊查询中 % 和 _ 的区别

自己答案:

 

16.sql语句的执行顺序

自己答案:

 

17.mysql中 获取时间的函数 至少4个
自己答案:

 

18.有符号和无符号的区别,以及关键字是什么!zerofill的作用

自己答案:


19.MyISAM 和InnoDB两种引擎的区别

自己答案:

 

 

20. MYD,MYI,frm,ibd结尾的文件保存什么

自己答案:

 

 

 

四、老师辛苦了!

 

posted @ 2017-07-14 12:31  不抽烟的香吉士  阅读(179)  评论(0编辑  收藏  举报