巩固mysql基础-从一个需求开始(一)

之前为了修改数据方便测试写了一个脚本,现在想系统整理一下相关知识

计划:

使用docker搭建一个mysql数据库,系统整理mysql基础,使用pymsql练习小Demo。

Demo需求分析

背景:测试人员也是一种测试资源,当测试部门独立时,测试人员作为一种测试资源在项目中合理配比。
需求 :一个员工最多归属两个项目
设计:分析需求画ER图:(矩形是实体,圆形是属性,菱形是关系)


image.png
  • 建表

staff

字段 类型 注解
staff_id TINYINT PRIMARY KEY
staff_name CHAR
staff_age TINYINT
staff_sex TINYINT 1:男,2:女
staff_dept TINYINT
staff_email VARCHAR
  • 建表sql
use HE;

CREATE TABLE IF NOT EXISTS `staff`(
`staff_id` TINYINT AUTO_INCREMENT,
`staff_name` CHAR(40) NOT NULL,
`staff_sex` TINYINT NOT NULL,
`staff_dept`  VARCHAR(40) NOT NULL,
`staff_age`  TINYINT NOT NULL,
`staff_email` VARCHAR(100) NOT NULL,
 PRIMARY KEY ( `staff_id` )
 

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

item

字段 类型 注解
item_id TINYINT PRIMARY KEY
item_name CHAR
item_describe VARCHAR
  • 建表sql:
CREATE TABLE IF NOT EXISTS `item`(
`item_id` TINYINT AUTO_INCREMENT,
`item_name` CHAR(40) NOT NULL,
`item_describe` VARCHAR(100) NOT NULL,
 PRIMARY KEY ( `item_id` )
 

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

relation

字段 类型 注解
relation_id TINYINT PRIMARY KEY
item_id TINYINT
staff_id TINYINT
item_time DATE 此处应该拆分一个开始时间和结束时间,但是因为暂时没有逻辑,此处只是一个练习,但是如果有扩展需要时间查询,放在这里比较好扩展
  • 建表sql

use HE;
CREATE TABLE IF NOT EXISTS `relation`(
`relation_id` TINYINT AUTO_INCREMENT,
`item_id` TINYINT NOT NULL,
`staff_id` TINYINT NOT NULL ,
`item_time` DATE NOT NULL,
 PRIMARY KEY ( `relation_id` )
 

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 模拟一些操作:

新增项目sql


insert into item (item_name,item_describe)
values("测试项目3","一个测试项目"),("测试项目4","1111");



查询项目sql

SELECT * FROM HE.item;

新增几个人员

insert into staff (staff_name,staff_dept,staff_age,staff_email,staff_sex)
values("小许","测试部",18,"example@xxx.com",2),("小班","测试部",19,"example1@xxx.com",2),("小李","测试部",19,"example1@xxx.com",2);

where子句

#多少员工等于18岁
select * from staff where staff_age = 18;

update

#修改员工邮箱
update staff set staff_email="example@xx.cn" where staff_name= “小许”;
'''此时会报错:异常内容:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.
这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,执行命令SET SQL_SAFE_UPDATES = 0;修改下数据库模式
'''
update staff set staff_email="example@xx.xyz" where staff_id= 1

delete

#小李离职
delete from staff where id =2;

like子句

#获取staff表中
select * from staff where staff_email like '%xyz'

新增项目关系

#添加几个项目关系
#小班加入第一个项目 小许加入第一第二项目
insert into relation (item_id,staff_id,item_time)
values(1,1,"2020-05-21"),(2,1,"2020-05-22"),(1,2,"2020-05-22");

union和union all

#这里用不到,随便举个无业务逻辑的例子:
#取出relution和item的item_id(相同的值只取一次)
select  item_id from relation union select item_id from item;
#取出relution和item的全部item_id
select  item_id from relation union allselect item_id from itemorder by item_id

排序

#降序排列staff
select *from staff order by staff_id desc
#升序排列
select *from staff order by staff_id asc

tips:新增人员后端返回的数据最好是降序排列,否则在添加之后客户看不到反馈。客户的反馈是考量产品的友好度的一个方面,应该在业务逻辑中考量产品的友好度

内连接
查询员工表和关系表 staff_id相同数据

#查询有在项目的项目的员工
SELECT * FROM staff a   inner join relation b on a.staff_id=b.staff_id;

左连接(左外连接)

SELECT * FROM staff a   left join relation b on a.staff_id=b.staff_id;

右连接(右外连接)

SELECT * FROM staff a   right join relation b on a.staff_id=b.staff_id;

具体可以参考以下链接(图解内连接等连接)
https://blog.csdn.net/plg17/article/details/78758593

GROU BY

#对应id有多少项目
SELECT staff_id,count(*)from relation group by staff_id

嵌套右连接分组

#员工各有几个项目
select staff_name,count(*) from (select a.* FROM staff a  right join relation b   on a.staff_id=b.staff_id  ) as  c group by staff_name ;

事务

#开始事务
begin;
#更新员工email字段
update staff set staff_email="example@xx.xyz" where staff_id= 1
#回滚
rollback;
#查询Email字段未变动
select * from staff;

下面是综合回顾:

相关知识点
docker
mysql
pymysql

docker:我们要了解什么是docker
https://www.zhihu.com/question/28300645
我们这里只是为了方便准备环境,方便练习。

准备环境:

请先安装docker
#搜索可用的mysql
docker search mysql
#我们拉一下最新的镜像
docker pull mysql:latest

#数据持久化将容器内db数据映射出来:
#新建目录
mkdir -p /home/mySql/db
#跑起来容器
docker run -itd --name mysql-test -v /home/mySql/db:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=84529563 mysql

#连接试试
docker exec -it f61f90d6f52b mysql -h localhost -uroot -p


pymysql:

环境:pycharm+python3.6+pymongo
使用pymysql需要装以下两个库:
我是在pycharm


pymysql

cryptography(此处要注意)

以一次建库操作体验一下pymysql

import pymysql

connect = pymysql.connect(
    host= 'ip',
    user='root',password='84529563',
    database='RENTEST',
    charset= 'utf8')
#创建游标
cursor = connect.cursor()
#sql语句
sql= "create DATABASE HE;"
effect_row = cursor.execute(sql)
#提交事务
connect.commit()
#关闭游标对象
cursor.close()
#关闭数据库链接
connect.close()

sql语法

此处还是要系统学习一下
https://segmentfault.com/a/1190000015189617

数据库分类:

SQL语言有五类
1、DDL Data Defintion Language即数据定义语言
包含操作:creat(建库)、drop(删库)alter(表的相关操作)
2、DML Data Manipulation Language即数据操作语言
包括操作:insert delete update select
3、DQL Data Query Language即数据查询语言select
4、TCL Transaction Control Language即事务控制:begin、roolback,commit
5、DCL Data Control Language即数据控制语言:用户权限相关

(未完待续)
下一篇计划利用flask框架写一个接口,练习pymysql

一个好的测试也要了解开发的思维,只有了解了开发思维,才知道如何与研发沟通

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353