MySQL 指南(二)

本篇文章继续沿用 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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 1,845评论 0 10
  • 一. Java基础部分.................................................
    wy_sure阅读 3,833评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,754评论 18 399
  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,594评论 0 33
  • 2017年8月13日星期日雨 读经时间:10:00AM 读经方式:跟音频读,诵读 茵茵读经内容:1、《易经》说卦转...
    育心茵可妈阅读 1,070评论 0 1