LCL WARNING
這是我學習《PHP和MySQL Web 開發》的讀書筆記,一些重要的知識點我會記錄下來,當然只會寫我覺得重要的。
如果有幸有人看到這個學習筆記了,你要結合着書看,不要光看這個筆記。
在筆記裏我會記錄一些我學習中遇到的問題和解決辦法與注意事項。
爲了方便管理和查找,文章或者說筆記的目錄我就按照書裏的排了,方便對比着看。
不是教學!重要的是說一遍!我是PHP和MySQL 的初學者,我本身是個前端,爲了面向工資編程,拓寬知識面才學的。
其實還是有一些私心得,因爲都說教學相長 和 小黃鴨調試法,我這個是小老虎學習法,對着小老虎講知識點,保證自己學的紮實,能掙錢。
歡迎探討和指教,須知一山更比一山高,但是拒絕槓精!
前情提要
《PHP和MySQL Web 開發》 第8章 設計Web數據庫 (8.1)
《PHP和MySQL Web 開發》 第8章 設計Web數據庫 (8.2)
《PHP和MySQL Web 開發》 第9章 創建Web數據庫 (9.1-9.7)
李重樓
9.8創建數據庫表
create table tablename;
創建表的常見形式(命令)就是這樣的,翻譯成中文就是 創建表 表名。呃,好像翻譯不翻譯沒啥大區別。
create table tablename (columns);
這段代碼是和書中一模一樣的,其中 columns 就是你在創建數據庫時同時創建的列,看例子是怎麼用的。
(創建數據庫大致分兩種,一是先創建數據庫,然後向數據庫內插入列,另一種就是創建數據庫時同時指定數據庫的列,這個看個人喜好吧)
書中給了bookorama.sql 的程序清單,我推薦你手動輸入敲一遍。
熟悉下碼感。我學到這的時候真的敲的錯誤百出~所以你也敲敲看,我最近才頓悟,作爲一個程序員,要擁抱錯誤,漠視警告。
(敲的時候仔細看,首先看錶的模式,看着表模式,能夠知道哪個是主鍵,外鍵,列名字段嗎?是不是都忘了?忘了回去翻書,再看一遍。然後對應的着代碼敲,敲的時候你會發現有好多不認識的,沒關係,你就按照書中代碼敲,別懷疑,一直敲,敲完後面會講你不認識的都是啥的。
我決定了,以後囉嗦的話用綠色標出來,重點才用紅色。話說,看到這個顏色,你有沒有想起你的前女友?)
如果你成功創建了一個數據表,你可以輸入如下命令,查看數據表,注意:tables 要加S!!!!
show tables;
輸出的數據表是這樣的:
+-----------------+
| Tables_in_books |
+-----------------+
| customers |
+-----------------+
這個是第一個數據表,customers 顧客表, 注意表頭,寫的是 Tables_in_books 意思是 在books 數據庫中的表,不是書在桌子上!
9.8.1理解其他關鍵字的意思
其實你在敲命令,創建數據表的時候,應該看完這一節的纔對,包括下一節。沒看也沒關係,現在看,然後結合着前面理解。
NOT NULL 的意思是表中所有行的此屬性必須有一個值。
這裏是從行(記錄)角度說的,其實從列角度說就是此列對應的輸入不得爲 NULL,結合後面一句看“如果沒指定,該列可以爲空(NULL)”。
有點懵逼?沒關係,我給你解釋。
先理解一個概念,空值,它也是值。只不過該值爲空。(var a=''; var b=null; a!=b//true; js代碼,看明白沒?)
NOT NULL 的意思是表中所有行的此屬性必須有一個值,這個值可以是你主動輸入的123,什麼的,也可以是空。
但不能是NULL,因爲NULL這個值,是沒有主動指定NOT NULL時填充進去的。
媽蛋,我寫完了,也搜到解釋了,如果我上述表述不清晰,可查看:MySQL null與not null和null與空值''的區別 。
AUTO_INCREMENT 書中已經說的很明白了,我介紹一下課外知識吧。
increment 讀作 [ˈɪnkrəmənt, ˈɪŋ-] 增量 的意思,auto_increment 是自動增量的意思,也可叫自增量。
還有一條是:指定 AUTO_INCREMENT 的列必須是索引列。
(書中貌似對什麼是索引沒有解釋,這是我搜索到的索引解釋:索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索數據文件,而不必查看所有數據,那麼將會節省很大一部分時間。
例如:有一張person表,其中有2W條記錄,記錄着2W個人的信息。有一個Phone的字段記錄每個人的電話號碼,現在想要查詢出電話號碼爲xxxx的人的信息。
如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條信息爲止。
如果有了索引,那麼會將該Phone字段,通過一定的方法進行存儲,好讓查詢該字段上的信息時,能夠快速找到對應的數據,而不必在遍歷2W條數據了。其中MySQL中的索引的存儲類型有兩種:BTREE、HASH。 也就是用樹或者Hash值來存儲該字段,要知道其中詳細是如何查找的,就需要會算法的知識了。我們現在只需要知道索引的作用,功能是什麼就行。全文請查看:MySQL中的索引詳講)
9.8.2理解列類型
(現在是2018年7月30日13:27 我收回之前吹牛B說七月底寫完筆記的的話,上手寫的時候我才發現自己的無知,之前很多覺得會了的,當要寫筆記的時候,才發現模棱兩可,表述不清,所以一直在閱讀展開相關知識帶你,還有就是我懶...我爭取8月份寫完筆記。。。)
主要寫的是列數據類型,整節的數據類型如下:
- unsigned 無符號的
- char 字符串數據類型。是指使用指定固定長度表示的字符串,比如char(8),則數據庫會使用固定的1個字節(八位)來存儲數據,不足8位的字符串在其後補空字符。
- amount 浮點類型數據(float)類型。如果你之前沒有接觸過數據類型,你可以暫且記爲包含小數點的數字類型。
- Date 日期數據類型。這個不解釋了。
- text 字符串數據類型。但是這個用於長文本,如文章什麼的。
9.8.3用show和describe來查看數據庫
這個之前說過了。再來一遍吧。
查看數據庫(databases 注意加S)
show databases;
使用數據庫 (目前可使用的是books,use books;)
use dbname;
查看數據表(記得加s)
show tables;
輸入完了你會看到如下數據表的,再次注意看表頭Tables_in_books ,顯示當前的數據表是在哪個數據庫。
+-----------------+
| Tables_in_books |
+-----------------+
| book_reviews |
| books |
| course |
| customers |
| order_items |
| orders |
+-----------------+
查看某個特定表的詳細信息.(書中舉例說明的是books 表,是books數據庫中的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創建索引
這裏的內容略過了,我就不寫我筆記了,因爲我沒啥可記的。推薦查看我上文提到過的文章:MySQL中的索引詳講。你先了解原理就行,具體操作先不必上手,專心看書。
9.9理解MySQL的標識符
略。
9.10選擇列數據類型
MySQL中3種基本的列數據類型:數字,日期和時間、字符串。
一般來說,選擇列數據類型的時候,基本原則是選擇可以滿足數據的最小類型。
9.10.1數字類型
數字類型分爲整型和浮點型兩類。
我只能用我淺薄的小學數學水平,狹隘的解釋一下這兩類了。
整型:整數,正整數負整數都是整型,不包含小數點的。
浮點型:就是小數,是不是浮點型,就看有沒有小數點就行了。
然後看錶9-5,9-6吧。
9.10.2日期和時間類型
唯一值得提的是TIMESTAMP類型。因爲它有兩個特性:
1.不手動指定時,TIMESTAMP列將被設置爲最近修改該行的日期和時間。(設想一下這個特性能做什麼?)。
2.它有多種的可顯示類型,參見表9-8。
9.10.3字符串類型
字符串類型分了三大類,其中第二類爲text和blob類型。
BLOB全稱爲大二進制對象。它支持任何數據,例如,圖像或聲音數據。
數據庫三大類型介紹完畢了,是不是覺得很多很繁瑣記不清?
其實很好記得,同一類型,比如說字符串類型,它很多的類型都是對當前類型的描述,長文本類型(langtext),中等文本類型(mediumtext),小文本類型(tinytext)。其實都是對一種類型,不同範圍的描述。如果你這麼理解了,就容易記得多了,可參看MySQL 數據類型文檔。
(我其實根本就沒記,主要的類型我還記了的,隨用隨查,用的多了自然就記着了。)
結語:
回想第八章,我們學習了數據庫的基本知識,學習了是麼是表格,列,行(記錄),值,鍵(主鍵/外鍵)。
學習了關係數據庫的都是啥關係?一對一,一對多,多對多。
學習了數據庫的基本設計規範(三個不規則)。
什麼是原子列?還擴展的學習了第一二三範式。
web數據庫的架構。
第九章的內容是實踐偏結合,學習瞭如何登陸,創建數據庫,創建用戶,設置用戶權限。
學習了數據表的創建,查看,關鍵字都是什麼意思。擴展了學習了一下索引。列的三大數據類型。
說起來沒多少,如果你也是一步一步看過來,並且還保證自己學會理解,還是很多的。努力吧,我也在學習。在此之前,我對數據庫只有個簡單的認識與瞭解,學習完這兩章之後。對數據庫也是有個粗淺的瞭解了,共同學習,共同進步,爲了愛我的人,和我愛的人,努力學習掙錢花。
請看下集:
《PHP和MySQL Web 開發》 第10章 使用Web數據庫