本文從實(shí)際工作中梳理出7個(gè)方面的總結(jié):數(shù)據(jù)庫、常用sql語句、數(shù)據(jù)傳輸、文檔語法、邏輯規(guī)則、交互方案、擴(kuò)展技能。
隨著數(shù)據(jù)量增大,業(yè)務(wù)擴(kuò)展,服務(wù)器吃緊,加上開發(fā)跑路比較頻繁,常常導(dǎo)致后端網(wǎng)站很‘爛’,這可能是你一段時(shí)間內(nèi)不得不面對(duì)的常態(tài)。
這就決定了后端產(chǎn)品思維更要接近技術(shù),繞不開百萬級(jí)數(shù)據(jù)、業(yè)務(wù)邏輯、數(shù)據(jù)規(guī)則。在工作中無法像前端產(chǎn)品那樣做甩手掌柜:反正我要的告訴你了,怎么實(shí)現(xiàn)我不管。而事實(shí)上往往還要產(chǎn)品給開發(fā)一兩個(gè)建議方案,并告訴他要避免哪些坑,盡管這些都是前任的鍋。
一、數(shù)據(jù)庫
1. 理解數(shù)據(jù)庫
1、前端看到的內(nèi)容,如果不是代碼寫死的,那么就是從數(shù)據(jù)庫讀取的(本地緩存的數(shù)據(jù)也算)。
2、早期比較流行的數(shù)據(jù)庫模型有三種:層次式數(shù)據(jù)庫、網(wǎng)絡(luò)式數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫?,F(xiàn)今最常用的即關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。
3、關(guān)系型數(shù)據(jù)庫:MYsql為典范,以二位報(bào)表的形式展示,因此MYSQL和PHP的組合是比較完美(報(bào)表多)。
4、比MYsql強(qiáng)大的關(guān)系型數(shù)據(jù)庫還有ORACLE。比如1000W條數(shù)據(jù)以上級(jí)別的數(shù)據(jù),一般用的比較多的是ORACLE。
5、MYsql每張表只能有一個(gè)主鍵。但開發(fā)會(huì)創(chuàng)建多個(gè)字段的索引。目的是為了提高查詢速度。至少提升上百倍查詢速度。
6、非關(guān)系型數(shù)據(jù)庫(NoSQL):
NoSQL是作為傳統(tǒng)關(guān)系型數(shù)據(jù)庫的一個(gè)有效補(bǔ)充,處理對(duì)存儲(chǔ)要求高,且并發(fā)處理較高的場(chǎng)合。
主要是數(shù)據(jù)庫Mongodb。數(shù)據(jù)是散漫的,以鍵值對(duì)的形式存儲(chǔ)。
7、分布式賬本數(shù)據(jù)庫:區(qū)塊連的數(shù)據(jù)存儲(chǔ)方式。也有叫時(shí)間軸數(shù)據(jù)庫的。略知即可。
8、圖片的存儲(chǔ)比較特別:
一種是:直接把圖片轉(zhuǎn)換成二進(jìn)制文件存儲(chǔ)在數(shù)據(jù)庫中。適合存儲(chǔ)量少且重要的圖片信息。
另一種是:存儲(chǔ)圖片的路徑到數(shù)據(jù)庫,用的時(shí)候直接調(diào)用路徑給image等圖像控件即可。適合存儲(chǔ)量大但不是太重要的圖片。
第二種方法常用,簡(jiǎn)單,實(shí)用。
2. 實(shí)戰(zhàn)注意
1、建表的時(shí)候一般會(huì)增加冗余字段,比如unique_code,用于存儲(chǔ)備用字段來去重。
2、建表的時(shí)候可以增加預(yù)留字段:當(dāng)數(shù)據(jù)量大的時(shí)候很難再加新字段,所以預(yù)估到數(shù)據(jù)增張較快的,一定要預(yù)留幾個(gè)字段空位。便于日后數(shù)據(jù)表擴(kuò)展。
3、當(dāng)一個(gè)表無法再加字段的時(shí)候可以增加擴(kuò)展表 ,后綴_ext ,與原表通過id關(guān)聯(lián)起來。
4、新增表字段:要考慮,到數(shù)據(jù)初始化比如歷史數(shù)據(jù)全部為空或刷為某一個(gè)值。
5、統(tǒng)一規(guī)范表名前綴,比如可以定義t_前綴標(biāo)示類型, f_? 前綴表示從其他系統(tǒng)獲取的。
二、SQL語句
1. 基本函數(shù)
1、產(chǎn)品經(jīng)理一般不去建表、改表,所以create table <表名> 、alter table <表名>、drop table <表名>知道就可以。
產(chǎn)品更多是查詢、統(tǒng)計(jì),或者寫出更新/插入/刪除語句讓開發(fā)執(zhí)行。
2、 select語句是使用最多的,配合函數(shù):
count():統(tǒng)計(jì)記錄數(shù)
avg():計(jì)算字段值的平均值
sum():計(jì)算字段值的總和
max():查詢字段的最大值
min():查詢字段的最大值
比如:select count(id) from p_product;
3、排序:order by 字段 desc/ASC
select * from finance_order order by update_time desc limit 3;
4、不包含某個(gè)字符
select * from table where ziduan not in(select ziduan from table where name = ‘C’)
5、包含某個(gè)字符
select * from table where 列名 like ‘a%’??利用模糊查詢
6、查詢表p_product中的第10、11、12、13行數(shù)據(jù)
select * from product limit 4 offset 9;
或?select * from product limit 9,4;
7、in 括號(hào)內(nèi)為或的關(guān)系
select name from product where ? goods in (‘103702505′,’103702805’) and (shelf_time >? ‘2014-09-15 16:53:21’ or title like ‘_tylish%’);
8、去重搜索:
SELECT distinct(goods) FROM
9、 GROUP BY 語句進(jìn)行組合。
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Custome
10、前10條記錄
select top 10 * form table1 where
11、連表查詢用join
Inner Join最常見,叫做內(nèi)聯(lián)接,可以縮寫成Join,找的是兩張表共同擁有的字段。
Left Join叫做左聯(lián)接,以左表(join符號(hào)前的那張表)為主,返回所有的行。如果右表有共同字段,則一并返回,如果沒有,則為空。
A Full Join B = A Left Join B + A Right Join B – A Inner Join B
還有其他連表方式既然用網(wǎng)絡(luò)的圖片:
12、查表 f_oms中字段order_number值相同的且數(shù)據(jù)量大于1個(gè)的
select order_number,count(*) from f_oms group by order_number having count(*)>1
13、從 “Persons” 表中選取居住的城市不以?“A” 或 “L” 或 “N” 開頭的人:
我們可以使用下面的 SELECT 語句:
SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%’
2. 技巧
1、and優(yōu)先級(jí)高于or,一般這種混合的句子建議用()使關(guān)系清晰。
比如A>0 OR B<0 and c=0,相當(dāng)于A>0 OR( B<0 and c=0)
2、點(diǎn)擊‘美化SQL’按鈕,可以將語句斷層使層次清晰。比如where goods_sn in(‘A’,’B’,’C),美化后會(huì)變成:
where ? goods_sn in ( 'A', 'B', 'C )
就可以用截取工具截取ABC,還原到excel表格的樣式。
3、為防止數(shù)據(jù)導(dǎo)出因位數(shù)過長(zhǎng)而使字符串變?yōu)榭茖W(xué)計(jì)數(shù)法,導(dǎo)出的文件格式選擇XLS格式的文檔。
4、數(shù)據(jù)備份。
?選中數(shù)據(jù),右鍵點(diǎn)擊復(fù)制為insert/update,可以直接將篩選的字段備份為更新或插入語句,一旦需要還原的時(shí)候可以直接執(zhí)行這幾個(gè)語句。
5、提升查詢速度,SQL語句快于MYSQL自帶的篩選選項(xiàng),并且自帶的只顯示前一千條。所以優(yōu)先使用語句查詢。
6、多個(gè)獨(dú)立的查詢語句之間可以用;隔開,同時(shí)執(zhí)行,會(huì)分別輸出。
7、導(dǎo)出的表頭換成漢字注釋的方式:
SELECT a.ds_sn as ‘編碼’,a.pdt_name as ‘名稱’ FROM p_pro
8、is和=有時(shí)是不同的,比如寫作is null ,而不寫=null
比<>!=規(guī)范。有時(shí)候不兼容。
本文由 @環(huán)滁皆山也 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于 CC0 協(xié)議
愛盈利-運(yùn)營(yíng)小咖秀(www.jza6.com) 始終堅(jiān)持研究分享移動(dòng)互聯(lián)網(wǎng)App運(yùn)營(yíng)推廣經(jīng)驗(yàn)、策略、全案、渠道等純干貨知識(shí)內(nèi)容;是廣大App運(yùn)營(yíng)從業(yè)者的知識(shí)啟蒙、成長(zhǎng)指導(dǎo)、進(jìn)階學(xué)習(xí)的集聚平臺(tái);
想了解更多移動(dòng)互聯(lián)網(wǎng)干貨知識(shí),請(qǐng)關(guān)注微信公眾號(hào)運(yùn)營(yíng)小咖秀(ID: yunyingshow)