MySQL数据库数据视图

bangongJIAO1@c 发布于 2025-11-29 阅读(2)
目录
  • 一、 数据视图
  • 二、数据视图操作
    • 创建视图
    • 修改视图数据
    • 修改视图列明
    • 删除视图
  • 三、数据的备份与回复
    • liunx备份
    • mysql备份
  • 四、 MySQL存储过程和函数
    • 概念
  • 五、存储过程操作
    • 初始数据
    • 创建过程
    • 调用存储过程
    • 查找存储过程
    • 删除存储过程
    • 其他语法
  • 六、 存储函数

    一、 数据视图

    视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。我们可以将视图看成是一个移动的窗口,从这个窗口中可以看到感兴趣的数据。

    二、数据视图操作

    创建视图

    // 标准语法: CREATE VIEW 视图名称 [(列名列表)] AS 查询语句;
    
    // 创建city_country视图,保存城市和国家的信息(使用指定列名)
    CREATE VIEW city_country(city_id,city_name,country_name) 
    AS
    SELECT c1.id, c1.name, c2.name FROM city c1, country c2 WHERE c1.cid = c2.id;

    修改视图数据

    // 标准语法: UPDATE 视图名称 SET 列名=值 WHERE 条件;
    
    // 注意:修改视图数据后,源表中的数据也会随之修改
    UPDATE city_country SET city_name="深圳" WHERE city_name="北京";

    修改视图列明

    // 标准语法: ALTER VIEW 视图名称 (列名列表) AS 查询语句; 
    
    ALTER VIEW city_country (city_id, city_name, NAME) AS 
    SELECT c1.id, c1.name, c2.name
    FROM  city c1, country c2
    WHERE c1.cid = c2.id;

    删除视图

    // 标准语法 DROP VIEW [IF EXISTS] 视图名称;
    // 删除city_country视图
    
    DROP VIEW IF EXISTS city_country;

    三、数据的备份与回复

    liunx备份

    备份文件:

    mysqldump -u root -p 数据库名称 > 文件保存路径

    还原:

    source 文件保存路径

    mysql备份

    备份-> 导出备份数据库 还原-> 导入备份文件

    四、 MySQL存储过程和函数

    概念

    • 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合

    好处:

    • 可以重复使用,减轻开发人员的工作量
    • 减少网络流量,调用只需要传递参数名和参数即可
    • 减少数据在数据库和应用服务器之间的传输,可以提高数据处理的效率
    • 将部分逻辑在数据库层进行了处理,减少业务层代码

    区别:

    • 函数必须有返回值
    • 存储过程没有返回值

    五、存储过程操作

    初始数据

    -- 创建学生表
    CREATE TABLE student(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	NAME VARCHAR(20),
    	age INT,
    	gender VARCHAR(5),
    	score INT
    );
    -- 添加数据
    INSERT INTO student VALUES (NULL,'张三',23,'男',95),(NULL,'李四',24,'男',98),
    (NULL,'王五',25,'女',100),(NULL,'赵六',26,'女',90);
    -- 按照性别进行分组,查询每组学生的总成绩。按照总成绩的升序排序
    SELECT gender, SUM(score) getSum FROM student GROUP BY gender ORDER BY getSum ASC;

    创建过程

    // 标准语法
    // 
    DELIMITER $
        -- 标准语法 
    CREATE PROCEDURE 存储过程名称(参数列表)
    BEGIN
        SQL 语句列表;
    END $
    
    -- 修改分隔符为分号
    DELIMITER ;
    
    // 创建stu_group()存储过程,封装 分组查询总成绩,并按照总成绩升序排序的功能
    DELIMITER$
    CREATE PROCEDURE stu_group()
    BEGIN
    	SELECT gender, SUM(score) getSum FROM student GROUP BY gender ORDER BY getSum ASC;
    END$
    DELIMITER ;

    调用存储过程

    // CALL 存储过程名称(实际参数);
    CALL stu_group();

    查找存储过程

     // 标准语法: SELECT * FROM mysql.proc WHERE db='数据库名称';
    SELECT * FROM mysql.proc WHERE db='demoMysql';

    删除存储过程

    //标准语法: DROP PROCEDURE [IF EXISTS] 存储过程名称;
    DROP PROCEDURE IF EXISTS stu_group;

    其他语法

    // 定义变量
    // 语法:DECLARE 变量名 数据类型 [DEFAULT 默认值];
    // 变量赋值
    // 语法一:SET 变量名 = 变量值;
    // 语法二:SELECT 列名 INTO 变量名 FROM 表名 [WHERE 条件];
    // 判断语句
    // if语句
    // IF 判断条件1 THEN 执行的sql语句1;
    // [ELSEIF 判断条件2 THEN 执行的sql语句2;]
    // ...
    // [ELSE 执行的sql语句n;]
    // END IF;
    DELIMITER $
    
    CREATE PROCEDURE pro_test2()
    
    BEGIN
    	-- 定义变量
    	DECLARE NAME VARCHAR(20);
            DECLARE totalScore INT;
            DECLARE info VARCHAR(10);
    	-- 为变量赋值
    	SET NAME = '赋值方式1';
            SELECT SUM(score) INTO totalScore FROM student;
    	
            IF totalScore > 500 THEN
    		SET info='总分超过500';
            END IF;
            -- 使用变量
    	SELECT NAME,totalScore,info;
    END$
    DELIMITER;
    
    // 参数传递
    // 标准语法: CREATE PROCEDURE 存储过程名称([IN|OUT|INOUT] 参数名 数据类型)
    
    DELIMITER $
    CREATE PROCEDURE pro_test5(IN total INT, OUT info VARCHAR(10))
    BEGIN
    	-- 对总成绩判断
    	IF total > 380 THEN
    		SET info = '学习优秀';
    	ELSEIF total >= 320 AND total <= 380 THEN
    		SET info = '学习不错';
    	ELSE
    		SET info = '学习一般';
    	END IF;
    END$
    DELIMITER;
    
    // 调用过程
    CALL pro_test5(350,@info);
    SELECT @info;

    六、 存储函数

    其实和存储过程区别不大,主要在于定义的时候用FUNCTION,同时有return

    DELIMITER $
    CREATE FUNCTION fun_test1()
    RETURNS INT // 返回值类型
    BEGIN
    	DECLARE s_count INT;
    	SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;// 条件语句
    	RETURN s_count;// 返回结果;
    	
    END $
    DELIMITER ;
    // 调用函数
    SELECT fun_test1();
    
    // 删除函数
    DROP FUNCTION fun_test1();