文件操作:包含文件夾和文件
文件夾操作:獲取路徑資源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ù)分為三個(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ù)載均衡
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)
維護(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),姓名,性別,年齡
學(xué)號(hào) | 姓名 | 性別 | 年齡 |
Itcast0001 | 華萃文 | 男 | 23 |
Itcast0002 | 陳麗玲 | 女 | |
Itcast0003 | 潘市遠(yuǎn) | 男 | 20 |
維護(hù)的數(shù)據(jù)內(nèi)部的關(guān)系
關(guān)系型數(shù)據(jù)庫:即便數(shù)據(jù)不存在,也要分配空間和位置來用于數(shù)據(jù)存放。比較浪費(fèi)磁盤空間。
班級(jí):班級(jí)號(hào),教室
班級(jí)編號(hào) | 教室 |
PHP141115 | A814 |
PHP140815 | A806 |
維護(hù)的數(shù)據(jù)內(nèi)部的關(guān)系
班級(jí)與學(xué)生關(guān)系
學(xué)號(hào) | 姓名 | 性別 | 年齡 | 班級(jí)編號(hào) |
Itcast0001 | 華萃文 | 男 | 23 | PHP141115 |
Itcast0002 | 陳麗玲 | 女 | PHP141115 | |
Itcast0003 | 潘市遠(yuǎn) | 男 | 20 | PHP140815 |
維護(hù)實(shí)體與實(shí)體之間的關(guān)系
行和記錄
行: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ù)庫是一款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
整個(gè)服務(wù)器就是一個(gè)DBS:數(shù)據(jù)庫系統(tǒng)
系統(tǒng)是由DBMS進(jìn)行管理,管理DB,DB管理Table,表管理field
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’;
%:代表匹配任意長度的任意字符
_:匹配一個(gè)長度的字符
語法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ù)表不要輕易刪除,刪除之前最好先備份。
對(duì)表里面的數(shù)據(jù)進(jìn)行增刪改查
數(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)值或者自增長
2. 給所有的字段都天劍數(shù)據(jù):可以沒有字段列表,如果沒有字段列表,值列表里面數(shù)據(jù)的順序就必須與表結(jié)構(gòu)中的字段順序一致。
3. 可以一次性插入多個(gè)數(shù)據(jù)(記錄),在values后面使用括號(hào)和逗號(hào)進(jìn)行分隔
將表中的數(shù)據(jù)取出來查看
語法:
select */字段列表 from 表名 where 條件;
where條件用來篩選數(shù)據(jù)
語法
update 表名 set 字段名 = 值[,字段 = 值…] where 條件;
更新多條記錄
語法
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è)置。
聯(lián)系客服