本篇文章和大家了解一下MySQL建表需要注意什么。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)大家有所幫助。
從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù)體系,各種行業(yè)企業(yè)客戶(hù)提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。創(chuàng)新互聯(lián)將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。
一、mysql各個(gè)名稱(chēng)
庫(kù)名、表名、字段名全部使用小寫(xiě)字母,用'_'下劃線分割,且名字長(zhǎng)度不超過(guò)12,做到見(jiàn)名知意。
二、使用Inoodb存儲(chǔ)引擎
1. 是否要支持事務(wù),如果要請(qǐng)選擇innodb,如果不需要可以考慮MyISAM;
2. 如果表中絕大多數(shù)都只是讀查詢(xún),可以考慮MyISAM,如果既有讀寫(xiě)也挺頻繁,請(qǐng)使用InnoDB。
3. 系統(tǒng)奔潰后,MyISAM恢復(fù)起來(lái)更困難,能否接受;
4. MySQL5.5版本開(kāi)始Innodb已經(jīng)成為Mysql的默認(rèn)引擎(之前是MyISAM),說(shuō)明其優(yōu)勢(shì)是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會(huì)差。
三、字段類(lèi)型選擇
1. 建議所有的表都有一個(gè)自增id,這個(gè)id可以經(jīng)常作為主鍵。
2. 存儲(chǔ)非負(fù)數(shù)用unsigned。因?yàn)橥瑯拥淖止?jié)數(shù),存儲(chǔ)的數(shù)值范圍更大,如tinyint,有符號(hào)為 -128-127,無(wú)符號(hào)為 0-255。
3. 整形定義中不加長(zhǎng)度,直接用int,而不是int(n)。其實(shí)這里的n不是存儲(chǔ)長(zhǎng)度的意思,比如int(3)默認(rèn)顯示3位,空格補(bǔ)齊,超出時(shí)正常顯示。
4. 存儲(chǔ)取值范圍在0-80的數(shù)值時(shí),用tinyint unsigned。
5. 明白varchar(n)中的n指的是字符數(shù)而不是字節(jié)數(shù)。
6. 字符集選擇utf8
7. timestamp和datetime都是精確到秒,優(yōu)先選擇timestamp,因?yàn)閠imestamp只有4個(gè)字節(jié),而datetime8個(gè)字節(jié)。同時(shí)timestamp具有自動(dòng)賦值以及自動(dòng)更新的特性。
8. 如果可能,所有字段最好都用not null。因?yàn)椋簄ull字段被索引,需要額外的1字節(jié);使索引,索引統(tǒng)計(jì),值的比較變得更復(fù)雜。所以如果是索引字段,一定要定義為not null,null值可用0,''代替。
四、建立索引需要注意
1. 索引名稱(chēng)必須使用小寫(xiě)
2. 普通索引按照“idx_字段名稱(chēng)”進(jìn)行命名,唯一索引按照“uniq_字段名稱(chēng)”進(jìn)行命名
3. 索引中的字段數(shù)建議不超過(guò)5個(gè)。單張表的索引數(shù)量控制在5個(gè)以?xún)?nèi)。InnoDB使用b+tree來(lái)存儲(chǔ),因此在update、delete、insert的時(shí)候需要對(duì)b+tree進(jìn)行調(diào)整,過(guò)多的索引會(huì)減慢更新的速度。
4. 唯一索引不和主鍵重復(fù)。
5. 經(jīng)常作為where條件的字段要添加索引。order by,group by的字段建議添加索引。
6. 使用explain判斷sql語(yǔ)句是否合理使用索引,盡量避免extra列出現(xiàn):Using File Sort,UsingTemporary。
7. 合理創(chuàng)建聯(lián)合索引避免冗余,(a,b,c)相當(dāng)于(a)(a,b)(a,b,c),mysql有最左匹配原則。合理利用覆蓋索引。
五、sql語(yǔ)句
1. 使用prepared statement,可以提供性能并且避免SQL注入。
2. select語(yǔ)句只獲取需要的字段,不使用select *這種寫(xiě)法。
3. where條件中的非等值條件(in、between、<、<=、>、>=)會(huì)導(dǎo)致后面的條件使用不了索引。
4. 避免在sql語(yǔ)句進(jìn)行數(shù)學(xué)運(yùn)算或者函數(shù)運(yùn)算,容易將業(yè)務(wù)邏輯和db耦合在一起。
5. 避免使用存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù)等,容易將業(yè)務(wù)邏輯和db耦合在一起,并且MySQL的存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù)中存在一定的bug。
6. 使用合理的sql語(yǔ)句減少與數(shù)據(jù)庫(kù)的交互次數(shù)。
7. 統(tǒng)計(jì)表中記錄數(shù)時(shí)使用count(),而不是count(primary_key)和count(1)。
以上就是mysql建表需要注意什么的簡(jiǎn)略介紹,當(dāng)然詳細(xì)使用上面的不同還得要大家自己使用過(guò)才領(lǐng)會(huì)。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道哦!
網(wǎng)站欄目:mysql建表需要注意什么
分享網(wǎng)址:http://jinyejixie.com/article18/ijcgdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)頁(yè)設(shè)計(jì)公司、服務(wù)器托管、商城網(wǎng)站、網(wǎng)站策劃、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)