2017年07月05号 星期三 多云 空气质量:中度污染
内容:mysql第五节课+MySQL自测考试
表连接查询:内连接,左右外连接,自连接
事务:事务的特性 ACID,demo(模拟 银行转账)开启,回滚,提交,关闭/开启事务自动提交
一、表连接查询
1、概念:
1)内连接 : 通过匹配两个表中公共列,找到 公共的行!
2)左外连接: 以左表为准,右表中没有数据返回null
3)右外连接: 以右表为准,左表中没有数据返回null
4)自连接: 把一个表当成多个表来使用 关键是 使用别名
2、demo
1)内连接和隐式内连接
-- 输出学生姓名以及对应的年级名称 内连接
SELECT StudentName,GradeName FROM student INNER JOIN gradeON student.`GradeId`=grade.`GradeID`-- 隐式内连接
SELECT StudentName,GradeName FROM student,gradeWHERE student.`GradeId`=grade.`GradeID`2)查询 考试 课程编号是1的 学生姓名 以及年级名称 和科目名称以及成绩
01.
SELECT s.StudentName,GradeName,SubjectName ,studentResult FROM student sINNER 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.studentNoAND b.subjectNo=102.
SELECT StudentName,GradeName,SubjectName ,studentResult FROMstudent s,grade g,`subject` b,result rWHERE s.gradeID=g.gradeIDAND g.gradeID=b.gradeIDAND s.studentNo=r.studentNoAND b.subjectNo=r.subjectNoAND b.subjectNo=13)左外连接和右外连接
-- 左外连接
SELECT * FROM grade LEFT JOIN studentON grade.GradeID=student.gradeid;-- 右外连接
SELECT * FROM grade RIGHT JOIN studentON 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-- 提交事务 COMMITUPDATE 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结尾的文件保存什么
自己答案:
四、老师辛苦了!