回顧文件操作:包含文件夾和文件 文件夾操作:獲取路徑資源opendir,,讀取資源數(shù)據(jù)readdir,,釋放資源closedir,重置指針rewinddir 取出所有文件:scandir 遞歸:函數(shù)內(nèi)部自己調(diào)用自己(為了解決與父問題相同的子問題) 遞歸點(diǎn):什么時候調(diào)用函數(shù)自己,,遍歷出來的文件是一個文件夾 遞歸出口:什么時候終止函數(shù)調(diào)用,,如果子文件是文件/如果整個文件夾遍歷結(jié)束都沒有子文件夾 文件操作:PHP5和PHP5以前(fopen:代開,;fgetc/fgets/fread:讀;fwrite/fputs:寫入,;fclose:關(guān)閉) 文件操作函數(shù),文件下載 1. 遍歷文件夾及其子目錄:所有的內(nèi)容都讀入到數(shù)組 2. 站點(diǎn)統(tǒng)計(jì):輸出用戶訪問次數(shù),,第幾位訪客,,最近的訪問時間 作業(yè)見代碼:homework1_dir_iterate.php/homework2_#php 數(shù)據(jù)庫知識體系數(shù)據(jù)分為三個階段 第一階段:SQL基礎(chǔ),mysql的基礎(chǔ)知識,,視圖,,函數(shù),觸發(fā)器,,存儲過程,,5+1+1 5天基礎(chǔ)+1天PHP+mysql編程+1PDO(面向?qū)ο螅?/span> 第二階段:mysql優(yōu)化,索引+分頁 第三階段:mysql部署,,服務(wù)器集群,,讀寫分離,負(fù)載均衡 數(shù)據(jù)庫基本知識1. 什么是數(shù)據(jù)庫,? 廣義:凡是能夠存儲和處理數(shù)據(jù)的媒介(介質(zhì))都是數(shù)據(jù)庫 狹義:高效的存儲和處理數(shù)據(jù)的媒介 2. 數(shù)據(jù)庫分類 關(guān)系型數(shù)據(jù)庫:建立在關(guān)系模型上的數(shù)據(jù)庫,。 關(guān)系模型:二維表,關(guān)系模型是通過關(guān)系數(shù)據(jù)結(jié)構(gòu),,關(guān)系的操作指令和關(guān)系約束三部分組成,。 關(guān)系型數(shù)據(jù)庫:維護(hù)實(shí)體內(nèi)部的聯(lián)系以及實(shí)體和實(shí)體之間的聯(lián)系的數(shù)據(jù)庫(實(shí)體:自然界中存在的各種數(shù)據(jù)對象) 非關(guān)系型數(shù)據(jù)庫:所有不是關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫都是非關(guān)系型數(shù)據(jù)庫 關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫的區(qū)別 1. 運(yùn)行的介質(zhì)部一樣:關(guān)系型數(shù)據(jù)庫數(shù)據(jù)保存在磁盤,非關(guān)系型數(shù)據(jù)運(yùn)行在內(nèi)存 2. 效率區(qū)別:非關(guān)系型數(shù)據(jù)庫效率高 3. 安全區(qū)別:關(guān)系型數(shù)據(jù)庫安全 3. 數(shù)據(jù)庫產(chǎn)品 關(guān)系型數(shù)據(jù)庫:mysql,,Oracle,,DB2,SqlServer,,access等 非關(guān)系型數(shù)據(jù)庫:memcache,,mongodb,,redis等 4. 數(shù)據(jù)庫名詞 數(shù)據(jù):data,攜帶有用信息的字符 數(shù)據(jù)庫:database,,存放數(shù)據(jù)的“倉庫” 數(shù)據(jù)庫管理系統(tǒng):DBMS(database Management System),,管理數(shù)據(jù)庫的系統(tǒng) 數(shù)據(jù)庫系統(tǒng):DBS(database system) = DBMS + DB 數(shù)據(jù)庫管理員:DBA(Database Administrator),專門維護(hù)數(shù)據(jù)庫系統(tǒng) 關(guān)系型數(shù)據(jù)庫維護(hù)數(shù)據(jù)的內(nèi)部聯(lián)系和數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系,。 關(guān)系型數(shù)據(jù)庫都是通過二維表來進(jìn)行數(shù)據(jù)的維護(hù)的,。 學(xué)員管理系統(tǒng):學(xué)生,班級 學(xué)生:學(xué)號,,姓名,,性別,年齡
維護(hù)的數(shù)據(jù)內(nèi)部的關(guān)系 關(guān)系型數(shù)據(jù)庫:即便數(shù)據(jù)不存在,,也要分配空間和位置來用于數(shù)據(jù)存放,。比較浪費(fèi)磁盤空間。 班級:班級號,,教室
維護(hù)的數(shù)據(jù)內(nèi)部的關(guān)系 班級與學(xué)生關(guān)系
維護(hù)實(shí)體與實(shí)體之間的關(guān)系 典型的關(guān)系型數(shù)據(jù)庫概念行和記錄 行:row,,行是從表的結(jié)構(gòu)角度出發(fā) 記錄:record,記錄是從數(shù)據(jù)的角度出發(fā) 列和字段 列:column,,結(jié)構(gòu)角度 字段:field,,數(shù)據(jù)角度 SQL:Structured Query Language,結(jié)構(gòu)化的查詢語言,,是據(jù)庫的編程語言 DDL:Data Define Language,,數(shù)據(jù)定義語言,專門用于定義數(shù)據(jù)的存儲的結(jié)構(gòu),,create DML:Data Manipulation Language,,數(shù)據(jù)操作語言,對數(shù)據(jù)進(jìn)行增刪改查,, DQL:Data Query Language,,數(shù)據(jù)查詢語言 DCL:Data Control Language,數(shù)據(jù)控制語言,,控制用戶的權(quán)限,,revoke等 mysql數(shù)據(jù)庫mysql數(shù)據(jù)庫是一款c/s結(jié)構(gòu)的軟件。意味著訪問服務(wù)器必須通過客戶端來實(shí)現(xiàn),。 假設(shè):客戶端與服務(wù)端不在同一臺電腦上,。(絕大部分的情況如此) 操作數(shù)據(jù)庫的步驟: 1. 保證客戶端和服務(wù)端都已經(jīng)運(yùn)行,開始服務(wù)了,。 2. 運(yùn)行客戶端:連接服務(wù)器,。連接認(rèn)證。 a) –h:host,主機(jī)地址,,ip或者域名:-hlocalhost,,可以省略 b) –P:port,服務(wù)器的服務(wù)監(jiān)聽端口:-P3306,,可以省略 c) –u:username,,登錄服務(wù)器的用戶名:-uroot d) –p:password,登錄服務(wù)器的密碼:-p 利用mysql.exe,,需要借助cmd環(huán)境才能運(yùn)行 3. 準(zhǔn)備SQL語句 4. 發(fā)送SQL語句給服務(wù)器 5. 服務(wù)器:接收SQL語句 6. 服務(wù)器:執(zhí)行SQL語句 7. 服務(wù)器:將執(zhí)行結(jié)果返回給客戶端 8. 客戶端:解析結(jié)果 9. 客戶端:顯示結(jié)果 10. 退出服務(wù)器:斷開連接 exit/quit/\q mysql服務(wù)器對象整個服務(wù)器就是一個DBS:數(shù)據(jù)庫系統(tǒng) 系統(tǒng)是由DBMS進(jìn)行管理,,管理DB,DB管理Table,,表管理field SQL基本操作SQL基本操作分為三類:庫操作,,表操作(字段操作),數(shù)據(jù)操作 SQL基本操作:CRUD C:Create,,新增 R:Read/Retrive,,讀取 U:Update,更新 D:delete/Drop,,刪除 庫操作新增庫create database 數(shù)據(jù)庫名字 [庫選項(xiàng)]; 庫選項(xiàng):字符集和校對集 charset/character set:字符集,,utf8/gbk/gb2312,表示當(dāng)前數(shù)據(jù)庫內(nèi)的數(shù)據(jù)按照指定的字符集進(jìn)行存儲 collate:校對集,,比較字符的大小的規(guī)范,,校對集依賴字符集 當(dāng)以上語句執(zhí)行的時候,系統(tǒng)發(fā)生了如下改變 1. 系統(tǒng)內(nèi)部創(chuàng)建一個叫做my_data1數(shù)據(jù)庫名字的數(shù)據(jù)庫,,字符集是utf8 2. 系統(tǒng)在服務(wù)器存儲數(shù)據(jù)的位置創(chuàng)建一個叫做my_data1的文件夾 my.ini中查看數(shù)據(jù)存儲目錄 文件創(chuàng)建 3. 文件夾內(nèi)部有一個opt文件:記住了當(dāng)前數(shù)據(jù)庫的庫選項(xiàng) 數(shù)據(jù)庫命名規(guī)范 1. 采用字母下劃線和數(shù)字構(gòu)成,通常建議使用英文單詞配合下劃線 2. 數(shù)據(jù)庫名字不能夠直接使用關(guān)鍵字 3. 不能直接使用中文作為數(shù)據(jù)庫名字,。如果要使用關(guān)鍵字或者中文,,對名字使用反引號 反引號:鍵盤左上角1鍵左邊的鍵在英文狀態(tài)的輸出 中文需要先設(shè)定字符集 中文數(shù)據(jù)庫在操作系統(tǒng)下使用十六進(jìn)制命名,并不是中文 注意:不建議使用中文作為數(shù)據(jù)庫名字,,關(guān)鍵字也不建議,,保留字也一樣 查看庫語法1:查看所有 show databases; 語法2:查看部分相關(guān)數(shù)據(jù)庫,使用匹配模式:%和_ show databases like 'pattern’; %:代表匹配任意長度的任意字符 _:匹配一個長度的字符 語法3:查看數(shù)據(jù)庫的創(chuàng)建語句:不是指 的用戶創(chuàng)建的時候自定義的SQL語句,,而是系統(tǒng)執(zhí)行的時候,,內(nèi)部整理后的SQL語句 show create database 數(shù)據(jù)庫名字; 修改庫修改數(shù)據(jù)庫不能夠修改數(shù)據(jù)庫名字 修改數(shù)據(jù)庫只能修改庫選項(xiàng) 語法:修改結(jié)構(gòu)的語法都是alter alter database 數(shù)據(jù)庫名字 要修改的庫選項(xiàng); -- 一般用于修改字符集 雖然只修改了字符集,但是校對集也被修改 刪除庫刪除指定的數(shù)據(jù)庫,,只能一個一個的刪除,,刪除數(shù)據(jù)庫會連帶的將數(shù)據(jù)庫內(nèi)部的所有數(shù)據(jù)表都刪除。(慎用) 語法:所有的結(jié)構(gòu)刪除都使用drop drop database 數(shù)據(jù)庫名字; 執(zhí)行刪除語句之后,,發(fā)生了什么,? 1. 數(shù)據(jù)庫不存在了 2. 數(shù)據(jù)庫對應(yīng)的文件夾也被刪除了 表操作對數(shù)據(jù)表的增刪改查,以及表中的字段的操作。 數(shù)據(jù)表不能脫離字段,,字段不能獨(dú)立存在,。 SQL是一種強(qiáng)類型語言,所有的字段都必須指定數(shù)據(jù)類型 增加表語法 create table 表名( 字段名1 字段類型, -- 字段與字段之間使用逗號分隔 字段名N 字段類型 – 最后一個子彈不需要逗號 ) [表選項(xiàng)]; 表選項(xiàng):字符集和存儲引擎 字符集:表中數(shù)據(jù)存儲的字符集,,可以與數(shù)據(jù)庫的不一致 存儲引擎:engine,,數(shù)據(jù)的存儲方式,默認(rèn)的是InnoDB,,低版本的myisam 錯誤:數(shù)據(jù)表是由數(shù)據(jù)庫來管理,,所以必須先指定數(shù)據(jù)庫 如何指定數(shù)據(jù)庫? 1. 顯示指定數(shù)據(jù)庫:在創(chuàng)建表的表名前面使用數(shù)據(jù)庫名字.表名 2. 隱式的指定數(shù)據(jù)庫:事先進(jìn)入到數(shù)據(jù)庫環(huán)境,,再創(chuàng)建表時,,默認(rèn)的使用當(dāng)前數(shù)據(jù)庫 語法:use 數(shù)據(jù)庫名字; innodb和myisam的區(qū)別 1. 兩種存儲引擎結(jié)構(gòu)有區(qū)別 InnoDB的數(shù)據(jù)和索引都在外部的ibdata1文件中 查詢表查看表以及結(jié)構(gòu),與數(shù)據(jù)庫的查看基本一致 語法1:查看所有表 show tables; 語法2:查看表的創(chuàng)建語句 show create table 表名; 語法3:查看表的結(jié)構(gòu)(字段) desc/describe/show columns from 表名; 修改表修改表分為兩種:修改表自己,,修改表內(nèi)部的字段 修改表自己:修改表名和表選項(xiàng) 修改表名 rename table 表名 to 新表名; 修改表選項(xiàng) alter table 表名 表選項(xiàng); 修改存儲引擎會修改對應(yīng)的數(shù)據(jù)庫文件夾下的文件 修改表字段:增刪改 alter table 表名 [add/drop/modify/change] 字段名字 數(shù)據(jù)類型 [位置] 位置:first/ after 字段名,,默認(rèn)的是本身或者所有的字段之后 添加字段 alter table 表名 add [colomn] 字段名 數(shù)據(jù)類型 [位置] 修改字段:修改名字和修改字段的數(shù)據(jù)類型 修改名字 alter table 表名 change 字段原名新名字 數(shù)據(jù)類型; 修改字段數(shù)據(jù)類型 alter table 表名 modify 字段名字數(shù)據(jù)類型 [位置]; 刪除字段 alter table 表名 drop 字段名; 刪除表將表刪除和表里面的數(shù)據(jù)也刪除 語法 drop table 表名,表名; 可以一次性刪除多個表,使用逗號分隔,。 注意:數(shù)據(jù)表不要輕易刪除,,刪除之前最好先備份。 數(shù)據(jù)操作對表里面的數(shù)據(jù)進(jìn)行增刪改查 新增數(shù)據(jù)數(shù)據(jù)與結(jié)構(gòu)有別,,SQL額外使用了關(guān)鍵字insert into 語法 insert into 表名 [(字段列表:字段使用逗號分隔)] values(值列表:必須完全對應(yīng)字段列表)[,(值列表)] 數(shù)據(jù)的新增方式有以下幾種 1. 部分字段添加數(shù)據(jù),,沒有添加的部分系統(tǒng)會自動的使用字段的默認(rèn)值填充,必須指定字段列表和值列表,,順序都必須一一對應(yīng)(字段列表里面的字段可以與表結(jié)構(gòu)中的字段不一樣) 注意:采用這種方式插入數(shù)據(jù)的話,,必須前提條件是沒有插入數(shù)據(jù)的字段有默認(rèn)值或者自增長 2. 給所有的字段都天劍數(shù)據(jù):可以沒有字段列表,如果沒有字段列表,,值列表里面數(shù)據(jù)的順序就必須與表結(jié)構(gòu)中的字段順序一致,。 3. 可以一次性插入多個數(shù)據(jù)(記錄),在values后面使用括號和逗號進(jìn)行分隔 查看數(shù)據(jù)將表中的數(shù)據(jù)取出來查看 語法: select */字段列表 from 表名 where 條件; where條件用來篩選數(shù)據(jù) 更新數(shù)據(jù)語法 update 表名 set 字段名 = 值[,字段 = 值…] where 條件; 更新多條記錄 刪除數(shù)據(jù)語法 delete from 表名 where條件; -- 沒有條件就會刪除所有的數(shù)據(jù) 字符集1. 什么是字符集,? 字符集是字符的集合,,不同的字符在進(jìn)行二進(jìn)制存儲的時候,應(yīng)當(dāng)遵循的某個轉(zhuǎn)換的規(guī)則,。 字符集問題解決 1. 了解服務(wù)器到底能支持哪些字符集,? show character set; 2. 了解服務(wù)器默認(rèn)的對外部客戶端的默認(rèn)字符集支持 show variables like 'character_set%’; mysql客戶端只支持GBK,而服務(wù)器默認(rèn)客戶端是utf8字符集 解決方案:將服務(wù)器認(rèn)為的客戶端發(fā)送的數(shù)據(jù)由utf8改成gbk set character_set_client = gbk; 解決效果 查詢效果 矛盾:查詢出來的結(jié)果依然是亂碼,,原因是因?yàn)榉?wù)器認(rèn)為客戶端所能解析的結(jié)果的字符集是utf8的,,客戶端實(shí)際上是GBK,GBK的確可以解析,,只是解析成亂碼,。 解決方案:修改服務(wù)器認(rèn)為的客戶端的所能接收的結(jié)果的字符集為gbk,; set character_set_results = gbk; set names gbk:所做的事情就是將服務(wù)器認(rèn)為的跟客戶端相關(guān)的字符集(client和results)變成gbk,系統(tǒng)還會將connection也轉(zhuǎn)成gbk,; connection只是為了數(shù)據(jù)在內(nèi)部進(jìn)行轉(zhuǎn)換時,,提升轉(zhuǎn)換的效率 原理圖 字符集的設(shè)置:根據(jù)客戶端自己的字符集進(jìn)行設(shè)置。 |
|