此篇是為數(shù)據(jù)庫(kù)小白入門(mén)而寫(xiě)的,介紹使用數(shù)據(jù)庫(kù)的最基本也是最常用的一些操作。我也是在日常工作中東一點(diǎn)西一點(diǎn)學(xué)到的,難免不成體系,理解也有偏頗,歡迎批評(píng)指正。
目錄:
一、創(chuàng)建數(shù)據(jù)庫(kù)
二、創(chuàng)建表
三、數(shù)據(jù)導(dǎo)入導(dǎo)出
四、單表查詢
五、多表查詢
六、查詢優(yōu)化
默認(rèn)使用NAVICAT FOR MYSQL,安裝教程見(jiàn)MYSQL軟件安裝及配置。
一、創(chuàng)建數(shù)據(jù)庫(kù)
右鍵單擊連接的MYSQL服務(wù)名稱(chēng),新建數(shù)據(jù)庫(kù),彈出以下界面,填寫(xiě)數(shù)據(jù)庫(kù)名(中英文都可以,建議英文),字符集選gbk,排序規(guī)則選gbk_chinese_ci,因?yàn)槲覀兲幚淼臄?shù)據(jù)大多是中文,這樣不會(huì)亂碼。

二、創(chuàng)建表
MYSQL導(dǎo)入數(shù)據(jù)前必須先創(chuàng)建好一個(gè)表格,告訴數(shù)據(jù)庫(kù)這個(gè)表有哪些字段名稱(chēng)、數(shù)據(jù)是什么類(lèi)型等,創(chuàng)建的表的樣式必須與要導(dǎo)入的數(shù)據(jù)樣式一樣。
1、菜單操作創(chuàng)建表
雙擊創(chuàng)建的數(shù)據(jù)庫(kù),點(diǎn)擊下面的【表】,點(diǎn)擊【新建表】,填寫(xiě)字段名稱(chēng)、數(shù)據(jù)類(lèi)型、長(zhǎng)度。


(1) 數(shù)據(jù)類(lèi)型及長(zhǎng)度填寫(xiě)說(shuō)明
字段為字符串的,選擇varchar,如身份證號(hào)碼、手機(jī)號(hào)碼、姓名等,varchar需給定一個(gè)長(zhǎng)度,這個(gè)根據(jù)字段信息大概估一個(gè)值,注意如果過(guò)小的話,可能有些數(shù)據(jù)會(huì)讀取不到;
字段為數(shù)字的,選擇int或者float,int為整數(shù),float為浮點(diǎn)數(shù)。
(2)增加一些限制條件
創(chuàng)建表的時(shí)候,有時(shí)會(huì)增加一些限制條件,如是否允許空值啊,是否添加主鍵啊。講一下主鍵吧,比較常用。
主鍵(primary key)是表中的一個(gè)或多個(gè)字段,它的值用于唯一地標(biāo)識(shí)表中的某一條記錄,相當(dāng)于一個(gè)ID,它對(duì)應(yīng)的值必須是唯一的而且是非空的。
?一般會(huì)選擇唯一且非空、有ID性質(zhì)的字段添加主鍵,如用戶號(hào)碼。在導(dǎo)入數(shù)據(jù)的時(shí)候增加這個(gè)限制,可以保證我們導(dǎo)入的數(shù)據(jù)是唯一的而且是非空的。如果導(dǎo)入的數(shù)據(jù)不是唯一的,則導(dǎo)入時(shí)會(huì)報(bào)錯(cuò)。
主鍵除了作為限制外,還有別的用途,主鍵可以作索引用,增加查詢速度。
2、使用SQL語(yǔ)句創(chuàng)建表
雙擊創(chuàng)建的數(shù)據(jù)庫(kù),點(diǎn)擊下面的【查詢】,點(diǎn)擊【新建查詢】,進(jìn)入查詢編輯器,對(duì)應(yīng)以上菜單操作,其SQL語(yǔ)句如下:
CREATE TABLE my_table (
`身份證號(hào)碼`? varchar(18) ?,
`姓名`? varchar(10) ?,
`年齡`? int ?,
`身高`? float ,
PRIMARY KEY (`身份證號(hào)碼`));
三、數(shù)據(jù)導(dǎo)入導(dǎo)出
1、數(shù)據(jù)導(dǎo)入
load data local infile 'F:/XX.txt' into table XXX
fields terminated by '|'
lines terminated by '\r\n';
注1:數(shù)據(jù)路徑不能含有中文,必須是英文;
注2:換行符有'\r\n'、'\r'、'\n'三種,不同系統(tǒng)的換行符不同,'\r\n'是Windows系統(tǒng)的換行符,'\n'是Linux系統(tǒng)的換行符,'\r'是Unix系統(tǒng)的換行符,一般先試'\r\n',如果發(fā)現(xiàn)只能導(dǎo)入一行數(shù)據(jù),一般是換行符不正確,則再試試其他兩個(gè)換行符。
2、數(shù)據(jù)導(dǎo)出
select ?xxx ?from table_name
into outfile "F:/xx.txt"
fields terminated by '|'
lines terminated by '\r\n';
四、單表查詢
1、簡(jiǎn)單數(shù)據(jù)查詢
(1)查詢所有字段
select * from table_name;
(2)查詢指定字段
select field1, field2, ..., fieldn ?from ?table_name;
(3)使用關(guān)鍵字DISTINCT避免重復(fù)數(shù)據(jù)查詢
select ?DISTINCT field1, field2, ..., fieldn? from? table_name;
2、條件數(shù)據(jù)查詢
使用關(guān)鍵字WHERE對(duì)查詢的記錄進(jìn)行過(guò)濾,查詢結(jié)果只輸出滿足條件的數(shù)據(jù)。
select field1, field2, ..., fieldn? from? table_name
where 條件;
3、排序數(shù)據(jù)記錄查詢
查詢到的數(shù)據(jù)記錄在默認(rèn)情況下是按照數(shù)據(jù)記錄最初添加到表中的順序顯示,我們可以使用關(guān)鍵字ORDER BY 來(lái)設(shè)置查詢結(jié)果的順序。
select field1, field2, ..., fieldn? from? table_name
order by fieldm1 ASC;
在上述語(yǔ)句中,查詢結(jié)果按照字段fieldm1升序排序,參數(shù)ASC為升序,也可換成DESC降序排序。
4、限制數(shù)據(jù)記錄查詢
使用關(guān)鍵字LIMIT可限制查詢結(jié)果數(shù)量:
select field1, field2, ..., fieldn? from? table_name
limit 初始位置, 行數(shù);
5、統(tǒng)計(jì)函數(shù)和分組數(shù)據(jù)記錄查詢
(1)常用的統(tǒng)計(jì)函數(shù)有count(),avg(),sum(),max(),min()
select count(*) ?from? table_name;
select avg(fieldm) from table_name;
(2)使用關(guān)鍵字GROUP BY進(jìn)行分組查詢
select filedm, count(fieldn) from table_name
group by fieldm;
6、舉個(gè)例子
表3月長(zhǎng)市漫號(hào)碼有字段主套餐 | 品牌 | 用戶號(hào)碼 3個(gè)字段,查詢神州行品牌用戶數(shù)前10的主套餐及其對(duì)應(yīng)的用戶數(shù),SQL語(yǔ)句如下:
select 主套餐,count(distinct 用戶號(hào)碼) from 3月長(zhǎng)市漫號(hào)碼
where 品牌='神州行'
group by 主套餐
order by count(用戶號(hào)碼) desc
limit 1,10;
五、多表查詢
多表查詢涉及多個(gè)表的連接,兩個(gè)表的連接可使用內(nèi)連接(inner join)、左外連接(left join)、右外連接(right join),按照跑數(shù)邏輯選取。
select ?....
from table_name a
left join another_table_name b
on a.id = b.id;
注1:上述語(yǔ)句中a和b分別是table_name和another_table_name的別名,因?yàn)楸淼拿忠话惚容^長(zhǎng),為了簡(jiǎn)化(偷懶),給它們各自取個(gè)簡(jiǎn)單的別名,可避免重復(fù)輸入長(zhǎng)長(zhǎng)的表名。
注2:on后面是連接條件a.id = b.id。
注3:如果兩個(gè)連接的表不在同一個(gè)數(shù)據(jù)庫(kù)下,則使用該表需加它的數(shù)據(jù)庫(kù)名作為前綴。比如表1在database1數(shù)據(jù)庫(kù)中,表2在database2數(shù)據(jù)庫(kù)中,查詢?cè)赿atabase1中進(jìn)行,則使用表2的方式如下:database2.表2。
六、查詢優(yōu)化
?多表查詢時(shí),當(dāng)數(shù)據(jù)量上千萬(wàn)級(jí)別,跑數(shù)通常長(zhǎng)達(dá)幾個(gè)小時(shí),這時(shí)對(duì)查詢語(yǔ)句進(jìn)行優(yōu)化顯得非常重要。最常用的查詢優(yōu)化方法就是加索引:索引類(lèi)似于書(shū)的目錄,主要是為了提高從表中檢索數(shù)據(jù)的速度。索引的創(chuàng)建有利有弊,創(chuàng)建索引可以提升查詢速度,但過(guò)多的索引則會(huì)占據(jù)許多磁盤(pán)空間。
1、 什么情況下適合創(chuàng)建索引呢?
(1)用于兩表連接的字段;
(2)經(jīng)常被查詢的字段,即在WHERE子句中出現(xiàn)的字段;
(3)在分組的字段,即在GROUP BY子句中出現(xiàn)的字段;
(4)設(shè)置唯一完整性約束的字段,主鍵就是這種。
2、怎樣創(chuàng)建索引呢?
(1)創(chuàng)建表時(shí)創(chuàng)建普通索引
create table 2月長(zhǎng)市漫號(hào)碼 (
用戶號(hào)碼 varchar(11),
品牌 varchar(50),
主套餐 varchar(50),
index index_用戶號(hào)碼(用戶號(hào)碼));
(2)在已經(jīng)存在的表上創(chuàng)建普通索引
create index index_name on table_name(字段名);