MySQL第三次作业

文章介绍了MySQL中的存储过程和存储函数在参数传递、变量、控制流、返回值、调用方式以及数据修改等方面的区别。存储过程允许条件判断和数据修改,而存储函数主要作为查询工具,且不能包含while循环。

1.写一个完整的包括参数、变量、变量赋值、条件判断

DELIMITER //
 
CREATE PROCEDURE example_procedure (IN parameter1 INT)
BEGIN
  DECLARE variable1 INT;
  
  -- 变量赋值
  SET variable1 = parameter1;
  
  -- 条件判断
  IF variable1 > 5 THEN
    -- UPDATE语句
    UPDATE your_table SET column1 = variable1 WHERE column2 = 'some_condition';
  END IF;
  
  -- SELECT返回结果集
  SELECT * FROM your_table;
  
END //
 
DELIMITER ;

2.创建一个执行动态SQL的存储过程

DELIMITER //
 
CREATE PROCEDURE dynamic_procedure(IN table_name VARCHAR(50), IN col_name VARCHAR(50))
BEGIN
    SET @sql_stmt = CONCAT('SELECT * FROM ', table_name, ' WHERE ', col_name, ' = 1');
    PREPARE stmt FROM @sql_stmt;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END //
 
DELIMITER ;

3.功能相同的存储函数,比较他们之间的不同点在什么地方?

(1)返回值类型:存储过程可以没有返回值,但存储函数必须返回一个值。存储函数可以是内建的(如ABS()函数)或自定义的,而存储过程只能是自定义的。

(2)调用方式:存储函数可以像普通 SQL 函数一样被调用,而存储过程必须使用 CALL 语句来调用。存储函数的语法如下:

 SELECT function_name(arguments);


(3)数据修改:存储函数通常用于查询操作,不会改变数据库中的数据。而存储过程可以通过数据修改语句(如 INSERT、UPDATE 和 DELETE)来修改数据库中的数据。存储函数中也可以使用修改数据的语句,但不推荐这样做。

(4)存在执行器的差异:存储过程的执行需要使用执行器来完成。执行器是MySQL内核中的一个模块,负责与存储引擎进行交互,处理查询请求的各个阶段,并返回结果给客户端。而存储函数则没有这个限制,可以直接由 MySQL 解释器执行。

(5)控制流差异:存储过程中可以使用控制流语句(如IF、CASE和while),这些语句可以参与逻辑运算等复杂的操作。而存储函数中也有一些控制流语句,但是不能使用 while 循环。
 

### 完成 MySQL 第一次作业的指南 #### 数据库创建与表结构设计 为了完成 MySQL 的第一次作业,首先需要建立数据库并定义相应的表格结构。假设本次作业的目标是从给定的数据集中提取特定的信息,比如学生成绩超过60分的学生列表。 ```sql CREATE DATABASE school; USE school; -- 创建学生表 CREATE TABLE stu ( sid INT PRIMARY KEY, sname VARCHAR(50), xueke VARCHAR(50) ); -- 插入测试数据到学生表 INSERT INTO stu (sid, sname, xueke) VALUES (1, '小薇', '计算机科学'), (2, '小雪', '电子工程'); ``` 上述 SQL 语句用于初始化一个新的数据库 `school` 并在其内部构建了一个名为 `stu` 的表来存储学生的个人信息[^1]。 #### 查询操作实现 接下来执行查询命令以获取成绩大于等于60分的学生记录: ```sql SELECT DISTINCT stu.sid, stu.sname FROM sco LEFT JOIN stu ON stu.sid = stu_id WHERE number >= 60; ``` 此查询语句展示了如何通过联接两个不同的表 (`sco`, `stu`) 来筛选符合条件的结果集,并只返回唯一的学生条目。 #### 表间关系处理 对于涉及多张表之间的关联查询,理解各表间的逻辑联系至关重要。这里采用的是左外连接(LEFT JOIN),这意味着即使右侧表中不存在匹配项也会保留左侧表中的所有行。这种类型的连接有助于确保不会遗漏任何可能满足条件但缺少对应分数记录的学生信息。 #### 扩展练习建议 除了基本的选择查询之外,还可以尝试其他形式的操作如插入新纪录、更新现有字段值或者删除不再适用的数据行等。例如向 `TStudent` 表添加一条新的学员记录可以这样写: ```sql INSERT INTO TStudent (studentid, sname) VALUES ('19999', '张永超')[^3]; ``` 以上就是关于 MySQL 首次作业的一些指导性说明,希望可以帮助顺利完成任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值