《PHP和MySQL Web 開發(fā)》 第9章 創(chuàng)建Web數(shù)據(jù)庫
時(shí)間:2023-07-10 04:36:01 | 來源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-07-10 04:36:01 來源:網(wǎng)站運(yùn)營(yíng)
《PHP和MySQL Web 開發(fā)》 第9章 創(chuàng)建Web數(shù)據(jù)庫:
封面人物
劉承羽
前言
這是我學(xué)習(xí)《PHP和MySQL Web 開發(fā)》的讀書筆記,一些重要的知識(shí)點(diǎn)我會(huì)記錄下來,當(dāng)然只會(huì)寫我覺得重要的。- 如果有幸有人看到這個(gè)學(xué)習(xí)筆記了,你要結(jié)合著書看,不要光看這個(gè)筆記。
- 在筆記里我會(huì)記錄一些我學(xué)習(xí)中遇到的問題和解決辦法與注意事項(xiàng)。
- 為了方便管理和查找,文章或者說筆記的目錄我就按照書里的排了,方便對(duì)比著看。
- 不是教學(xué)!重要的事說一遍!我是PHP和MySQL 的初學(xué)者,我本身是個(gè)前端,為了面向工資編程,拓寬知識(shí)面才學(xué)的。
- 其實(shí)還是有一些私心得,因?yàn)槎颊f教學(xué)相長(zhǎng) 和 小黃鴨調(diào)試法,我這個(gè)是小老虎學(xué)習(xí)法,對(duì)著小老虎講知識(shí)點(diǎn),保證自己學(xué)的扎實(shí),能掙錢。
- 歡迎探討和指教,須知一山更比一山高,但是拒絕杠精!
本章主要是介紹了:
- 創(chuàng)建一個(gè)數(shù)據(jù)庫
- 設(shè)置用戶權(quán)限
- 權(quán)限系統(tǒng)介紹
- 創(chuàng)建數(shù)據(jù)庫表
- 創(chuàng)建索引
- 選擇MySQL中的列類型
開篇說了介紹了數(shù)據(jù)庫安裝的一部分,你可能會(huì)遇到很多錯(cuò)誤,網(wǎng)上太多的安裝教程了,我就不貼了,如果你整不明白這一塊呢。
我有倆辦法,一個(gè)呢,是安裝個(gè) xammp集合,php,mysql都有,傻瓜式的,還是中文的,你看看教程應(yīng)該能搞懂。
另一個(gè)呢,是,自己按照書里研究去,安上在接著看。
到這里我默認(rèn)你是安裝完畢了啊~
剛說了,你可能會(huì)遇到各種問題,報(bào)錯(cuò)啥的。很正常,編程也就這點(diǎn)難度了,再難得沒有了,你要克服!要堅(jiān)持!想想你喜歡的姑娘,想想你微薄的收入!
好,下面我們來看這一題。
有個(gè)錯(cuò)誤是你在啟用命令行時(shí)(微軟鍵+R 鍵 ,彈出運(yùn)行框,輸入CMD你就能看見這個(gè)黑框了),輸入MySQL 命令它會(huì)提示錯(cuò)誤:'mysql' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。
當(dāng)然,這句錯(cuò)誤是英文,你自己復(fù)制出錯(cuò)誤到在線翻譯中翻譯成中文,和我這個(gè)錯(cuò)誤對(duì)一下。(這里說一下,英語不好沒關(guān)系,你得學(xué)知道不,不認(rèn)識(shí)的你就復(fù)制出來翻譯成中文,多復(fù)制幾遍,錯(cuò)誤見多了,那幾個(gè)單詞你也就認(rèn)識(shí)了,大致一看也就能明白是大概是哪的問題了,不要一看一大段的英文就懵逼,就煩躁,就不想看,你復(fù)制出來,翻譯唄,就當(dāng)學(xué)英語了,是不是?)
解決辦法如下:
1.打開我的電腦(我的是win10系統(tǒng)),右鍵屬性,點(diǎn)擊左側(cè)“高級(jí)系統(tǒng)設(shè)置”。
2.點(diǎn)擊“高級(jí)”標(biāo)簽,“環(huán)境變量”。
3.從李重樓(此處是電腦的用戶名,我的用戶名就叫李重樓,你找你的) 的用戶變量中單擊 PATH 。
4.點(diǎn) 瀏覽,選擇 mysql安裝目錄中的bin 文件,然后確定保存。重啟命令行工具輸入mysql ,顯示welcome。
9.1使用MySQL監(jiān)視程序
倆重點(diǎn):
1.SQL語句不區(qū)分大小寫,但數(shù)據(jù)庫和表名是區(qū)分大小寫。
我個(gè)人是用小寫的,因?yàn)椴恢罏樯?,大寫的單詞我就不認(rèn)識(shí)了,233333。
2.每個(gè)命令都用分號(hào)(;)分開。
9.2登錄到MySQL
mysql -h hostname -u username -p
-h(huán) 命令選項(xiàng)用于指定所希望連接的主機(jī),即運(yùn)行mySQL服務(wù)器的機(jī)器。
如果正在該MySQL服務(wù)器所運(yùn)行的機(jī)器上運(yùn)行該命令,可以忽略該選項(xiàng)和hostname參數(shù)。
如果不是,必須用運(yùn)行mySQL服務(wù)器的主機(jī)名稱來代替主機(jī)名稱參數(shù)。
你如果你使用的MySQL在你電腦上,(你先粗淺的這么理解著)你可以省略 -h 命令變成如下命令也可以,一樣能登錄上的,因?yàn)槟J(rèn)就是訪問你本地的MySQL服務(wù)器了。
mysql -u username -p
-u 命令用于指定鏈接數(shù)據(jù)庫時(shí)使用的用戶名。
-p 命令告訴服務(wù)器要使用一個(gè)密碼來鏈接它。
這里有個(gè)注意事項(xiàng):-p 后面不加分號(hào)?。。≈苯踊剀囕斎朊艽a就行!加分號(hào)提示 ERROR 1045 (28000): Access denied for user 'username '@'hostname ' (using password: YES) 的錯(cuò)誤?。。。e問咋知道,我還按照這個(gè)錯(cuò)誤去解決呢!根本不是錯(cuò)誤的事,是命令打錯(cuò)了!!打錯(cuò)了?。?!不加分號(hào)?。?!
再說一下,一般情況下,你是第一次安裝,用戶和密碼可能都是 root。
正常登陸了之后,你會(huì)看見下方這個(gè)提示,證明你鏈接成功了,此時(shí)請(qǐng)輸入 ( quit;)然后回車。
Welcome to the MySQL monitor. Commands end with ; or /g.Your MySQL connection id is 98267Server version: 5.6.25 MySQL Community Server (GPL)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '/h' for help. Type '/c' to clear the current input statement.
你會(huì)發(fā)現(xiàn)你退出了...
我是為了讓你熟悉一下,再敲一遍命令行登陸MySQL。
我當(dāng)時(shí)學(xué)的時(shí)候,我是敲了大概十來遍,只多不少的,不帶騙你的。
我都有肌肉記憶了。
這樣能保證你睡一覺起來,還能想起來這個(gè)命令,當(dāng)然以后敲多了自然就不會(huì)忘了。
9.3創(chuàng)建數(shù)據(jù)庫和用戶
create database dbname;
書中的 mysql> 表示是運(yùn)行在MYSQL監(jiān)視程序下的命令,也就是你已經(jīng)登陸了。
create(創(chuàng)建) database (數(shù)據(jù)庫) 創(chuàng)建數(shù)據(jù)庫 dbname ,其中 dbname 是你希望創(chuàng)建數(shù)據(jù)庫的名稱。
這里說一下:創(chuàng)建的是數(shù)據(jù)庫!庫 就是能包含 表 的庫!!?。∥医佑|這里的時(shí)候產(chǎn)生了疑惑,就是我鏈接了數(shù)據(jù)庫,我已然是在數(shù)據(jù)庫里了,為啥還要?jiǎng)?chuàng)建數(shù)據(jù)庫,我直接創(chuàng)建表不就行了嗎?
通俗的解釋一下,MySQL就是一塊地,你登錄鏈接MySQL,就是把地買了,而剛才這步創(chuàng)建數(shù)據(jù)庫,就是在MySQL這塊地上蓋數(shù)據(jù)庫,你可以在這塊地上蓋N多個(gè)數(shù)據(jù)庫。
9.3設(shè)置用戶與權(quán)限
一個(gè)MySQL系統(tǒng)可能有多個(gè)用戶。為了安全起見,root 用戶通常只用作管理目的。對(duì)于每個(gè)需要使用該系統(tǒng)的用戶,應(yīng)該為他們創(chuàng)建一個(gè)賬號(hào)和密碼。
一個(gè)MySQL系統(tǒng)可能有多個(gè)用戶。
還說回來你買了MySQL這塊地的事,你是一個(gè)公司老板,買了MySQL這一畝三分地,蓋倉庫,蔬菜大棚啥的。
你肯定不能自己去看倉庫,搬貨吧?
所以進(jìn)出倉庫的就有了門房趙大爺和搬運(yùn)工小劉。
算上你,這個(gè)倉庫一共三個(gè)可以進(jìn)出的人,也就是用戶,所以一個(gè)MySQL系統(tǒng)可能有多個(gè)用戶。(只不過目前看來,這三個(gè)人都是你扮演的,你緩一會(huì)兒,理解一下。)
root 用戶通常只用作管理目的。
你這個(gè)公司,買了地,蓋了倉庫,牛逼的不行,公司老板是你,你有權(quán)安排趙大爺和小劉的工作,讓他們干啥和不許干啥,你都給規(guī)定的明白兒的。
你,就是 root 用戶。
做管理滴,牛皮不?
具體的活都是趙大爺和小劉的!
對(duì)于每個(gè)需要使用該系統(tǒng)的用戶,應(yīng)該為他們創(chuàng)建一個(gè)賬號(hào)和密碼。
你公司蓋這個(gè)倉庫吧,引進(jìn)了高科技,指紋識(shí)別!你得給小劉和趙大爺錄個(gè)信息啊。
小劉的指紋能刷開倉庫門,以便進(jìn)出搬卸貨物。
趙大爺指紋能刷開大門和攔車桿讓送貨拉貨的車進(jìn)來,不能給小劉這個(gè)權(quán)限,是因?yàn)榕滦⒆约洪_了倉庫門,拉上貨物,開了大門,把貨偷跑了。
當(dāng)然趙大爺也打不開倉庫的門。
而你的指紋能全干!
這個(gè)小例子介紹了為啥要單獨(dú)創(chuàng)建賬號(hào)和什么是權(quán)限。
9.5MySQL權(quán)限系統(tǒng)介紹
權(quán)限是對(duì)特定對(duì)象執(zhí)行特定操作的權(quán)力,它與特定用戶相關(guān)。
想想你的門房趙大爺。
9.5.1最少權(quán)限原則
一個(gè)用戶(或者進(jìn)程)應(yīng)該擁有能夠執(zhí)行分配給他的任務(wù)的最低級(jí)別的權(quán)限。
再想想搬運(yùn)工小劉。
9.5.2創(chuàng)建用戶:GRANT命令
grant 和 revoke 命令分別用來授予和取消 MySQL用戶的權(quán)限。
這里呢,說一下這一節(jié),這一節(jié)內(nèi)容挺多的,足足一頁多的書上內(nèi)容,不要煩躁好好的看,這個(gè)很重要的!在你看書的時(shí)候,我講講其他的非知識(shí)點(diǎn),開心一下。
grant 授予、準(zhǔn)許 的意思,讀快了就是“干它!”,開玩笑的,讀 [grɑ:nt] 。
revoke 廢除、撤銷、取消 的意思,讀 [r??v??k]] 。
方括號(hào)里的是音標(biāo),我百度翻譯來的。
為啥此處單獨(dú)標(biāo)了他倆的讀音?
因?yàn)檫@倆單詞我在以前開發(fā)中沒接觸過,在MySQL中,第一次,哎呀呀臉紅的不行。
這些命令啦,方法啦,這啦,那啦,反正就是書中出現(xiàn)的關(guān)鍵的英文,你最好都要看到了知道他中文意思,和會(huì)讀。
因?yàn)椋趺凑f呢,程序員英語發(fā)音,都很迷~有的時(shí)候聊技術(shù)方案,對(duì)方說個(gè)詞,說是能干啥干啥,或者你問他某某怎么弄???他就回你一個(gè)發(fā)音賊迷的單詞,你根本聽不懂!但是大家一把這個(gè)詞打出來,都一臉的哦~恍然大悟。
別覺得不可能,你想,你是自學(xué)的MySQL,也沒人教過你這些單詞都咋讀,都是憑感覺去蒙著讀,而且你還都學(xué)會(huì)了還賊6,去了大公司當(dāng)老大,有一天你告訴你的小弟:“大數(shù)據(jù)分析部的夏禾需要使用數(shù)據(jù)庫,賬號(hào)密碼按照工號(hào)初始化,你 干她 一下!”。你的小老弟兒一臉通紅的告訴你:老哥你是不是傻B!那讀[grɑ:nt]!你心里話說出聲的毛病該改改了!
知識(shí)點(diǎn)來了!grant命令的常見形式如下:
GRANT
privileges [columns]
ON
itemTO
uesr_name [IDENTIFIED by '
password '] ;
和書上不太一樣,因?yàn)槲彝祽辛?,這都是我手敲的?。∏玫奈沂侄际茄?!
下面我用我沾滿鮮血的雙手來給你解釋一下:(其實(shí)你好好看書的話,這節(jié)你都可以跳過的。)
上面形式中,紅色的都是可選的,既然是可選就是非必填的,這個(gè)你懂,稍后再說。
privileges 特權(quán)的意思。話說看到這個(gè)綠色有沒有讓你想起,你某個(gè)醉酒的,痛哭流涕的夜?
這是一個(gè)占位符,此處應(yīng)該被替換為一組由逗號(hào)分隔開的權(quán)限,如:select,insert,update,delete,index,alter,create,drop;這個(gè)下一節(jié)會(huì)詳細(xì)說的。
item 占位符是新權(quán)限所應(yīng)用于的數(shù)據(jù)庫或表。
注意:書中說可以將項(xiàng)目指定為 *.*,而將權(quán)限賦予所有數(shù)據(jù)庫,叫做全局權(quán)限!
這個(gè) *.* 是 “星號(hào) 點(diǎn) 星號(hào)”,不是給你特意標(biāo)出點(diǎn)來!我就敲錯(cuò)了!
更常見的是以 dbname.* 的形式指定數(shù)據(jù)庫中所有的表。
以 dbname.tablename 的形式指定單個(gè)表。
[columns] 是可選的,可以用它對(duì)每一個(gè)列指定權(quán)限。
可以看出,可以用的權(quán)限包含了:數(shù)據(jù)庫,表,列。
uesr_name 是用戶登錄MySQL的用戶名,它還可以包含一個(gè)主機(jī)名,用來區(qū)分用戶。(先忽略create user 這塊。)
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
host:指定該用戶在哪個(gè)主機(jī)上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠(yuǎn)程主機(jī)登陸,可以使用通配符 %
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';CREATE USER 'pig'@'%' IDENTIFIED BY '123456';CREATE USER 'pig'@'%' IDENTIFIED BY '';CREATE USER 'pig'@'%';
這些例子中,都包含了帶有主機(jī)名的用戶名。
[IDENTIFIED by '
password '] 是可選的,但是呢,我推薦密碼是要求必須的,出于安全考慮。
這一節(jié)其他的部分,我就不說了,自己看吧。我是搞懂了,我還分別查看了mysql.host,mysql.db.mysql.user等等,這里靠你了。
最后,獻(xiàn)上一個(gè)中文的授權(quán)格式:
grant 權(quán)限 on 數(shù)據(jù)庫 .* to 用戶名@登錄主機(jī) identified by “密碼”;小思考:用你理解的語言,復(fù)述一遍授權(quán)格式。
9.6創(chuàng)建一個(gè)WEB用戶
是不是好奇953,954和955哪去了?我沒寫,主要內(nèi)容都是陳述,操作的,我就沒有寫。我可以不寫,因我學(xué)會(huì)了,你不能不敲不看啊,也是好好好看書學(xué)習(xí)的。
9.6內(nèi)容開始。
這一節(jié)到了真正開始要敲命令的時(shí)候了,而我呢,為了學(xué)習(xí),為了體驗(yàn)錯(cuò)誤,我把之前按照書中授予的權(quán)限全部刪除了重新做人啦~
有個(gè)小注意,我輸入的命令是第二段的命令,就是特權(quán)挺多的那個(gè)。
grant select,insert,update,delete,index,alter,create,dropon books.*to bookorama identified by 'bookorama123';
如果你沒有敲錯(cuò)的話,你會(huì)看見 Query OK, 0 rows affected (0.00 sec) 這句話的。
而此時(shí),數(shù)據(jù)庫mysql.db 和mysql.user 中都會(huì)有 bookorama這個(gè)User了。
如果出現(xiàn)錯(cuò)誤呢,就看看錯(cuò)誤在哪一行,看看是不是哪個(gè)單詞敲錯(cuò)了,或者沒加分號(hào)?
大部分錯(cuò)誤都是單詞敲錯(cuò)了,因?yàn)槲医?jīng)常犯這個(gè)毛病。實(shí)在不行的話,把我這段復(fù)制進(jìn)命令行回車。
然后請(qǐng)輸入 quit;(這個(gè)是不是很眼熟?)退出登錄狀態(tài)。
然后以bookorama 的身份登錄MySQL。密碼是 'bookorama123';
如果一切順利的話,你就以新身份(門房趙大爺?)登錄數(shù)據(jù)庫了~
9.7使用正確的數(shù)據(jù)庫
我承認(rèn)我從來沒看過附錄A,咋地吧。所以我沒有寫附錄A的有關(guān)筆記,而且短時(shí)間也不打算寫...
到這一節(jié)的時(shí)候,檢驗(yàn)?zāi)憧磿屑?xì)不仔細(xì)的時(shí)候到了,其實(shí)在9.6的時(shí)候你在 on books.* 的時(shí)候可能就遇到問題。
你沒建立名為 books的數(shù)據(jù)庫,而這一塊在哪寫了呢?在9.3節(jié)創(chuàng)建數(shù)據(jù)庫和用戶中有一句“我們要?jiǎng)?chuàng)建一個(gè)名為books的數(shù)據(jù)庫 ”。
如果你沒建立,那么開動(dòng)你的小腦瓜,怎么才能建立呢?
好,到這里已經(jīng)是完成全部準(zhǔn)備工作了,現(xiàn)在說使用數(shù)據(jù)庫的事。
use dbname;
沒了,就這一句,書里還有一種方法,在登錄的時(shí)候就指定要使用的數(shù)據(jù)庫,你也可以試一下。
注意:在登錄時(shí)就指定數(shù)據(jù)庫,不能省略 hostname。我試了一下會(huì)報(bào)錯(cuò)的。
成功了的話,會(huì)顯示 Database changed 提示的。
而此時(shí)你輸入如下命令。會(huì)顯示你已有的數(shù)據(jù)庫列表。databases 要加S?。。。?br>
show databases;+--------------------+| Database |+--------------------+| books |+--------------------+
9.8創(chuàng)建數(shù)據(jù)庫表
create table tablename;
創(chuàng)建表的常見形式(命令)就是這樣的,翻譯成中文就是 創(chuàng)建表 表名。呃,好像翻譯不翻譯沒啥大區(qū)別。
create table tablename (columns);
這段代碼是和書中一模一樣的,其中 columns 就是你在創(chuàng)建數(shù)據(jù)庫時(shí)同時(shí)創(chuàng)建的列,看例子是怎么用的。
(創(chuàng)建數(shù)據(jù)庫大致分兩種,一是先創(chuàng)建數(shù)據(jù)庫,然后向數(shù)據(jù)庫內(nèi)插入列,另一種就是創(chuàng)建數(shù)據(jù)庫時(shí)同時(shí)指定數(shù)據(jù)庫的列,這個(gè)看個(gè)人喜好吧)
書中給了bookorama.sql 的程序清單,我推薦你手動(dòng)輸入敲一遍。
熟悉下碼感。我學(xué)到這的時(shí)候真的敲的錯(cuò)誤百出~所以你也敲敲看,我最近才頓悟,作為一個(gè)程序員,要擁抱錯(cuò)誤,漠視警告。
(敲的時(shí)候仔細(xì)看,首先看表的模式,看著表模式,能夠知道哪個(gè)是主鍵,外鍵,列名字段嗎?是不是都忘了?忘了回去翻書,再看一遍。然后對(duì)應(yīng)的著代碼敲,敲的時(shí)候你會(huì)發(fā)現(xiàn)有好多不認(rèn)識(shí)的,沒關(guān)系,你就按照書中代碼敲,別懷疑,一直敲,敲完后面會(huì)講你不認(rèn)識(shí)的都是啥的。
我決定了,以后啰嗦的話用綠色標(biāo)出來,重點(diǎn)才用紅色。話說,看到這個(gè)顏色,你有沒有想起你的前女友?)
如果你成功創(chuàng)建了一個(gè)數(shù)據(jù)表,你可以輸入如下命令,查看數(shù)據(jù)表,注意:tables 要加S?。。?!
show tables;
輸出的數(shù)據(jù)表是這樣的:
+-----------------+| Tables_in_books |+-----------------+| customers |+-----------------+
這個(gè)是第一個(gè)數(shù)據(jù)表,customers 顧客表, 注意表頭,寫的是 Tables_in_books 意思是 在books 數(shù)據(jù)庫中的表,不是書在桌子上!
9.8.1理解其他關(guān)鍵字的意思
其實(shí)你在敲命令,創(chuàng)建數(shù)據(jù)表的時(shí)候,應(yīng)該看完這一節(jié)的才對(duì),包括下一節(jié)。沒看也沒關(guān)系,現(xiàn)在看,然后結(jié)合著前面理解。
NOT NULL 的意思是表中所有行的此屬性必須有一個(gè)值。
這里是從行(記錄)角度說的,其實(shí)從列角度說就是此列對(duì)應(yīng)的輸入不得為 NULL,結(jié)合后面一句看“如果沒指定,該列可以為空(NULL)”。
有點(diǎn)懵逼?沒關(guān)系,我給你解釋。
先理解一個(gè)概念,空值,它也是值。只不過該值為空。(var a=''; var b=null; a!=b//true; js代碼,看明白沒?)
NOT NULL 的意思是表中所有行的此屬性必須有一個(gè)值,這個(gè)值可以是你主動(dòng)輸入的123,什么的,也可以是空。
但不能是NULL,因?yàn)镹ULL這個(gè)值,是沒有主動(dòng)指定NOT NULL時(shí)填充進(jìn)去的。
媽蛋,我寫完了,也搜到解釋了,如果我上述表述不清晰,可查看:MySQL null與not null和null與空值''的區(qū)別 。
AUTO_INCREMENT 書中已經(jīng)說的很明白了,我介紹一下課外知識(shí)吧。
increment 讀作 [??nkr?m?nt, ???-] 增量 的意思,auto_increment 是自動(dòng)增量的意思,也可叫自增量。
還有一條是:指定 AUTO_INCREMENT 的列必須是索引列。
(書中貌似對(duì)什么是索引沒有解釋,這是我搜索到的索引解釋:索引用于快速找出在某個(gè)列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個(gè)表,直到找出相關(guān)的行,表越大,查詢數(shù)據(jù)所花費(fèi)的時(shí)間就越多,如果表中查詢的列有一個(gè)索引,MySQL能夠快速到達(dá)一個(gè)位置去搜索數(shù)據(jù)文件,而不必查看所有數(shù)據(jù),那么將會(huì)節(jié)省很大一部分時(shí)間。
例如:有一張person表,其中有2W條記錄,記錄著2W個(gè)人的信息。有一個(gè)Phone的字段記錄每個(gè)人的電話號(hào)碼,現(xiàn)在想要查詢出電話號(hào)碼為xxxx的人的信息。
如果沒有索引,那么將從表中第一條記錄一條條往下遍歷,直到找到該條信息為止。
如果有了索引,那么會(huì)將該P(yáng)hone字段,通過一定的方法進(jìn)行存儲(chǔ),好讓查詢?cè)撟侄紊系男畔r(shí),能夠快速找到對(duì)應(yīng)的數(shù)據(jù),而不必在遍歷2W條數(shù)據(jù)了。其中MySQL中的索引的存儲(chǔ)類型有兩種:BTREE、HASH。 也就是用樹或者Hash值來存儲(chǔ)該字段,要知道其中詳細(xì)是如何查找的,就需要會(huì)算法的知識(shí)了。我們現(xiàn)在只需要知道索引的作用,功能是什么就行。全文請(qǐng)查看:MySQL中的索引詳講)
9.8.2理解列類型
(現(xiàn)在是2018年7月30日13:27 我收回之前吹牛B說七月底寫完筆記的的話,上手寫的時(shí)候我才發(fā)現(xiàn)自己的無知,之前很多覺得會(huì)了的,當(dāng)要寫筆記的時(shí)候,才發(fā)現(xiàn)模棱兩可,表述不清,所以一直在閱讀展開相關(guān)知識(shí)帶你,還有就是我懶...我爭(zhēng)取8月份寫完筆記。。。)
主要寫的是列數(shù)據(jù)類型,整節(jié)的數(shù)據(jù)類型如下:
- unsigned 無符號(hào)的
- char 字符串?dāng)?shù)據(jù)類型。是指使用指定固定長(zhǎng)度表示的字符串,比如char(8),則數(shù)據(jù)庫會(huì)使用固定的1個(gè)字節(jié)(八位)來存儲(chǔ)數(shù)據(jù),不足8位的字符串在其后補(bǔ)空字符。
- amount 浮點(diǎn)類型數(shù)據(jù)(float)類型。如果你之前沒有接觸過數(shù)據(jù)類型,你可以暫且記為包含小數(shù)點(diǎn)的數(shù)字類型。
- Date 日期數(shù)據(jù)類型。這個(gè)不解釋了。
- text 字符串?dāng)?shù)據(jù)類型。但是這個(gè)用于長(zhǎng)文本,如文章什么的。
9.8.3用show和describe來查看數(shù)據(jù)庫
這個(gè)之前說過了。再來一遍吧。
查看數(shù)據(jù)庫(databases 注意加S)
show databases;
使用數(shù)據(jù)庫 (目前可使用的是books,use books;)
use dbname;
查看數(shù)據(jù)表(記得加s)
show tables;
輸入完了你會(huì)看到如下數(shù)據(jù)表的,再次注意看表頭Tables_in_books ,顯示當(dāng)前的數(shù)據(jù)表是在哪個(gè)數(shù)據(jù)庫。
+-----------------+| Tables_in_books |+-----------------+| book_reviews || books || course || customers || order_items || orders |+-----------------+
查看某個(gè)特定表的詳細(xì)信息.(書中舉例說明的是books 表,是books數(shù)據(jù)庫中的books表,別搞混亂了啊。)
describe tablename;
我也顯示了一下:
+--------+------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------+------------+------+-----+---------+-------+| isbn | char(13) | NO | PRI | NULL | || author | char(50) | NO | | NULL | || title | char(100) | NO | | NULL | || price | float(4,2) | NO | | NULL | |+--------+------------+------+-----+---------+-------+
9.8.4創(chuàng)建索引
這里的內(nèi)容略過了,我就不寫我筆記了,因?yàn)槲覜]啥可記的。推薦查看我上文提到過的文章:MySQL中的索引詳講。你先了解原理就行,具體操作先不必上手,專心看書。
9.9理解MySQL的標(biāo)識(shí)符
略。
9.10選擇列數(shù)據(jù)類型
MySQL中3種基本的列數(shù)據(jù)類型:數(shù)字,日期和時(shí)間、字符串。
一般來說,選擇列數(shù)據(jù)類型的時(shí)候,基本原則是選擇可以滿足數(shù)據(jù)的最小類型。
9.10.1數(shù)字類型
數(shù)字類型分為整型和浮點(diǎn)型兩類。
我只能用我淺薄的小學(xué)數(shù)學(xué)水平,狹隘的解釋一下這兩類了。
整型:整數(shù),正整數(shù)負(fù)整數(shù)都是整型,不包含小數(shù)點(diǎn)的。
浮點(diǎn)型:就是小數(shù),是不是浮點(diǎn)型,就看有沒有小數(shù)點(diǎn)就行了。
然后看表9-5,9-6吧。
9.10.2日期和時(shí)間類型
唯一值得提的是TIMESTAMP類型。因?yàn)樗袃蓚€(gè)特性:
1.不手動(dòng)指定時(shí),TIMESTAMP列將被設(shè)置為最近修改該行的日期和時(shí)間。(設(shè)想一下這個(gè)特性能做什么?)。
2.它有多種的可顯示類型,參見表9-8。
9.10.3字符串類型
字符串類型分了三大類,其中第二類為text和blob類型。
BLOB全稱為大二進(jìn)制對(duì)象。它支持任何數(shù)據(jù),例如,圖像或聲音數(shù)據(jù)。
數(shù)據(jù)庫三大類型介紹完畢了,是不是覺得很多很繁瑣記不清?
其實(shí)很好記得,同一類型,比如說字符串類型,它很多的類型都是對(duì)當(dāng)前類型的描述,長(zhǎng)文本類型(langtext),中等文本類型(mediumtext),小文本類型(tinytext)。其實(shí)都是對(duì)一種類型,不同范圍的描述。如果你這么理解了,就容易記得多了,可參看MySQL 數(shù)據(jù)類型文檔。
(我其實(shí)根本就沒記,主要的類型我還記了的,隨用隨查,用的多了自然就記著了。)
結(jié)語:
回想第八章,我們學(xué)習(xí)了數(shù)據(jù)庫的基本知識(shí),學(xué)習(xí)了是么是表格,列,行(記錄),值,鍵(主鍵/外鍵)。
學(xué)習(xí)了關(guān)系數(shù)據(jù)庫的都是啥關(guān)系?一對(duì)一,一對(duì)多,多對(duì)多。
學(xué)習(xí)了數(shù)據(jù)庫的基本設(shè)計(jì)規(guī)范(三個(gè)不規(guī)則)。
什么是原子列?還擴(kuò)展的學(xué)習(xí)了第一二三范式。
web數(shù)據(jù)庫的架構(gòu)。
第九章的內(nèi)容是實(shí)踐偏結(jié)合,學(xué)習(xí)了如何登陸,創(chuàng)建數(shù)據(jù)庫,創(chuàng)建用戶,設(shè)置用戶權(quán)限。
學(xué)習(xí)了數(shù)據(jù)表的創(chuàng)建,查看,關(guān)鍵字都是什么意思。擴(kuò)展了學(xué)習(xí)了一下索引。列的三大數(shù)據(jù)類型。
說起來沒多少,如果你也是一步一步看過來,并且還保證自己學(xué)會(huì)理解,還是很多的。努力吧,我也在學(xué)習(xí)。在此之前,我對(duì)數(shù)據(jù)庫只有個(gè)簡(jiǎn)單的認(rèn)識(shí)與了解,學(xué)習(xí)完這兩章之后。對(duì)數(shù)據(jù)庫也是有個(gè)粗淺的了解了,共同學(xué)習(xí),共同進(jìn)步,為了愛我的人,和我愛的人,努力學(xué)習(xí)掙錢花。
關(guān)鍵詞:創(chuàng)建,數(shù)據(jù)