Mysql阶段性项目——QQ数据库管理
MySql 数据库设计与应用 第七章项目练习
阶段项目——QQ数据库管理
任务概述: 模拟QQ在线聊天系统
后台数据库的创建
基本数据表的创建
表约束、 表间关系的添加
进行数据增加、 删除、 修改、 查询
一.创建表
创建QQUser表
# 创建数据库
CREATE DATABASE `mysqlqq`;
#打开数据库
USE `mysqlqq`;
#创建QQUser表
CREATE TABLE `qquser` (
`QQID` BIGINT(15) NOT NULL COMMENT 'QQ号',
`passWord` VARCHAR(50) NOT NULL COMMENT '密码',
`lastLogTime` DATETIME NOT NULL COMMENT '最后一次登录时间',
`online` INT NOT NULL COMMENT '在线状态',
`level` INT(50) DEFAULT'0' NOT NULL COMMENT '用户等级',
PRIMARY KEY (`QQID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
创建Baseinfo表
创建Baseinfo表
CREATE TABLE `baseinfo` (
`QQID` BIGINT(15) DEFAULT NULL COMMENT 'QQ号',
`nickName` VARCHAR(50) NOT NULL COMMENT '昵称',
`sex` INT DEFAULT NULL COMMENT '性别',
`age` INT DEFAULT NULL COMMENT '年龄',
`province` VARCHAR(50) DEFAULT NULL COMMENT '省份',
`city` VARCHAR(50) DEFAULT NULL COMMENT '城市',
`address` VARCHAR(50) DEFAULT NULL COMMENT '详细地址',
`phone` VARCHAR(50) DEFAULT NULL COMMENT '联系方式',
KEY `QQID` (`QQID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
创建Relation表
创建Relation表
CREATE TABLE `relation` (
`QQID` BIGINT(15) NOT NULL COMMENT '用户A的QQ号',
`RelationQQID` BIGINT(15) NOT NULL COMMENT '用户B的QQ号',
`RelationStatus` INT NOT NULL COMMENT '用户关系:0表示B是A的好友,1表示B是A的黑名单',
PRIMARY KEY (`QQID`,`RelationQQID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
二.添加约束
QQ密码不得少于6位
在线状态的值必须为0、 1、 2, 0表示在线, 1表示离线, 2表示隐身
用户关系只能是数字0、 1, 0表示好友, 1表示黑名单人物
性别允许为空值, 如果输入值就必须为0或1,0表示男, 1表示女
用户等级默认值为0
年龄必须是在1~100之间的整数
-- 添加`qquser`表约束
ALTER TABLE `qquser` ADD CONSTRAINT CHECK(`QQID`>=6);
ALTER TABLE `qquser` ADD CONSTRAINT CHECK(`online`IN(0,1,2)); -- 添加`baseinfo`表约束
ALTER TABLE `baseinfo` ADD CONSTRAINT CHECK(`QQID`>=6);
ALTER TABLE `baseinfo` ADD CONSTRAINT CHECK(`sex`IN(NULL,0,1));
ALTER TABLE `baseinfo` ADD CONSTRAINT CHECK(`age`>=1 AND `age`<=100); -- 添加`relation`表约束
ALTER TABLE `relation` ADD CONSTRAINT CHECK(`RelationStatus`IN(0,1,2));
ALTER TABLE `relation` ADD CONSTRAINT CHECK(`QQID`>=6);
ALTER TABLE `relation` ADD CONSTRAINT CHECK(`RelationQQID`>=6);
三.建立表间关系
-- 建立表关系
ALTER TABLE `baseinfo` ADD CONSTRAINT FOREIGN KEY(`QQID`) REFERENCES `qquser` (`QQID`);
ALTER TABLE `relation` ADD CONSTRAINT FOREIGN KEY(`QQID`) REFERENCES `qquser` (`QQID`);
ALTER TABLE `relation` ADD CONSTRAINT FOREIGN KEY(`RelationQQID`) REFERENCES `qquser` (`QQID`);
四.插入测试数据
- 打开navicat
- 导入文件
- 插入成功
五.查询数据
查询昵称为“小笨猪” 的用户信息
-- 查询昵称为“小笨猪” 的用户信息
SELECT *
FROM `baseinfo`
WHERE `nickName`='小笨猪';
查询QQ号码为88662753的用户的所有好友信息
显示QQ号码( QQID) 、 昵称( NickName) 、 年龄( Age)
-- 查询QQ号码为88662753的用户的所有好友信息 显示QQ号码( QQID) 、 昵称( NickName) 、 年龄( Age)
SELECT r.`QQID` AS 'QQ号', b.`QQID` AS '好友QQ号',b.`nickName` AS '昵称',b.`age` AS '年龄'
FROM `relation` AS r,`baseinfo` AS b
WHERE r.`QQID`='88662753' AND r. `RelationStatus`= 0 AND r.`RelationQQID`= b.`QQID`;
查询当前在线用户信息
-- 查询当前在线用户信息
SELECT q.`QQID` AS 'QQ号' , b.`nickName` AS '昵称', b.`sex` AS '性别', b.`age` AS '年龄', b.`province` AS '省份',b.`city` AS '城市'
FROM `qquser` AS q ,`baseinfo` AS b
WHERE `online`=0 AND b.`QQID`=q.`QQID`;
查询北京市、 年龄在18-45岁之间的在线用户的信息
-- 查询北京市、 年龄在18-45岁之间的在线用户的信息
SELECT q.`QQID` AS 'QQ号' , b.`nickName` AS '昵称', b.`sex` AS '性别', b.`age` AS '年龄', b.`province` AS '省份',b.`city` AS '城市'
FROM `qquser` AS q,`baseinfo` AS b
WHERE b.`city` LIKE '%北京%' AND (b.`age`BETWEEN 18 AND 45) AND `online`=0 AND b.`QQID`=q.`QQID`;
查询QQ号码为54789625的用户的好友中每个省份的总人数
按总人数由大到小排序-- 查询QQ号码为54789625的用户的好友中每个省份的总人数 按总人数由大到小排序
SELECT b.`province` AS '省份',COUNT(*) AS '总人数'
FROM`relation` AS r,`baseinfo` AS b
WHERE r.`QQID`='54789625'AND r.`RelationStatus`= 0 AND b.`QQID`=r.`RelationQQID`
GROUP BY b.`province`
ORDER BY COUNT(*) DESC;
查询至少有1000天未登录QQ账号的用户信息
显示QQ号码、 最后一次登录时间、 等级、 昵称、 年龄
按时间降序排序-- 查询至少有1000天未登录QQ账号的用户信息 显示QQ号码、 最后一次登录时间、 等级、 昵称、 年龄 按时间降序排序
SELECT b.`QQID` AS 'QQ号码',q.`lastLogTime` AS '最后一次登录时间', q.`level` AS '用户等级',b.`nickName` AS '昵称',b.`age` AS '年龄'
FROM `baseinfo` AS b,`qquser` AS q
WHERE DATEDIFF(NOW(),`lastLogTime`)>1000 AND b.`QQID`= q.`QQID`
ORDER BY `lastLogTime` DESC ;
查询QQ号码为54789625的好友中等级为10级以上的“月亮” 级
用户信息-- 查询QQ号码为54789625的好友中等级为10级以上的“月亮” 级 用户信息
SELECT r.`QQID` AS 'QQ号' ,r.`RelationQQID` AS '好友QQ号', b.`nickName` AS '昵称', b.`sex` AS '性别', b.`age` AS '年龄',q.`level` AS '等级'
FROM `baseinfo` AS b
JOIN `qquser` AS q ON b.`QQID` =q.`QQID`
JOIN `relation` AS r ON r.`RelationQQID`=q.`QQID`
WHERE r.`QQID`='54789625' AND `RelationStatus` =0 AND q.`level`>=10 ;
查询QQ号码为54789625的好友中隐身的用户信息
显示QQ号、 好友QQ号、 昵称、 年龄-- 查询QQ号码为54789625的好友中隐身的用户信息 显示QQ号、 好友QQ号、 昵称、 年龄
SELECT r.`QQID` AS 'QQ号',r.`RelationQQID` AS '好友QQ号',b.`nickName` AS '好友昵称',b.`age` AS '年龄'
FROM `relation` AS r
JOIN `baseinfo` AS b ON b.`QQID` =r.`RelationQQID`
JOIN `qquser` AS q ON r.`RelationQQID`=q.`QQID`
WHERE r.`QQID`='54789625' AND r.`RelationStatus`=0 AND q.`online`=2;
查询好友超过20个的用户QQ号码及其好友总数
-- 查询好友超过20个的用户QQ号码及其好友总数
SELECT `QQID` AS 'QQ号码',COUNT(*) AS '好友总数'
FROM `relation` AS r
WHERE `RelationStatus` =0
GROUP BY `QQID`
HAVING COUNT(*)>20;
查看信誉度统计
-- 查询好友超过20个的用户QQ号码及其好友总数
SELECT `QQID` AS 'QQ号码',COUNT(*) AS '好友总数'
FROM `relation` AS r
WHERE `RelationStatus` =0
GROUP BY `QQID`
HAVING COUNT(*)>20;
管理员需要查询被当作黑名单人物次数排名前10的用户
-- 查看信誉度统计 管理员需要查询被当作黑名单人物次数排名前10的用户
SELECT `RelationQQID` AS 'QQ号',COUNT(*) AS 黑名单次数
FROM Relation
WHERE `RelationStatus` = 1
GROUP BY RelationQQID
ORDER BY COUNT(*) DESC
LIMIT 10 ;
六.修改数据
假设我的QQ号码为8855678, 今天我隐身登录
-- 假设我的QQ号码为8855678, 今天我隐身登录
SELECT *
FROM `qquser`
WHERE `QQID`='8855678';
UPDATE `qquser` SET `online`=2,`lastLogTime`=NOW()
WHERE `QQID`='8855678';
假设我的QQ号码为8855678
修改我的昵称为“被淹死的鱼” , 地址为“解放中路6号院106室”
-- 假设我的QQ号码为8855678 修改我的昵称为“被淹死的鱼” , 地址为“解放中路6号院106室”
SELECT *
FROM `baseinfo`
WHERE `QQID` ='8855678';
UPDATE `baseinfo` SET `nickName`='被淹死的鱼',`address`='解放中路6号院106室'
WHERE `QQID` ='8855678';
假设我的QQ号码为8855678
将我的好友“248624066” 拖进黑名单-- 假设我的QQ号码为8855678 将我的好友“248624066” 拖进黑名单
SELECT *
FROM `relation`
WHERE `QQID`='8855678' AND `RelationQQID`='248624066';
UPDATE `relation` SET `RelationStatus` =1
WHERE `QQID`='8855678' AND `RelationQQID`='248624066';
为了提高QQ用户的聊天积极性
把等级小于6级的用户等级都提升1个级别-- 为了提高QQ用户的聊天积极性 把等级小于6级的用户等级都提升1个级别
SELECT *
FROM `qquser`
WHERE `level`<6;
UPDATE `qquser`SET`level`=`level`+1
WHERE`level`<6;
管理员将超过365天没有登录过的QQ锁定
将等级设定为-1-- 管理员将超过365天没有登录过的QQ锁定 将等级设定为-1
SELECT *
FROM `qquser`
WHERE (NOW()-`lastLogTime`)>=365;
UPDATE `qquser` SET`level`=-1
WHERE (NOW()-`lastLogTime`)>=365;
为了奖励用户, 将好友数量超过20的用户等级提升1个级别
-- 为了奖励用户, 将好友数量超过20的用户等级提升1个级别
SELECT *
FROM `qquser`
WHERE `QQID` IN(
SELECT `QQID`
FROM `relation`
WHERE `RelationStatus`=0
GROUP BY `QQID`
HAVING COUNT(*)>20); UPDATE `qquser` SET `level`=`level`+1
WHERE`QQID`IN(
SELECT `QQID`
FROM `relation`
WHERE `RelationStatus`=0
GROUP BY `QQID`
HAVING COUNT(*)>20);
把QQ号码为286314的用户的好友“嘟嘟鱼” 拖进黑名单中
-- 把QQ号码为286314的用户的好友“嘟嘟鱼” 拖进黑名单中 SELECT *
FROM `baseinfo` AS b ,`relation` AS r
WHERE r.`QQID`='286314' AND `RelationStatus` =0 AND `RelationQQID`IN(SELECT `QQID`
FROM `baseinfo`
WHERE `nickName`='嘟嘟鱼'); UPDATE `relation` SET`RelationStatus` =1
WHERE `RelationQQID`IN(SELECT `QQID`
FROM `baseinfo`
WHERE `nickName`='嘟嘟鱼') AND `RelationStatus` =0;
七.删除数据
把QQ号码为54789625的用户的黑名单中的用户删除
-- 把QQ号码为54789625的用户的黑名单中的用户删除
SELECT *
FROM `relation`
WHERE `QQID`='54789625'AND`RelationStatus`=1; DELETE FROM `relation`
WHERE `QQID`='54789625'AND`RelationStatus`=1;
QQ号码为622009019的用户多次在QQ中发布违法信息
造成了很坏的影响, 因此管理员决定将其删除-- QQ号码为622009019的用户多次在QQ中发布违法信息造成了很坏的影响, 因此管理员决定将其删除
SELECT *
FROM `baseinfo`
WHERE `QQID`='622009019'; DELETE FROM `relation`
WHERE `QQID`='622009019' OR`RelationQQID`='622009019'; DELETE FROM `baseinfo`
WHERE `QQID`='622009019'; DELETE FROM `qquser`
WHERE `QQID`='622009019';
删除超过1000天没有登录过的QQ用户信息
-- 删除超过1000天没有登录过的QQ用户信息
SELECT `QQID`
FROM `qquser`
WHERE DATEDIFF(NOW(),`lastLogTime`)>1000; DELETE FROM `relation`
WHERE `QQID` IN(SELECT `QQID`
FROM `qquser`
WHERE DATEDIFF(NOW(),`lastLogTime`)>1000) OR `RelationQQID` IN(SELECT `QQID`
FROM `qquser`
WHERE DATEDIFF(NOW(),`lastLogTime`)>1000); DELETE FROM `baseinfo`
WHERE `QQID` IN(SELECT `QQID`
FROM `qquser`
WHERE DATEDIFF(NOW(),`lastLogTime`)>1000); DELETE FROM `qquser`
WHERE DATEDIFF(NOW(),`lastLogTime`)>1000; SELECT `QQID`
FROM `qquser`
WHERE DATEDIFF(NOW(),`lastLogTime`)>1000;
Mysql阶段性项目——QQ数据库管理的更多相关文章
- 连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,
连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的, 2018-03-12 17:08:52.532DEBUG[localhost-startStop-1]o.s.beans.factor ...
- 云服务器+tomcat+mysql+web项目搭建部署
云服务器+tomcat+mysql+web项目搭建部署 1.老样子,开头墨迹两句. 作为我的第二篇文章,有很多感慨,第一篇人气好低啊,有点小丧气,不过相信我还是经验少,分享的都是浅显的,所以大家可能不 ...
- springboot成神之——springboot+mybatis+mysql搭建项目简明demo
springboot+mybatis+mysql搭建项目简明demo 项目所需目录结构 pom.xml文件配置 application.properties文件配置 MyApplication.jav ...
- EF6 + MySql 建立项目引用失败
EF6 + MySql 建立项目 步骤 在项目中使用” NuGet” 包添加 EntityFramework 和 MySql.Data ,如下图 (1) 在NuGet界面中的“浏览”选项卡 ...
- 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解
http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...
- freemarker + spring mvc + spring + mybatis + mysql + maven项目搭建
今天说说搭建项目,使用freemarker + spring mvc + spring + mybatis + mysql + maven搭建web项目. 先假设您已经配置好eclipse的maven ...
- Eclipse+Spring+SpringMVC+Maven+Mybatis+MySQL+Tomcat项目搭建
---恢复内容开始--- 1. 建表语句及插入数据 CREATE TABLE `book_user` ( user_id INT(11) NOT NULL AUTO_INCREMENT, user_n ...
- php+mysql+apache项目运行所遇到的一系列配置问题
今天运行一个php项目时,突然发现访问不了了.起因应该是mac系统升级,导致apache配置文件完全恢复到了默认状态,一切归零.作为一个经验尚欠的前端,对这些后台配置完全是一窍不通,赶紧微信联系了小胖 ...
- SpringMVC+Mybatis+Mysql实战项目学习--环境搭建
1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...
随机推荐
- MYSQL的事务和索引
事务 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACID原则 ...
- [MRCTF2020]Ezpop-1|php序列化
1.打开题目获取到源代码信息,如下: Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From h ...
- SSH 多密钥配置
目录 前言 一.SSH 是什么 二.密钥生成工具 三.密钥类型 四.本地配置 1.单密钥配置 2.多密钥配置 五.远端配置 1.GitHub/Gitee 2.服务器 前言 当我们从 GitHub 克隆 ...
- Css3入门详解
一.Css基本语法 1.Html和Css没分开时 点击查看代码 <!DOCTYPE html> <html lang="en"> <head> ...
- java.super详解
package Demo.oop.APP.Demo03; //demo3包的启动器 //此启动器用于继承 public class application { public static void m ...
- mobaxterm会话同步
前言 之前用过MobaXterm,想不起来为啥不用了.后面主要还是用xshell,最近又在用WindTerm,WindTerm还不错,奈何有不少的Bug,所以又来研究一下MobaXterm 下午摸索了 ...
- osi七层与TCP\IP协议
层次划分的方法 1.网络的每层应当具有相对独立的功能(便于排错)这个功能用不了必然是你这层处理问题 2.梳理功能之间的关系,使上一个功能可以实现为另一个功能提供必要的服务,从而形成系统的层次结构.为提 ...
- python sphinx(文档生成器)入门
简介 Sphinx 是一个 文档生成器 ,您也可以把它看成一种工具,它可以将一组纯文本源文件转换成各种输出格式,并且自动生成交叉引用.索引等.也就是说,如果您的目录包含一堆 reStructuredT ...
- python常用功能模块
路径相关:os.pathlib Windows注册表相关:winreg 系统cpu.内存.线程相关:psutil 文件.文件夹处理:shutil 解析和生成ini文件:ConfigParser:(co ...
- MYSQL常见可优化场景
1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null 可以在num上设置 ...