zoukankan      html  css  js  c++  java
  • 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结尾的文件保存什么

    自己答案:

    四、老师辛苦了!

  • 相关阅读:
    vj p1034题解
    2010.11.9南高模拟赛
    vj p1041神风堂人数 题解
    noi99钉子和小球 解题报告
    vj p1032题解
    vj p1037题解
    vj p1040题解
    vj p1038题解
    vj p1042捕风捉影 题解
    vj p1046 观光旅游 题解
  • 原文地址:https://www.cnblogs.com/wsnedved2017/p/7120925.html
Copyright © 2011-2022 走看看