回顧文件操作:包含文件夾和文件 文件夾操作:獲取路徑資源opendir,讀取資源數(shù)據(jù)readdir,釋放資源closedir,重置指針rewinddir 取出所有文件:scandir 遞歸:函數(shù)內(nèi)部自己調(diào)用自己(為了解決與父問題相同的子問題) 遞歸點(diǎn):什么時(shí)候調(diào)用函數(shù)自己,遍歷出來的文件是一個(gè)文件夾 遞歸出口:什么時(shí)候終止函數(shù)調(diào)用,如果子文件是文件/如果整個(gè)文件夾遍歷結(jié)束都沒有子文件夾 文件操作:PHP5和PHP5以前(fopen:代開;fgetc/fgets/fread:讀;fwrite/fputs:寫入;fclose:關(guān)閉) 文件操作函數(shù),文件下載 1. 遍歷文件夾及其子目錄:所有的內(nèi)容都讀入到數(shù)組 2. 站點(diǎn)統(tǒng)計(jì):輸出用戶訪問次數(shù),第幾位訪客,最近的訪問時(shí)間 作業(yè)見代碼:homework1_dir_iterate.php/homework2_#php 數(shù)據(jù)庫知識(shí)體系數(shù)據(jù)分為三個(gè)階段 第一階段:SQL基礎(chǔ),mysql的基礎(chǔ)知識(shí),視圖,函數(shù),觸發(fā)器,存儲(chǔ)過程,5+1+1 5天基礎(chǔ)+1天PHP+mysql編程+1PDO(面向?qū)ο螅?/span> 第二階段:mysql優(yōu)化,索引+分頁 第三階段:mysql部署,服務(wù)器集群,讀寫分離,負(fù)載均衡 數(shù)據(jù)庫基本知識(shí)1. 什么是數(shù)據(jù)庫? 廣義:凡是能夠存儲(chǔ)和處理數(shù)據(jù)的媒介(介質(zhì))都是數(shù)據(jù)庫 狹義:高效的存儲(chǔ)和處理數(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ù)對(duì)象) 非關(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é)生,班級(jí) 學(xué)生:學(xué)號(hào),姓名,性別,年齡
維護(hù)的數(shù)據(jù)內(nèi)部的關(guān)系 關(guān)系型數(shù)據(jù)庫:即便數(shù)據(jù)不存在,也要分配空間和位置來用于數(shù)據(jù)存放。比較浪費(fèi)磁盤空間。 班級(jí):班級(jí)號(hào),教室
維護(hù)的數(shù)據(jù)內(nèi)部的關(guān)系 班級(jí)與學(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ù)的存儲(chǔ)的結(jié)構(gòu),create DML:Data Manipulation Language,數(shù)據(jù)操作語言,對(duì)數(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ù)端不在同一臺(tái)電腦上。(絕大部分的情況如此) 操作數(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ù)器對(duì)象整個(gè)服務(wù)器就是一個(gè)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):字符集和校對(duì)集 charset/character set:字符集,utf8/gbk/gb2312,表示當(dāng)前數(shù)據(jù)庫內(nèi)的數(shù)據(jù)按照指定的字符集進(jìn)行存儲(chǔ) collate:校對(duì)集,比較字符的大小的規(guī)范,校對(duì)集依賴字符集
當(dāng)以上語句執(zhí)行的時(shí)候,系統(tǒng)發(fā)生了如下改變 1. 系統(tǒng)內(nèi)部創(chuàng)建一個(gè)叫做my_data1數(shù)據(jù)庫名字的數(shù)據(jù)庫,字符集是utf8 2. 系統(tǒng)在服務(wù)器存儲(chǔ)數(shù)據(jù)的位置創(chuàng)建一個(gè)叫做my_data1的文件夾 my.ini中查看數(shù)據(jù)存儲(chǔ)目錄
文件創(chuàng)建
3. 文件夾內(nèi)部有一個(gè)opt文件:記住了當(dāng)前數(shù)據(jù)庫的庫選項(xiàng)
數(shù)據(jù)庫命名規(guī)范 1. 采用字母下劃線和數(shù)字構(gòu)成,通常建議使用英文單詞配合下劃線 2. 數(shù)據(jù)庫名字不能夠直接使用關(guān)鍵字
3. 不能直接使用中文作為數(shù)據(jù)庫名字。如果要使用關(guān)鍵字或者中文,對(duì)名字使用反引號(hào) 反引號(hào):鍵盤左上角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’; %:代表匹配任意長(zhǎng)度的任意字符 _:匹配一個(gè)長(zhǎng)度的字符
語法3:查看數(shù)據(jù)庫的創(chuàng)建語句:不是指 的用戶創(chuàng)建的時(shí)候自定義的SQL語句,而是系統(tǒng)執(zhí)行的時(shí)候,內(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); -- 一般用于修改字符集
雖然只修改了字符集,但是校對(duì)集也被修改
刪除庫刪除指定的數(shù)據(jù)庫,只能一個(gè)一個(gè)的刪除,刪除數(shù)據(jù)庫會(huì)連帶的將數(shù)據(jù)庫內(nèi)部的所有數(shù)據(jù)表都刪除。(慎用) 語法:所有的結(jié)構(gòu)刪除都使用drop drop database 數(shù)據(jù)庫名字;
執(zhí)行刪除語句之后,發(fā)生了什么? 1. 數(shù)據(jù)庫不存在了 2. 數(shù)據(jù)庫對(duì)應(yīng)的文件夾也被刪除了
表操作對(duì)數(shù)據(jù)表的增刪改查,以及表中的字段的操作。 數(shù)據(jù)表不能脫離字段,字段不能獨(dú)立存在。 SQL是一種強(qiáng)類型語言,所有的字段都必須指定數(shù)據(jù)類型 增加表語法 create table 表名( 字段名1 字段類型, -- 字段與字段之間使用逗號(hào)分隔 字段名N 字段類型 – 最后一個(gè)子彈不需要逗號(hào) ) [表選項(xiàng)]; 表選項(xiàng):字符集和存儲(chǔ)引擎 字符集:表中數(shù)據(jù)存儲(chǔ)的字符集,可以與數(shù)據(jù)庫的不一致 存儲(chǔ)引擎:engine,數(shù)據(jù)的存儲(chǔ)方式,默認(rèn)的是InnoDB,低版本的myisam
錯(cuò)誤:數(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)建表時(shí),默認(rèn)的使用當(dāng)前數(shù)據(jù)庫 語法:use 數(shù)據(jù)庫名字;
innodb和myisam的區(qū)別 1. 兩種存儲(chǔ)引擎結(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);
修改存儲(chǔ)引擎會(huì)修改對(duì)應(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 表名,表名;
可以一次性刪除多個(gè)表,使用逗號(hào)分隔。 注意:數(shù)據(jù)表不要輕易刪除,刪除之前最好先備份。 數(shù)據(jù)操作對(duì)表里面的數(shù)據(jù)進(jìn)行增刪改查 新增數(shù)據(jù)數(shù)據(jù)與結(jié)構(gòu)有別,SQL額外使用了關(guān)鍵字insert into 語法 insert into 表名 [(字段列表:字段使用逗號(hào)分隔)] values(值列表:必須完全對(duì)應(yīng)字段列表)[,(值列表)] 數(shù)據(jù)的新增方式有以下幾種 1. 部分字段添加數(shù)據(jù),沒有添加的部分系統(tǒng)會(huì)自動(dòng)的使用字段的默認(rèn)值填充,必須指定字段列表和值列表,順序都必須一一對(duì)應(yīng)(字段列表里面的字段可以與表結(jié)構(gòu)中的字段不一樣)
注意:采用這種方式插入數(shù)據(jù)的話,必須前提條件是沒有插入數(shù)據(jù)的字段有默認(rèn)值或者自增長(zhǎng) 2. 給所有的字段都天劍數(shù)據(jù):可以沒有字段列表,如果沒有字段列表,值列表里面數(shù)據(jù)的順序就必須與表結(jié)構(gòu)中的字段順序一致。
3. 可以一次性插入多個(gè)數(shù)據(jù)(記錄),在values后面使用括號(hào)和逗號(hào)進(jìn)行分隔
查看數(shù)據(jù)將表中的數(shù)據(jù)取出來查看 語法: select */字段列表 from 表名 where 條件;
where條件用來篩選數(shù)據(jù)
更新數(shù)據(jù)語法 update 表名 set 字段名 = 值[,字段 = 值…] where 條件;
更新多條記錄
刪除數(shù)據(jù)語法 delete from 表名 where條件; -- 沒有條件就會(huì)刪除所有的數(shù)據(jù)
字符集1. 什么是字符集? 字符集是字符的集合,不同的字符在進(jìn)行二進(jìn)制存儲(chǔ)的時(shí)候,應(yīng)當(dāng)遵循的某個(gè)轉(zhuǎn)換的規(guī)則。 字符集問題解決 1. 了解服務(wù)器到底能支持哪些字符集? show character set;
2. 了解服務(wù)器默認(rèn)的對(duì)外部客戶端的默認(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)還會(huì)將connection也轉(zhuǎn)成gbk;
connection只是為了數(shù)據(jù)在內(nèi)部進(jìn)行轉(zhuǎn)換時(shí),提升轉(zhuǎn)換的效率 原理圖
字符集的設(shè)置:根據(jù)客戶端自己的字符集進(jìn)行設(shè)置。 |
|
|