鞏固mysql基礎(chǔ)-從一個(gè)需求開始(一)

之前為了修改數(shù)據(jù)方便測試寫了一個(gè)腳本赡模,現(xiàn)在想系統(tǒng)整理一下相關(guān)知識

計(jì)劃:

使用docker搭建一個(gè)mysql數(shù)據(jù)庫田炭,系統(tǒng)整理mysql基礎(chǔ),使用pymsql練習(xí)小Demo漓柑。

Demo需求分析

背景:測試人員也是一種測試資源教硫,當(dāng)測試部門獨(dú)立時(shí)厕怜,測試人員作為一種測試資源在項(xiàng)目中合理配比萨咕。
需求 :一個(gè)員工最多歸屬兩個(gè)項(xiàng)目
設(shè)計(jì):分析需求畫ER圖:(矩形是實(shí)體识虚,圓形是屬性宜雀,菱形是關(guān)系)


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 此處應(yīng)該拆分一個(gè)開始時(shí)間和結(jié)束時(shí)間搜吧,但是因?yàn)闀簳r(shí)沒有邏輯翁涤,此處只是一個(gè)練習(xí)打肝,但是如果有擴(kuò)展需要時(shí)間查詢坤邪,放在這里比較好擴(kuò)展
  • 建表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;
  • 模擬一些操作:

新增項(xiàng)目sql


insert into item (item_name,item_describe)
values("測試項(xiàng)目3","一個(gè)測試項(xiàng)目"),("測試項(xiàng)目4","1111");



查詢項(xiàng)目sql

SELECT * FROM HE.item;

新增幾個(gè)人員

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= “小許”;
'''此時(shí)會(huì)報(bào)錯(cuò):異常內(nèi)容: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.
這是因?yàn)镸ySql運(yùn)行在safe-updates模式下惭蹂,該模式會(huì)導(dǎo)致非主鍵條件下無法執(zhí)行update或者delete命令伞插,執(zhí)行命令SET SQL_SAFE_UPDATES = 0;修改下數(shù)據(jù)庫模式
'''
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'

新增項(xiàng)目關(guān)系

#添加幾個(gè)項(xiàng)目關(guān)系
#小班加入第一個(gè)項(xiàng)目 小許加入第一第二項(xiàng)目
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

#這里用不到,隨便舉個(gè)無業(yè)務(wù)邏輯的例子:
#取出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:新增人員后端返回的數(shù)據(jù)最好是降序排列剿干,否則在添加之后客戶看不到反饋蜂怎。客戶的反饋是考量產(chǎn)品的友好度的一個(gè)方面置尔,應(yīng)該在業(yè)務(wù)邏輯中考量產(chǎn)品的友好度

內(nèi)連接
查詢員工表和關(guān)系表 staff_id相同數(shù)據(jù)

#查詢有在項(xiàng)目的項(xiàng)目的員工
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;

具體可以參考以下鏈接(圖解內(nèi)連接等連接)
https://blog.csdn.net/plg17/article/details/78758593

GROU BY

#對應(yīng)id有多少項(xiàng)目
SELECT staff_id,count(*)from relation group by staff_id

嵌套右連接分組

#員工各有幾個(gè)項(xiàng)目
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 ;

事務(wù)

#開始事務(wù)
begin;
#更新員工email字段
update staff set staff_email="example@xx.xyz" where staff_id= 1
#回滾
rollback;
#查詢Email字段未變動(dòng)
select * from staff;

下面是綜合回顧:

相關(guān)知識點(diǎn)
docker
mysql
pymysql

docker:我們要了解什么是docker
https://www.zhihu.com/question/28300645
我們這里只是為了方便準(zhǔn)備環(huán)境杠步,方便練習(xí)。

準(zhǔn)備環(huán)境:

請先安裝docker
#搜索可用的mysql
docker search mysql
#我們拉一下最新的鏡像
docker pull mysql:latest

#數(shù)據(jù)持久化將容器內(nèi)db數(shù)據(jù)映射出來:
#新建目錄
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:

環(huán)境:pycharm+python3.6+pymongo
使用pymysql需要裝以下兩個(gè)庫:
我是在pycharm


pymysql

cryptography(此處要注意)

以一次建庫操作體驗(yàn)一下pymysql

import pymysql

connect = pymysql.connect(
    host= 'ip',
    user='root',password='84529563',
    database='RENTEST',
    charset= 'utf8')
#創(chuàng)建游標(biāo)
cursor = connect.cursor()
#sql語句
sql= "create DATABASE HE;"
effect_row = cursor.execute(sql)
#提交事務(wù)
connect.commit()
#關(guān)閉游標(biāo)對象
cursor.close()
#關(guān)閉數(shù)據(jù)庫鏈接
connect.close()

sql語法

此處還是要系統(tǒng)學(xué)習(xí)一下
https://segmentfault.com/a/1190000015189617

數(shù)據(jù)庫分類:

SQL語言有五類
1榜轿、DDL Data Defintion Language即數(shù)據(jù)定義語言
包含操作:creat(建庫)幽歼、drop(刪庫)alter(表的相關(guān)操作)
2、DML Data Manipulation Language即數(shù)據(jù)操作語言
包括操作:insert delete update select
3谬盐、DQL Data Query Language即數(shù)據(jù)查詢語言select
4甸私、TCL Transaction Control Language即事務(wù)控制:begin、roolback飞傀,commit
5皇型、DCL Data Control Language即數(shù)據(jù)控制語言:用戶權(quán)限相關(guān)

(未完待續(xù))
下一篇計(jì)劃利用flask框架寫一個(gè)接口诬烹,練習(xí)pymysql

一個(gè)好的測試也要了解開發(fā)的思維,只有了解了開發(fā)思維弃鸦,才知道如何與研發(fā)溝通

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绞吁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子唬格,更是在濱河造成了極大的恐慌家破,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件购岗,死亡現(xiàn)場離奇詭異汰聋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)喊积,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門烹困,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人注服,你說我怎么就攤上這事韭邓〈虢” “怎么了溶弟?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瞭郑。 經(jīng)常有香客問我辜御,道長,這世上最難降的妖魔是什么屈张? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任擒权,我火速辦了婚禮,結(jié)果婚禮上阁谆,老公的妹妹穿的比我還像新娘碳抄。我一直安慰自己,他們只是感情好场绿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布剖效。 她就那樣靜靜地躺著,像睡著了一般焰盗。 火紅的嫁衣襯著肌膚如雪璧尸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天熬拒,我揣著相機(jī)與錄音爷光,去河邊找鬼。 笑死澎粟,一個(gè)胖子當(dāng)著我的面吹牛蛀序,可吹牛的內(nèi)容都是我干的欢瞪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼徐裸,長吁一口氣:“原來是場噩夢啊……” “哼引有!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倦逐,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤譬正,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后檬姥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曾我,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年健民,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抒巢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秉犹,死狀恐怖蛉谜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崇堵,我是刑警寧澤型诚,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站鸳劳,受9級特大地震影響狰贯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赏廓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一涵紊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幔摸,春花似錦摸柄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尿贫,卻和暖如春电媳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庆亡。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工匾乓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人又谋。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓拼缝,卻偏偏與公主長得像娱局,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子咧七,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359