大学数据库系统原理 Mysql数据库实验记录

本文主要是介绍大学数据库系统原理 Mysql数据库实验记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软件版本说明:
1.Mysql数据库:sql server8.0

dd75b8600aa24161b18c74ebb24171e1.png

2.命令实现使用以及数据库可视化查看:Navicat 16

bb2edcb2729e4713983e01bc23d0f401.png

#不用Mysql Command Line 的原因是不喜欢那个黑框,也不常用,使用Navicat的MYSQL命令列界面是一样的

另外说明   实现相同的效果可能有很多种SQL语句,我的答案只是一种参考,不一定是最简单有效的哦

实验任务要求:

一、建表、插入数据

建立校级创新项目数据库的四个基本表并用INSERT 语句输入数据:

注意:

  1. 一个教师能负责多个项目
  2. 一个项目只能有一名指导老师,能有多名学生参与
  3. 一个学生能选择多个项目;

建表要求:

  1. 注意实体完整性约束以及参照完整性约束;
  2. 自定义完整性:性别约束,成绩约束(Grade在0~100之间);
  3. 成绩、年龄为int,其余均为char。

    S(Sno,Sname,Ssex,Sage,Sdept) 学生(学号,姓名,性别,年龄,系)

T(Tno,Tname, Tsex,Tdept) 教师(教师编号,教师姓名,教师所在系)

P(Pno,Pname,Tno) 项目(项目编号,项目名称,指导教师编号)

SP(Sno,Pno,Grade) 参与情况(学号,项目编号,成绩)

//代码块1 建立学生表S及运行结果
mysql> CREATE TABLE S(Sno CHAR(5) PRIMARY KEY,Sname char(10),Ssex char(2) check(Ssex in('男','女')),Sage int check(Sage between 0 and 100),Sdept char(2));Query OK, 0 rows affected (0.02 sec)
//代码块2 建立教师表T及运行结果mysql> CREATE TABLE T(Tno char(3) PRIMARY KEY,Tname char(10),Tsex char(2) CHECK(Tsex in('男','女')),Tdept char(2));Query OK, 0 rows affected (0.02 sec)
​

 

//代码块3 建立项目P表及运行结果
mysql> CREATE TABLE P (Pno CHAR(5) PRIMARY KEY,Pname CHAR(20),Tno CHAR(5),FOREIGN KEY (Tno) REFERENCES T(Tno)
);Query OK, 0 rows affected (0.05 sec)

 

//代码块4 建立参与情况表SP
mysql> CREATE TABLE SP(Sno char(6),Pno char(5),Grade int check(Grade between 0 and 100),foreign key (Sno) references S(Sno),foreign key (Pno) references P(Pno),primary key(Sno,Pno));
Query OK, 0 rows affected (0.03 sec)

S表数据如下:

'23121', '韩刚', '男', 20, 'CS'

'23122', '刘心语', '女', 19, 'CS'

'23123', '苏恬', '女', 19, 'CS'

'23124', '潘佳慧', '女', 19, 'CS'

'23125', '邓辉', '男', 20, 'CS'

'23126', '肖馨玥', '女', 19, 'CS'

'23127', '薛志超', '男', 20, 'CS'

'23128', '迪丽', '女', 19, 'CS'

'23201',‘罗钧一’,‘男’,20,‘MA’

'23202', '王浩然', '男', 18, 'MA'

'23203',‘马杰’,‘男’,20,‘MA’

'23204, '蔡静雯', '女', 18, 'MA'

'23205',‘刘雪彤’,‘女’,20,‘MA’

'23206', '丁一', '女', 18, 'MA'

'23321', '张立', '男', 19, 'IS'

'23322', '杨娜', '女', 19, 'IS'

//代码块5 插入学生表S信息及运行结果
mysql> INSERT INTO S VALUES ('23121', '韩刚', '男', 20, 'CS'),
('23122', '刘心语', '女', 19, 'CS'),
('23123', '苏恬', '女', 19, 'CS'),
('23124', '潘佳慧', '女', 19, 'CS'),
('23125', '邓辉', '男', 20, 'CS'),
('23126', '肖馨玥', '女', 19, 'CS'),
('23127', '薛志超', '男', 20, 'CS'),
('23128', '迪丽', '女', 19, 'CS'),
('23201', '罗钧一', '男', 20, 'MA'),
('23202', '王浩然', '男', 18, 'MA'),
('23203', '马杰', '男', 20, 'MA'),
('23204', '蔡静雯', '女', 18, 'MA'),
('23205', '刘雪彤', '女', 20, 'MA'),
('23206', '丁一', '女', 18, 'MA'),
('23321', '张立', '男', 19, 'IS'),
('23322', '杨娜', '女', 19, 'IS');Query OK, 16 rows affected (0.02 sec)
Records: 16  Duplicates: 0  Warnings: 0

T表数据如下:

'101', '梁任甫', 'CS'

'102', '陈鹤寿', 'CS'

'103', '王静安', 'MA'

'104', '赵宜仲', ‘IS’

//代码块6 插入教师表
mysql> INSERT INTO T VALUES('101', '梁任甫', '男', 'CS'),('102', '陈鹤寿', '男', 'CS'),('103', '王静安', '女', 'MA'),('104', '赵宜仲', '男', 'IS');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

P表数据如下:

'1', '数据库设计项目', '101'

'2', '无人机飞行设计项目', '103'

'3', '校园网络规划项目, '102'

'4', '操作系统设计项目', '101'

'5', '视觉处理项目', '102'

'6', '大模型构建项目', ‘104’

//7插入项目表
mysql> INSERT INTO P VALUES ('1', '数据库设计项目', '101'),('2', '无人机飞行设计项目', '103'),('3', '校园网络规划项目', '102'),('4', '操作系统设计项目', '101'),('5', '视觉处理项目', '102'),('6', '大模型构建项目', '104');
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0

SP表(可自行补充数据):

'23122', '3', 80

'23122', '2', 90

'23121', '3', 88

'23122', '5', 68

'23123', '1', 92

'23124', '2', 85

'23125', '5', 94

'23126', '3', 88

'23201', '1', 92

'23202', '1', 92

'23202', '6', 77

'23203', '2', 79

'23204', '4', 85

'23122', '6', 90

'23205', '3', 99

'23206', '5', 58

'23321', '1', 55

'23321', '6', 81

'23322', '6', 89

'23322', '2', 75

'23128', '4', 81

'23127', '4', 89

'23128', '1', 88

'23122', '1', 75

'23122', '4', 80

//代码块8 插入参与情况表
mysql> INSERT INTO SP VALUES
('23122', '3', 80),
('23122', '2', 90),
('23121', '3', 88),
('23122', '5', 68),
('23123', '1', 92),
('23124', '2', 85),
('23125', '5', 94),
('23126', '3', 88),
('23201', '1', 92),
('23202', '1', 92),
('23202', '6', 77),
('23203', '2', 79),
('23204', '4', 85),
('23122', '6', 90),
('23205', '3', 99),
('23206', '5', 58),
('23321', '1', 55),
('23321', '6', 81),
('23322', '6', 89),
('23322', '2', 75),
('23128', '4', 81),
('23127', '4', 89),
('23128', '1', 88),
('23122', '1', 75),
('23122', '4', 80);Query OK, 25 rows affected (0.01 sec)
Records: 25  Duplicates: 0  Warnings: 0
  • 建表
  1. 建立四个基本表
  2. 用INSERT插入数据,SP表可自行补充数据,

 

二、查询

1. 查询参与 3 号项目的学生学号与该课程成绩。

mysql> SELECT Sno,Grade FROM SP WHERE Pno=3;
+-------+-------+
| Sno   | Grade |
+-------+-------+
| 23121 |    88 |
| 23122 |    80 |
| 23126 |    88 |
| 23205 |    99 |
+-------+-------+
4 rows in set (0.03 sec)

2. 查询负责项目名为'无人机飞行设计项目'的教师姓名。

mysql> select Tname FROM P,T WHERE T.Tno=P.Tno and Pname='无人机飞行设计项目';
+--------+
| Tname  |
+--------+
| 王静安 |
+--------+
1 row in set (0.03 sec)mysql> SELECT T.Tname FROM T JOIN P ON T.Tno = P.Tno WHERE Pname = '无人机飞行设计项目';
+--------+
| Tname  |
+--------+
| 王静安 |
+--------+
1 row in set (0.02 sec)

3. 查询没有参与 2 号项目的学生姓名与专业。

mysql> select S.Sname,S.Sdept from S WHERE Sno not in(select Sno from SP where Pno=2);
+--------+-------+
| Sname  | Sdept |
+--------+-------+
| 韩刚   | CS    |
| 苏恬   | CS    |
| 邓辉   | CS    |
| 肖馨玥 | CS    |
| 薛志超 | CS    |
| 迪丽   | CS    |
| 罗钧一 | MA    |
| 王浩然 | MA    |
| 蔡静雯 | MA    |
| 刘雪彤 | MA    |
| 丁一   | MA    |
| 张立   | IS    |
+--------+-------+
12 rows in set (0.04 sec)

这里where里面的Sno如果写为S.Sno,那么结果就会有很多重复的相同结果,需要在select后面加distinct才会得到同样的输出,但是这样效率低,花费时间为0.05sec。原理是如果用的S.Sno,是把所有的Sno一起,挨个和选择出的not in 结果比较,每比较一次得到一些结果后就再拿全部Sno去比较下一个not in 结果(一个学生可以多个项目),所以会有重复出现的结果

4. 查询参加了所有项目的学生姓名。

mysql> SELECT S.Sname
FROM S
WHERE NOT EXISTS (SELECT *FROM PWHERE NOT EXISTS (SELECT *FROM SPWHERE SP.Sno = S.Sno AND SP.Pno = P.Pno)
);
+--------+
| Sname  |
+--------+
| 刘心语 |
+--------+
1 row in set (0.03 sec)

这个还挺难写的 

5. 查询只参加一个项目的学生的学号。

mysql> select Sno from (select Sno,count(*) as p_count from SP GROUP BY Sno) as p_counts where p_count=1;
+-------+
| Sno   |
+-------+
| 23121 |
| 23123 |
| 23124 |
| 23125 |
| 23126 |
| 23127 |
| 23201 |
| 23203 |
| 23204 |
| 23205 |
| 23206 |
+-------+
11 rows in set (0.03 sec)mysql> SELECT Sno
FROM SP
GROUP BY Sno
HAVING COUNT(*) = 1;
+-------+
| Sno   |
+-------+
| 23121 |
| 23123 |
| 23124 |
| 23125 |
| 23126 |
| 23127 |
| 23201 |
| 23203 |
| 23204 |
| 23205 |
| 23206 |
+-------+
11 rows in set (0.08 sec)

 每一个派生的关系都需要起一个别名,比如这里的p_count和p_counts

6. 查询所有项目成绩均及格的学生的学号和平均成绩,其结果按平均成绩的降序排列。(平均成绩:参与项目成绩/参与项目数)

mysql> SELECT Sno, AVG(Grade) AS 平均成绩
FROM SP
GROUP BY Sno
HAVING MIN(Grade) >= 60
ORDER BY 平均成绩 DESC;
+-------+----------+
| Sno   | 平均成绩 |
+-------+----------+
| 23205 | 99.0000  |
| 23125 | 94.0000  |
| 23123 | 92.0000  |
| 23201 | 92.0000  |
| 23127 | 89.0000  |
| 23121 | 88.0000  |
| 23126 | 88.0000  |
| 23124 | 85.0000  |
| 23204 | 85.0000  |
| 23128 | 84.5000  |
| 23202 | 84.5000  |
| 23322 | 82.0000  |
| 23122 | 80.5000  |
| 23203 | 79.0000  |
+-------+----------+
14 rows in set (0.04 sec)

要查询所有项目成绩均及格的学生的学号和平均成绩,首先需要计算每个学生的平均成绩,然后筛选出平均成绩均及格的学生,并按平均成绩的降序排列。

SELECT Sno, AVG(Grade) AS 平均成绩 FROM SP GROUP BY Sno HAVING MIN(Grade) >= 60 ORDER BY 平均成绩 DESC;

这个查询首先按学号分组,然后计算每个学生的平均成绩。接着使用HAVING子句过滤出平均成绩均大于等于60分的学生,并按平均成绩的降序排列。

 

7. 查询参与1号项目,且成绩排名第2的学生姓名。(成绩相同按相同名次处理,比如88,88,85,则85为第2名)

mysql> SELECT S.Sname
FROM S
JOIN SP ON S.Sno = SP.Sno
WHERE Pno = 1
ORDER BY Grade DESC
LIMIT 1 OFFSET 1;+--------+
| Sname  |
+--------+
| 罗钧一 |
+--------+
1 row in set (0.06 sec)mysql> SELECT S.Sname
FROM S
JOIN SP ON S.Sno = SP.Sno
WHERE Pno = 1
ORDER BY Grade DESC
LIMIT 1,1;+--------+
| Sname  |
+--------+
| 罗钧一 |
+--------+
1 row in set (0.04 sec)

三、数据修改、删除与视图

1. 把4号项目的成绩降低5%。

c73ad815ec0e4e109007902aceb71a16.png

mysql> update SP set Grade=Grade*0.95 where Pno=4;Query OK, 4 rows affected (0.02 sec)
Rows matched: 4  Changed: 4  Warnings: 0

388604221c10440b98ffc7742be75772.png

2. 在P表和 SP表中删除项目号为5的所有数据。(删除后做回滚处理)

 

//因为之前执行过语句了,所以被影响的行是0
mysql> START TRANSACTION;
DELETE FROM P WHERE Pno = 5;
DELETE FROM SP WHERE Pno = 5;
ROLLBACK;
Query OK, 0 rows affected (0.01 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)

0863f2943a3e4a3296f4ae1eb77343c0.png

192bfa1767794bdbb0775d4e4c8db994.png

3. 建立女学生的视图,属性包括学号、姓名、参与项目名字和成绩。

mysql> CREATE VIEW Femal_Student AS SELECT S.Sno, S.Sname,P.Pname,SP.Grade from S join SP ON S.Sno=SP.Sno JOIN P on SP.Pno=P.Pno WHERE S.Ssex='女';Query OK, 0 rows affected (0.01 sec)

dc8b44d47184437b8489f767ebec40f6.png

4. 在女学生视图中查询平均成绩大于 80 分的学生学号与姓名。

mysql> select Sno,Sname from Femal_Student group by Sname,Sno having AVG(Grade)>80;
+-------+--------+
| Sno   | Sname  |
+-------+--------+
| 23122 | 刘心语 |
| 23123 | 苏恬   |
| 23124 | 潘佳慧 |
| 23126 | 肖馨玥 |
| 23128 | 迪丽   |
| 23204 | 蔡静雯 |
| 23205 | 刘雪彤 |
| 23322 | 杨娜   |
+-------+--------+
8 rows in set (0.07 sec)

5. 建立成绩视图,计算每个学生的参与项目数目、平均成绩。

mysql> CREATE VIEW Grade_View AS 
SELECT Sno,COUNT(Pno) as 参与项目数, avg(grade) as 平均成绩 
from SP group by Sno;
Query OK, 0 rows affected (0.01 sec)

dc81c327a95d4fd0ba5860816fffd0d2.png

6. 使用 GRANT 语句,把对基本表 SP 的所有权限,S,P,T表的查询权限授给Root3。

mysql> create user Root3;
Query OK, 0 rows affected (0.01 sec)
//先创建了Root3mysql> GRANT ALL ON SP TO Root3;
Query OK, 0 rows affected (0.01 sec)mysql> GRANT SELECT ON S TO Root3;
Query OK, 0 rows affected (0.01 sec)mysql> GRANT SELECT ON P TO Root3;
Query OK, 0 rows affected (0.01 sec)mysql> GRANT SELECT ON T TO Root3;
Query OK, 0 rows affected (0.01 sec)

 

四、触发器

1.首先解除S表和SP表的参照关系。然后在Student表上创建一个触发器,使更新一个学生的学号信息时能够级联的更新此学生在SP表中的学号信息,并进行验证。

mysql> alter table SP drop foreign key SP_ibfk_1;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> CREATE TRIGGER Update_SP_Sno
after update on s
for each row
begin
UPDATE SP
SET Sno=NEW.Sno
where Sno=old.Sno;
end;
Query OK, 0 rows affected (0.01 sec)

 

mysql> select Sno from S  ;
+-------+
| Sno   |
+-------+
| 23121 |
| 23122 |
| 23123 |
| 23124 |
| 23125 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23206 |
| 23321 |
| 23322 |
+-------+
16 rows in set (0.03 sec)mysql> select DISTINCT Sno from SP  ;
+-------+
| Sno   |
+-------+
| 23121 |
| 23122 |
| 23123 |
| 23124 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23321 |
| 23322 |
+-------+
14 rows in set (0.04 sec)  mysql> UPDATE S SET Sno='11111' WHERE Sno='23121';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select Sno from S  ;
+-------+
| Sno   |
+-------+
| 11111 |
| 23122 |
| 23123 |
| 23124 |
| 23125 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23206 |
| 23321 |
| 23322 |
+-------+
16 rows in set (0.03 sec)mysql> select DISTINCT Sno from SP  ;
+-------+
| Sno   |
+-------+
| 11111 |
| 23122 |
| 23123 |
| 23124 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23321 |
| 23322 |
+-------+
14 rows in set (0.03 sec)// 删除外键mysql> UPDATE S SET Sno='22222' WHERE Sno='11111';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select Sno from S  ;
+-------+
| Sno   |
+-------+
| 22222 |
| 23122 |
| 23123 |
| 23124 |
| 23125 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23206 |
| 23321 |
| 23322 |
+-------+
16 rows in set (0.03 sec)mysql> select DISTINCT Sno from SP  ;
+-------+
| Sno   |
+-------+
| 11111 |
| 23122 |
| 23123 |
| 23124 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23321 |
| 23322 |
+-------+
14 rows in set (0.03 sec)//为了验证触发器,先将SP表的'11111'手动改为'22222'
UPDATE SP SET Sno='22222' WHERE Sno='11111';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select DISTINCT Sno from SP  ;
+-------+
| Sno   |
+-------+
| 22222 |
| 23122 |
| 23123 |
| 23124 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23321 |
| 23322 |
+-------+
14 rows in set (0.03 sec)
//此时数据相同但是没有关联mysql> CREATE TRIGGER Update_SP_Sno
after update on s
for each row
begin
UPDATE SP
SET Sno=NEW.Sno
where Sno=old.Sno;
end;
Query OK, 0 rows affected (0.01 sec)mysql> UPDATE S SET Sno='23121' WHERE Sno='22222';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select DISTINCT Sno from S  ;
+-------+
| Sno   |
+-------+
| 23121 |
| 23122 |
| 23123 |
| 23124 |
| 23125 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23206 |
| 23321 |
| 23322 |
+-------+
16 rows in set (0.03 sec)mysql> select DISTINCT Sno from SP  ;
+-------+
| Sno   |
+-------+
| 23121 |
| 23122 |
| 23123 |
| 23124 |
| 23126 |
| 23127 |
| 23128 |
| 23201 |
| 23202 |
| 23203 |
| 23204 |
| 23205 |
| 23321 |
| 23322 |
+-------+
14 rows in set (0.03 sec)

2.在 S 表中编写 insert 的触发器,假如表的学生不能超过 18个,如果低于此数,添加可以完成;如果超过此数,则插入将不能实现。进行验证。

mysql> CREATE TRIGGER Check_Student_Count
BEFORE INSERT ON S
FOR EACH ROW
BEGINDECLARE student_count INT;SELECT COUNT(*) INTO student_count FROM S;IF student_count >= 18 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '学生数量已达上限';END IF;
END;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into S values('88888','何何','男',22,'CS');
Query OK, 1 row affected (0.01 sec)mysql> insert into S values('88889','何何','男',22,'CS');
Query OK, 1 row affected (0.00 sec)mysql> insert into S values('88890','何何','男',22,'CS');
1644 - 学生数量已达上限

 

3.在 SP 表上编写 update 触发器,当修改 SP表中的 Grade 字段时将其修改前后的信息保存在 SC_log 表中。实验完成后,撤消建立的基本表和视图。

mysql> CREATE TABLE SC_log (Sno INT,Pno INT,Old_Grade INT,New_Grade INT
);CREATE TRIGGER Update_Grade_Log
AFTER UPDATE ON SP
FOR EACH ROW
BEGININSERT INTO SC_log (Sno, Pno, Old_Grade, New_Grade)VALUES (OLD.Sno, OLD.Pno, OLD.Grade, NEW.Grade);
END;
Query OK, 0 rows affected (0.02 sec)Query OK, 0 rows affected (0.00 sec)

 

 

 

这篇关于大学数据库系统原理 Mysql数据库实验记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105508

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key: