MySQL(视图,存储函数,存储过程)

作业1:

 作业实现:

首先创建学生表,课程表,以及学生选课表。

CREATE TABLE Student (
    Sno INT PRIMARY KEY,
    Sname VARCHAR(20) NOT NULL,
    Ssex CHAR(1) CHECK (Ssex IN ('男', '女')),
    Sage INT,
    SDept VARCHAR(20) DEFAULT '计算机'
);

CREATE TABLE Course (
    Cno INT PRIMARY KEY,
    Cname VARCHAR(20) NOT NULL
);

CREATE TABLE SC (
    Sno INT,
    Cno INT,
    Score INT,
    PRIMARY KEY (Sno, Cno),
    FOREIGN KEY (Sno) REFERENCES Student(Sno),
    FOREIGN KEY (Cno) REFERENCES Course(Cno)
);

 1.用SQL语句创建学生表student,定义主键,姓名不能重名,性别只能输入男或女,所在系的默认值是 “计算机”。

CREATE TABLE Student (
    Sno INT PRIMARY KEY,
    Sname VARCHAR(20) NOT NULL,
    Ssex CHAR(1) CHECK (Ssex IN ('男', '女')),
    Sage INT,
    SDept VARCHAR(20) DEFAULT '计算机'
);

2.修改student 表中年龄(age)字段属性,数据类型由int 改变为smallint。

ALTER TABLE Student MODIFY Sage SMALLINT;


3.为SC表建立按学号(sno)和课程号(cno)组合的升序的主键索引,索引名为SC_INDEX 。

CREATE INDEX SC_INDEX ON SC (Sno, Cno);


4.创建一视图 stu_info,查询全体学生的姓名,性别,课程名,成绩。

CREATE VIEW stu_info AS
SELECT Sname, Ssex, Cname, Score
FROM Student
JOIN SC ON Student.Sno = SC.Sno
JOIN Course ON SC.Cno = Course.Cno;
desc stu_info;

 作业2:

 作业实现:

首先创建sch表并写入数据

CREATE TABLE sch (
    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    glass VARCHAR(50) NOT NULL
);

insert into sch (id, name, glass) values (NULL, 'xiaommg', 'glass 1');
insert into sch (id, name, glass) values (NULL, 'xiaojun', 'glass 2');
insert into sch (id, name, glass) values (NULL, 'xiaoshuai', 'glass 1');
insert into sch (id, name, glass) values (NULL, 'xiaoliu', 'glass 2');
insert into sch (id, name, glass) values (NULL, 'xiaohui', 'glass 1');
insert into sch (id, name, glass) values (NULL, 'xiaoxi', 'glass 2');

 1、创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch()

DELIMITER //
create function count_sch() returns int
begin
	declare total_count int;
    select count(*) into total_count from sch;
    return total_count;
end //

这里创建存储函数时出现报错,“you *might* want to use the less safe log_bin_trust_function_creators variable”

这里用到的解决方法为“SET GLOBAL log_bin_trust_function_creators = 1;”。

2、创建一个存储过程avg_sai,有3个参数,分别是deptno,job,接收平均工资,功能查询emp表dept为30,job为销售员的平均工资。

        这里首先需要先创建emp表并填入相关数据:

CREATE TABLE `emp`  (
  `empno` int(4) NOT NULL,
  `deptno` int(2) NOT NULL,
  `ename` varchar(255),
  `job` varchar(255),
  PRIMARY KEY (`empno`) USING BTREE
);

INSERT INTO `emp` VALUES (1001, 30, 'asd', '前台');
INSERT INTO `emp` VALUES (1002, 30, 'qwe', '部门经理');
INSERT INTO `emp` VALUES (1003, 30, 'qaz', '销售员');

接下来创建存储过程avg_sai,功能查询emp表dept为30,job为销售员的平均工资。

DELIMITER //
create procedure avg_sai(in deptno int, in job varchar(50), out avg_salary decimal(10, 2))
begin
	select avg(salary) into avg_salary from emp where dept = deptno and job = job;
end //

call avg_sai(30,'销售员',@avg_salary);

相关推荐

  1. MYSQL 存储过程 函数

    2024-01-19 12:46:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-19 12:46:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-19 12:46:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-19 12:46:02       82 阅读
  4. Python语言-面向对象

    2024-01-19 12:46:02       91 阅读

热门阅读

  1. initdb: command not found【PostgreSQL】

    2024-01-19 12:46:02       45 阅读
  2. 《设计模式的艺术》笔记 - 外观模式

    2024-01-19 12:46:02       49 阅读
  3. opensssl BIO方式https客户端

    2024-01-19 12:46:02       44 阅读
  4. rocketmq交叉编译aarch64 GNU/Linux

    2024-01-19 12:46:02       47 阅读
  5. Docker Compose的实战应用指南

    2024-01-19 12:46:02       36 阅读
  6. Docker设置获取环境变量

    2024-01-19 12:46:02       52 阅读
  7. springboot log4j配置xml实例说明

    2024-01-19 12:46:02       51 阅读
  8. vue:状态管理库及其部分原理(Vuex、Pinia)

    2024-01-19 12:46:02       49 阅读
  9. 安卓之文本转视频的应用场景以及技术优劣分析

    2024-01-19 12:46:02       60 阅读
  10. RTC讲解

    RTC讲解

    2024-01-19 12:46:02      53 阅读