禅道的服务器启动
image.png

navicat 远程连接数据库

修改配置文件

到禅道Linux一键安装包 /opt/zbox/etc/mysql/my.cnf 把 bind-address= 127.0.0.1,注释掉。
(如果没有这条记录,就不用管了,直接跳过。)

  1. vi /opt/zbox/etc/mysql/my.cnf

image.png

添加远程登录用户

执行添加用户命令,需要运行/opt/zbox/auth/adduser.sh来添加用户

/opt/zbox/auth/adduser.sh

image.png
根据提示输入用户名: fanmao
输入密码: fanmao666

在网页中输入 http://自己ip/adminer
image.png
输入对应的用户名 fanmao
密码 fanmao666
登录成功
image.png

输入对应的服务器信息
image.png

服务器: localhost:3306
用户名: root
密码:123456

点击登录

创建数据库远程登录用户权限

image.png

点击 【SQL 命令】 进入到执行SQL 界面。
运行命令

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

创建一个 用户名为 root 密码为123456 的账号,账号拥有远程登录的权限。

  • grant all privileges 赋予所有的权限
  • on .从任意地方可以进行登录
  • ‘root’@’%’使用root账号操作所有的数据库
  • identified by ‘123456’ 设置root的账号密码为123456;

image.png

flush privileges;

刷新权限生效。
image.png

重启禅道服务

/opt/zbox/zbox restart

image.png

navicat 远程连接数据库

image.png
输入自己的服务器信息
image.png

创建数据库

右键 — 【新建数据库】
image.png
输入数据库名, 选择对应的字符集和排序规则。
image.png

作业

919caaa2834255a6ea6132018bde24a.jpg

创建对应的表

CREATE TABLE `students` (
  `scode` int(10) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `graduate` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`scode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `Course` (
  `Ccode` int(10) NOT NULL AUTO_INCREMENT,
  `CName` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Ccode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `selectiveCourse` (
  `Sccode` int(10) NOT NULL AUTO_INCREMENT,
  `Ccode` int(10) DEFAULT NULL,
  `class` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Sccode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `scores` (
  `Scode` int(10) NOT NULL,
  `Ccode` int(10) DEFAULT NULL,
  `Stime` datetime DEFAULT NULL,
  `Result` decimal(10,2) DEFAULT NULL,
  `ispass` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

image.png

对应的数据库
demo.sql

创建一个新的数据库
image.pngimage.png

运行 sql文件
image.png

选择对应的sql文件路径,点击开始
image.png

作业答案

第2 题

题解
先找到对应的最大分数

-- 条件  
-- 学生, 年级,科目, 分数
-- 根据条件, 需要从 选课表, 成绩表中入手。
-- 找到各年级 各科的 最大分数
select class,a.ccode,max(result) from scores as a
INNER JOIN selectiveCourse as b
ON a.scode=b.scode and a.ccode=b.ccode
GROUP BY class,a.ccode;

-- 根据对应的分数找到对应的人员。

image.png

  1. 根据分数找对应的学生。
    1. 先把四张表关联在一起。 ```sql — 根据对应的分数找到对应的人员。

— 结果中 学生学号,姓名,年级,科目,分数

— 表 成绩表,学生表,科目,选课表

SELECT a.scode,a.Name,b.class,c.Ccode, c.CName,d.Result FROM students as a INNER JOIN selectiveCourse as b ON a.scode = b.Scode INNER JOIN Course as c ON c.Ccode = b.Ccode INNER JOIN scores as d ON d.Scode = a.scode AND d.Ccode=c.Ccode

![image.png](https://cdn.nlark.com/yuque/0/2022/png/87080/1647054331643-7c7c9ec0-63e8-4039-8341-78cf5ccfbcc7.png#clientId=ub37b14e5-517b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=212&id=u65686266&margin=%5Bobject%20Object%5D&name=image.png&originHeight=265&originWidth=518&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16764&status=done&style=none&taskId=u8a9e6e5c-70f7-4e90-b2a6-cb76b18c7c8&title=&width=414.4)<br />有这样的结果, 跟第一步的分数结果进行关联<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/87080/1647054356654-f1c75082-13fe-4134-8226-500ccdbc74ed.png#clientId=ub37b14e5-517b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=173&id=ucb26f496&margin=%5Bobject%20Object%5D&name=image.png&originHeight=216&originWidth=316&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6776&status=done&style=none&taskId=u787fd9e6-98f4-4920-95d5-0c0310c3c6a&title=&width=252.8)<br />将这两个结果临时表,进行条件查询。
```sql
SELECT tmp1.class,tmp2.name, scode,cname,Result  FROM 
    (
    select b.class ,a.ccode,max(result) as 最高成绩 from scores as a
    INNER JOIN selectiveCourse as b
    ON a.scode=b.scode and a.ccode=b.ccode
    GROUP BY b.class,a.ccode
    ) 
    as tmp1
INNER JOIN
    (
        SELECT  a.scode as Scode,a.`Name` as name ,b.class as class,c.Ccode as Ccode, c.CName as cname,d.Result as Result   FROM students as a 
        INNER JOIN selectiveCourse as b
        ON a.scode = b.Scode
        INNER JOIN Course as c 
        ON c.Ccode = b.Ccode
        INNER JOIN scores as d 
        ON d.Scode = a.scode AND d.Ccode=c.Ccode
    ) 
    as tmp2
ON tmp1.class = tmp2.class AND tmp1.Ccode = tmp2.Ccode AND tmp1.最高成绩=tmp2.Result

image.png