《PHP和MySQL Web 開發》 第10章 使用Web數據庫

LCL WARNING前端

  1. 這是我學習《PHP和MySQL Web 開發》的讀書筆記,一些重要的知識點我會記錄下來,固然只會寫我以爲重要的。mysql

  2. 若是有幸有人看到這個學習筆記了,你要結合着書看,不要光看這個筆記。sql

  3. 在筆記裏我會記錄一些我學習中遇到的問題和解決辦法與注意事項。數據庫

  4. 爲了方便管理和查找,文章或者說筆記的目錄我就按照書裏的排了,方便對比着看。編程

  5. 不是教學!重要的是說一遍!我是PHP和MySQL 的初學者,我自己是個前端,爲了面向工資編程,拓寬知識面才學的。後端

  6. 其實仍是有一些私心得,由於都說教學相長 和 小黃鴨調試法,我這個是小老虎學習法,對着小老虎講知識點,保證本身學的紮實,能掙錢。服務器

  7. 歡迎探討和指教,須知一山更比一山高,可是拒絕槓精!學習

 

李重樓編碼

 

本章主要是介紹了:spa

  • SQL是什麼
  • 在數據庫中插入數據
  • 從數據庫中取回數據
  • 表的連接
  • 使用子查詢
  • 更新數據庫中的記錄
  • 刪除數據庫中的記錄
  • 刪除表

你仔細看,每章前的描述,本章主要有介紹什麼什麼內容,那基本上都是你要掌握的,看完一章回來對對這個列表,都會了嘛。開始吧。

 

10.1 SQL是什麼

SQL的全稱是Structured Query Language。它是訪問關係數據庫管理系統的標準語言。

 Structured Query Language 結構化查詢語言,structured 結構化的,讀['strʌktʃəd] 。

用於定義數據庫的數據定義語言(Data Definition Language,DDL)和用於查詢數據庫的數據操做語言(Data Manipulation Language,DML).SQL包含這兩個基礎部分。

10.2 在數據庫中插入數據

insert 語句一般格式以下:

INSERT [INTO] table [(col1,col2,col3,...)] VALUES (value1,value2,value3,...);

書中給的例子:

insert into customers values (null,'Julie Smith','25 Oak Street','Airport West');

結合書都能看明白吧?

劃重點:mysql中的字符串應該包含在一對單引號或雙引號中。

使用 insert 語句指定插入的值會按照插入的順序添加到表中的列

 

如不按照列順序添加,要指定添加列以下:(好比說只更新用戶名

insert into customers (name,city) values('Melissa Jones','Nar Nar Goon North');

insert into customers
    ->set name = '李重樓',
    ->address = '蓮花池水溝子',
    ->city  = '北京';

 

然好好好看看關於customerid列指定爲null是爲何?(一下子結合查詢看一下查詢出來的結果,customerid列的值是什麼。)

插入多條數據時,參看程序清單10-1,每一個括號內是一條數據,括號間逗號分隔

 

LOW_PRIORITY關鍵字 

LOW_PRIORITY 低優先級,主動的下降了語句執行的優先級。(瞭解便可,我問了後端和爬蟲的同事,說不怎麼用...)

MySQL的默認的調度策略可用總結以下:

· 寫入操做優先於讀取操做。

· 對某張數據表的寫入操做某一時刻只能發生一次,寫入請求按照它們到達的次序來處理。

· 對某張數據表的多個讀取操做能夠同時地進行。

DELAYED關鍵字

DELAYED 延遲,延遲插入。這個也先了解,我看到後面重要的話,我回來再修改補充這裏。

DELAYED調節符應用於INSERT和REPLACE語句。當DELAYED插入操做到達的時候, 服務器把數據行放入一個隊列中,並當即給客戶端返回一個狀態信息,這樣客戶端就能夠在數據表被真正地插入記錄以前繼續進行操做了。

 

10.3從數據庫中獲取數據

前邊的基本格式我就不寫了,太長了關鍵是,實在是懶得敲了。

此處有個重點要說明一下:from 是從..的意思 是 F !! R!! O!!! M!!!   form是表單!!!別寫錯了,出錯誤的時候檢查一下這個命令關鍵字!再看看錶名!列名有沒有寫錯!少個S多個S啥的!  這都是血淚換來經驗啊!要好好記住啊~乖!!!

上面那段紅字,實際上是在我初次看書,實操代碼時候記下來的,這裏一樣寫了出來。但願對你有幫助。

書上的代碼必定要跟着敲,多敲才能手熟,才能發現問題,好比我用bookorama帳號登陸的數據庫,查詢結果就都變成了亂碼,首先我敢確定,這是編碼問題。而後我Google了怎麼解決,可是呢,我不敢改,由於我用的是公司項目的開發版本數據庫,雖然有正式版本做後盾,可是亂改配置我也得掂量一下,因此呢,這裏我先放一下。若是你解決了你告訴我怎麼解決的,我這裏的編碼是utf8mb4的,也請告訴我,root不錯亂,可是bookorama 爲啥錯亂,謝謝。

select name ,city from customers;

經過在select關鍵字後給出列名稱,能夠指定(查詢)任何數量的列。

其中一個有用的是通配符 「 * 」(星號),它能夠匹配指定一個或多個表中的全部列

如今呢,嘗試一下經過通配符查詢customers表,看一下在插入數據時,指定爲null或爲空的customerid列的值都是什麼,這可以幫助你理解自增量。

查詢結果以下:(我這個本身改了點數據,可能和你的不同,以理解爲主吧

+------------+-----------------+--------------------+--------------------+
| customerid | name            | address            | city               |
+------------+-----------------+--------------------+--------------------+
|          1 | 劉能             | 牡丹江大街           | 牡丹江             |
|          2 | 李重樓           | 北京中              | 北京               |
|          3 | 謝廣坤           | 保定市徐水縣         | 保定                |
|          4 | Alan Wong       | 1/47 Haines Avenue | 保定                |
|          5 | Michelle Arthur | 357 North Road     | Yarraville         |
|          6 | Melissa Jones   |  c3-1              | Nar Nar Goon North |
+------------+-----------------+--------------------+--------------------+

 

另外一個是,若是不知道當前表,或者你須要操做的表都包含哪些列,列名,數據類型,主鍵是什麼的話,下面這個命令沒忘吧?

describe tablename;

 

查詢結果以下:(customers表結果)

+------------+-----------+------+-----+---------+----------------+
| Field      | Type      | Null | Key | Default | Extra          |
+------------+-----------+------+-----+---------+----------------+
| customerid | int(11)   | NO   | PRI | NULL    | auto_increment |
| name       | char(70)  | NO   |     | NULL    |                |
| address    | char(100) | NO   |     | NULL    |                |
| city       | char(30)  | NO   |     | NULL    |                |
+------------+-----------+------+-----+---------+----------------+

 

10.3.1獲取知足條件的數據

WHERE語句指定了用於選擇特定行的條件。

首先翻回去一頁,看一下 where 在select查詢語句基本格式中的樣式。

它是方括號內的,表示可選的。也就是你有須要能夠加上。因此,你要學會看基本格式

select * 
from orders 
where customerid= 3;

能夠看出,命令是分行的,你也能夠按回車分行敲,也能夠一行敲,區別是,若是你分行敲,方便MySQL指出第幾行由錯誤。(我都是一行敲的,方便按鍵盤方向鍵上下鍵切換語句

我書裏的命令是 where customerid= 3,可是書中寫的是customerid爲5的行將被選中。我以爲是書寫錯了,查詢出來的應該是按照條件查詢出的結果,一切以實際操做結果爲準。(個人書是原書第四版,若是不是編輯沒校訂這一塊,那他媽就是盜版書的問題了

表10-1中列出了經常使用的的比較操做符,本身看吧,能夠都操做一下,看一下效果。

特別的列出 BETWEEN 的列子:(between 是這麼用的)

select * from customers where customerid  between 10 and 16;

而後嘗試一下AND和OR組合,使用條件。

 

10.3.2從多個表中獲取數據

這一節的點睛之筆來了啊,其實數據庫的點睛之筆也是這句話。(我的認爲)

要經過數據回答一個問題。

開始吧。

這些數據分佈在不一樣的表中,由於他們與現實世界的對象相關。

書中說在第8章介紹過了。

當建立一個數據庫時,咱們常常爲現實世界的實體和關係創建模型,而且儲存這些實體對象與關係的信息。

 

要在SQL中獎這些信息放到一塊兒,必須執行一個名爲關聯的操做。簡單地說,這意味着須要根據數據間的關係將兩個或更多的表關聯到一塊兒。

1.簡單的關聯

select orders.orderid,orders.amount,orders.date 
from customers,orders
where customers.name='Julie Smith' 
and 
customers.customerid = orders.customerid;

一個很重要的關聯準則請記住:

由於是經過來自兩個表的信息來完成這個查詢,所以咱們必須將兩個表都列在這裏。(你的查詢中,須要列出你要查詢的列數據從哪一個數據表中來。

表名之間的逗號等價於輸入INNER JOINCROSS JOIN

有時也稱爲徹底關聯或表的笛卡爾乘積

笛卡爾乘積...這個比較迷,我給數學很差的同窗們解釋一下:(兩兩相乘?)

簡單的說就是兩個集合相乘的結果。
具體的定義去看看有關代數系的書的定義。
直觀的說就是
集合A{a1,a2,a3} 集合B{b1,b2}
他們的 笛卡爾積 是 A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}
任意兩個元素結合在一塊兒

而後書裏說了,這個沒意義。確實沒有意義,你輸入一下 select * from customers,orders; 你就會看到這兩個數據表的笛卡爾乘積 。我就不貼,太長了。

因此,咱們須要經過 where子句使用關聯條件,來篩選出有意義的數據。

書中例子已經給出了(customers.name='Julie Smith' and customers.customerid = orders.customerid;)篩選出Julie Smith的訂單。

我的總結一下:

  1. 確認須要哪些數據列。
  2. 若是當前數據表中不包含某數據列,須要把包含此數據列的數據表引入進來。
  3. 兩個數數據表徹底關聯一會兒!(此時腦補你要的數據格式已經出現,只不過有N條,你不知道是哪條!)
  4. 經過where子句提供篩選條件,獲得篩選結果。
相關文章
相關標籤/搜索