MySQL 指南(二)

作者: ghwaphon | 来源:发表于2016-10-14 15:23 被阅读417次

    本篇文章继续沿用 MySQL 指南(一) 中创建的 studentaddress 表。

    1. 视图
      为什么创建视图? 视图本身并不保存数据,但是允许我们像处理真实表一样去处理视图。所以创建视图的一般作用就是对数据进行查询,并且可以在获取到数据的时候对数据进行格式化处理,比如进行部分列之间的运算操作或者对列名进行重命名。
      CREATE VIEW studentView AS
      SELECT
      *
      FROM
      student;
      利用上面的语句我们就创建了一个名为 studentView 的视图,我们可以像在真实表中查询数据一样在视图中查询数据。
      select studentName from studentInfo;

    2. UNION 操作
      UNION 操作其实就是并操作,是集合运算的一种,不过要进行并操作的两组数据必须具有相同的列,并且列属于同一值域。
      selectStatementOne
      UNION
      selectStatementTwo;
      这时候返回的数据是默认消除重复行的,如果想返回所有数据,不消除重复行,可以将 UNION 改成 UNION ALL.

    3. 存储过程
      存储过程有很多优点,比如可以把多条 SQL 语句保存到一个单独的过程中,还可以让参数和SQL 语句结合使用。下面就来创建有参和无参的存储过程。
      DELIMITER $$
      create procedure studentProcedure()
      BEGIN
      SELECT * FROM student;
      END$$
      DELIMITER ;

       call studentProcedure;
      
       DELIMITER $$
       create procedure studentProcedure(stuID INTEGER)
       BEGIN
       SELECT * FROM student WHERE studentId = stuID;
       END$$
       DELIMITER ;
      
       call studentProcedure(1);
      

    DELIMITER 用于声明分隔符,默认的分隔符是 ;这里我们必须首先将分隔符修改为其它字符,不然编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错。

    1. 下面单独创建两张表对数据的插入和更新进行讲解。
      CREATE TABLE oldStudents (
      studentId INTEGER NOT NULL,
      studentName VARCHAR(16) NOT NULL,
      studentTel VARCHAR(16) NOT NULL,
      PRIMARY KEY (studentId)
      ) ENGINE=INNODB CHARSET=UTF8;

       CREATE TABLE newStudents (
           studentId INTEGER NOT NULL,
           studentName VARCHAR(16) NOT NULL,
           studentTel VARCHAR(16) NOT NULL,
           PRIMARY KEY (studentId)
       )  ENGINE=INNODB CHARSET=UTF8;
      

    可见,这两张表除了表名之外是完全相同的,这个时候如果两个表中分别存放着不同的数据,我们想把 newStudents 中的信息完全导入到 oldStudents,我们可以这么做。
    INSERT INTO oldStudents
    SELECT * FROM newStudents;
    有的时候可能两个表中保存着相同的学生信息,但是新表中的信息是刚录入的,旧表中的信息已经失效了,这个时候我们希望将新的信息更新到旧表中,可以这么做。
    UPDATE oldStudents
    SET oldStudents.studentId = (SELECT newStudents.studentId FROM newStudents WHERE newStudents.studentId = oldStudents.studentId),
    oldStudents.studentName = (SELECT newStudents.studentName FROM newStudents WHERE newStudents.studentId = oldStudents.studentId),
    oldStudents.studentTel = (SELECT newStudents.studentTel FROM newStudents WHERE newStudents.studentId = oldStudents.studentId)
    WHERE EXISTS(SELECT * FROM newStudents WHERE newStudents.studentId = oldStudents.studentId)

    相关文章

      网友评论

        本文标题:MySQL 指南(二)

        本文链接:https://www.haomeiwen.com/subject/rehgyttx.html