瀏覽器只能夠解碼html格式的文檔
動態網站是根據用戶請求能做出對應響應甚至於對不同用戶返回內容是不一樣的
java:一直編譯到處運行,是因爲java的程序是在java的虛擬機中運行的,而底層系統的不同都讓java虛擬機隱藏起來了,而不同的虛擬機向上提供的接口是統一的
CGI:能夠讓前端web服務器的進程根據對應程序的不同調用對應執行環境,並將程序的運行結果取回至web進程
編程語言
靜態語言:編譯型語言
C C++ JAVA
優點:性能好 操作系統,驅動程序一般用靜態語言開發,比動態語言性能好30%
缺點:每一次改動語言需要重新編譯
動態語言:解釋型語言
shell perl python(Django專門開發web站點的框架)
有點:編譯維護 衆多模塊可以共享
確定:性能差
PHP is Hyper Preprocessor
PHP超文本預處理器
bash解釋器的分析功能:
詞法分析:分析關鍵字
語法分析:判斷程序中有沒有語法錯誤
執行流:生成執行路徑
parser:php的分析器
1997年兩名以色列的程序員重寫了php核心,於1999年發佈並命名爲zend Engline(php腳本語言解釋器)1.0
zend engline的出現將php的代碼處理過程分爲兩個階段,首先分析php代碼將其轉換成爲zend opcode的二進制格式,並將其存儲於內存中,第二個階段是使用zend engline去
執行這些轉換後的opcode
opcode是php腳本編譯後的中間語言
php執行php代碼的四個步驟:
1、scanning(語法分析)將php代碼轉換爲語言片段(Tokens)
2、parsing(將數值賦值給一個變量)將Tokens轉換成簡單而有意義的表達式
3、compilation 將表達式轉化成opcode
4、Execution 順次執行opcode,每次一條,從而實現php腳本的功能
php的緩存(加速器):每一個php進程編譯好opcode不會放入此進程在內存的私有地址當中,而是存放在另外一個程序提供的緩存空間當中,這個空間可以被衆多的php進程所共享
Xcache:快速而穩定的php opcode緩存,經過嚴格測試並且被大量運用於生產環境
zend optimizer是一個免費的,閉源的php擴展,能夠直接運行由zend guard生成的加密的php代碼或模糊代碼
php的源碼目錄結構:
bulid 主要存放一些與源碼編譯相關的文件,構建開始之前的buildconf腳本以及一些檢查環境的腳本
ext 官方的擴展目錄,包括了絕大多數php函數的定義和實現
main 存放php最爲核心的文件,是實現php的基礎設施
zend zend引擎的實現目錄,比如腳本的語法解析
pear php擴展與應用倉庫,包括pear的核心文件
sapi 包含了各種服務器的抽象代碼
tsrm php的線程安全是構建在tstm之上的
tests php的測試腳本集合,包含php的各項功能的測試文件
win32 這個目錄主要包括windows平臺相關的一些實現
mvc:model view controller:模型-視圖-控制器
嵌入式web開發語言:將php代碼嵌入至html中
apache+php
CGI:php腳本直接交給php服務器執行
Module:將php做成一個模塊動態加載至apache中
FastCGI:apache是一個客戶端,php是一個服務器自身創建(並管理)很多進程,這種機制我們稱之爲FastCGI
Nginx+fpm(fast php modules)
<?php
phpinfo(); 這是php的一個內置函數,它能夠以web頁的形式標記顯示當前php服務器的所有信息
?>
ODBC(open database connection)開放數據庫系統互聯:把各種API以統一的風格輸出出來,任何一種語言都可以調用API
一般PHP和數據庫的交互:php———>驅動(將php語言翻譯給數據庫的接口)————>API————>數據庫
API 應用編程接口
數據庫驗證內部用戶簡介:
首先只查找用戶名的字段
排序
二分法查找:首先拿用戶名跟數據最中間的值比較,如果大於中間的值那繼續往下半段的中間再比較,依次最後定位到用戶名
對於沒有排序的用戶名查找:每生成一個數據都是隨機的並不會排序。但是會存在另外一個文件存放排序的賬戶,並且每一個賬戶
都有一個指針指向沒有排序的賬號,然後而二分法查找排序了賬號的文件在,最終找出賬號,這個文件我們稱之爲索引文件,幫助我們查詢
數據結構的文件我們稱之爲索引文件。
數據庫管理軟件並非是數據庫:而是用來幫我們管理數據文件的
DBMS
Database Management System
RDBMS
關係型數據庫管理系統 Relation Database Management system
SQL:結構化數據查詢語言(美國國家標準委員會ANSI指定標準)
提供RDBMS的軟件有:
世界三大數據庫:
①oracle
②Sybase:sqlserver數據庫的原型
③Informix:已被oracle收購
功能:
數據庫的創建、刪除、修改
數據表的創建、刪除、修改
索引的創建,刪除、修改
用戶和權限的管理
增、刪,改、查
數據的組織結構
層次型:
網狀型:
關係型(二維關係):將每一種要處理的數據定義成爲一個對象(或者是一個條目),對論壇而言(賬戶名、帖子、回覆)分別都是一個對象,並將每個對象建立關聯關係
數據庫名的三個類別:
DML(Data Manipulate Language數據操縱語言)
INSERT:插入一個數據
INSERT INTO tb_name (col,col2...)VALUES|VALUE ('STRING',NUM...)
INSERT INTO testtable (NAME,Gender) VALUE ('linhuochong','M'),('Xiaolongnv','F');給testtable表中的字段(NAME和Gender)插入數值
INSERT INTO testtable VALUES ('XIAOXIAOZI','LIUSHIER',57,'F');不用指定字段,每個值都對應的指定也行
REPLACE:替換一個數據
UPDATE:修改數據
UPDATE tb_name SET column=valueINSERT INTO testtable VALUES ('XIAOXIAOZI','LIUSHIER',57,'F');
UPDATE tb_name SET column=VALUE;修改某個表中某個字段的全部值
例如:UPDATE testtable SET class='ZTT';
UPDATE tb_name SET column=VALUE WHERE NAME=VALUE;指定修改一直值對應的另一個值 WHERE就是指定選擇條件的
例如:UPDATE testtable SET class='CCY' where NAME='xiaoxiaozi';指定修改testtable中名稱“xiaoxiaozi”應對的class的值
DELETE:刪除數據
DELETE FROM tb_name;刪除表中的所有行
DELETE FROM tb_name WHERE NAME='XIAOXIAOZI';刪除表中有XIAOXIAOZI的行
DDL(Data Definition Language數據定義語言)
CREATE:創建數據庫創建表
CREATE DATABASE db_name;創建數據庫
SHOW DATABASES;顯示數據庫
CREATE DATABASE IF NOT EXISTS db_name;如果不存在次數據庫就創建,不會出現爆錯的情況
DROP DATABASE db_name;刪除一個數據庫
USE db_name;切換進一個數據庫中
CREATE TABLE tb_name(NAME CHAR{20},col2{屬性},...);創建一個表,並定義表中每個字段的屬性
CREATE TABLE db_name.tb_name (col1{屬性},col2{屬性},...)
例如:CREATE TABLE testdb.testtable(NAME CHAR(5) NOT NULL,Age TINYINT UNSIGNED,Gender CHAR(1) NOT NULL);
在數據庫testdb中創建一個testtable表,表中的第一個字段爲姓名最多可填寫5個字符,第二字段爲年齡不能有負數
第三個字段爲性別至少一個字符不能爲空
SHOW TABLES;查看指定數據庫中的表----->SHOW TABLES FORM db_name;查看某個數據庫中的表
查看錶的結構:DESC tb_name;
DROP TABLE {IF EXSTIS}tb_name;刪除表 ***此操作不可逆
ALTER:修改數據庫修改表 *** 在mysql中使用 help alter(command)獲取命令幫助
ALTER TABLE tb_name:修改表名稱的
MODIFY 修改某個字段的屬性
CHANGE 改變某個字段的名稱
例如改變字段名稱:ALTER TABLE testtable CHANGE Class class CHAR(10) AFTER NAME;修改testtables中的字段名稱,並放在name字段後面
ADD 添加字段
例如添加一個字段:ALTER TABLE testtable ADD (class CHAR(10)NOT NULL);在testtable表中新添加一個字段
DROP 刪除字段
DROP:刪除數據庫刪除表
也可用於索引(index)
DCL(Data controller Language數據控制語言)
CREATE USER:創建用戶
CREATE USER 'USERNAME'@'HOST' IDENTIFIED BY 'PASSWORD';創建一個新的用戶並添加密碼
DROP USER 'USERNAME'@'HOST';刪除一個用戶 *** jerry@localhost,[email protected]這不是同一個用戶
HOST表示法:HOST,IP,NETWORK,通配符:‘_’匹配單個字符;‘%’任意長度的任意字符
GRANT:給用戶授權
GRANT pri1,pri2,....ON db_name.tb_name TO 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD'];將那個庫中的那個表的多個權限賦予給用戶,並設置密碼;用戶如果不存在將自動創建
REVOKE:取回用戶權限
REVOKE pri1,pri2,....ON db_name.tb_name TO 'USERNAME'@'HOST';收回用戶對那個表中的那個庫的權限
SHOW GRANTS FOR 'USERNAME'@'HOST'顯示用戶所具有的權限
ALL PRIVILEGES:所有權限
GRANT ALL PRIVILEGES ON testdb.* TO 'song'@0.0.0.0;將所有的權限賦予給song賬號
SELECT:搜索
SELECT 字段 FORM tb_name WHERE column=VALUE(匹配條件)
*:所有字段
WHERE:沒有條件,顯示所有行
DBMS的優勢:
①數據管理的獨立性,數據表達和存儲可以分開
②有效的完成數據存取,而不要每次的操作對整個數據做掃描
③數據的完整性和安全性
④數據的集中管理
⑤能夠實現併發存儲和備份恢復
⑥減少應用程序的開發時間,縮短應用程序的開發週期
關係型數據庫內部應該有的基本組件有:
①詞法語法分析
②計劃執行器,分析的結果要生成執行計劃(可能有多種執行方式)
③優化器執行優化
④文件的存取方法
⑤緩存器,將文件讀進緩存器才能執行操作的
⑥磁盤空間管理器,定義數據的存儲位置
⑦故障恢復管理器
⑧事務管理器
⑨鎖管理器
Mysql關係型數據庫詳解:
監聽在TCP/3306端口,運行身份:mysql,mysql
mysql分爲兩類:
Community Edtion:社區版
MySQL Cluster:mysql集羣
MySQL Workbench:mysql的語句生成器,語句執行分析器;是一個統一的圖形化的工具
MySQL Connectors:mysql的連接器
Enterprise Edtion:企業版
mysql軟件包的安裝的三種方式:
軟件包管理器特有的格式
rpm包 .exe .msi
yum install -y mysql-server 自動解決依賴關係
安裝完有一個初始化的過程:建立mysql的源數據庫的
mysql命令
-u 指定數據庫的用戶
-p 指定密碼
-h 指定主機 如果是127.0.0.1那麼使用的是本地的套接字文件/var/lib/mysql/mysql.sock鏈接的,所以速度快的多,別的都用TCP/IP協議鏈接
退出mysql的命令:exit quit \q 都行
MYSQL中的用戶名是由兩段組成的:用戶名@指定的主機可以對後面的主機做權限設定
任何一個關係型數據庫,都應該提供自己的sql接口,sql接口實現的時候都應該遵循某一中規範,並對其進行擴展
Oralce數據庫的接口:PL/SQL支持強大的編程功能
sqlserver的數據庫接口:T-SQL
mysql的客戶端有兩種模式:
①交互式模式
客戶端命令:\h顯示的都是客戶端的命令
服務器端命令;需要在服務器執行的命令,所有服務器端命令必須使用語句結束符默認是(;)
②批處理模式:執行mysql腳本的
關係型數據庫的對象:
①表:行和列組成;行(row)每一行是一個實體集;列(field,column),每一列是一個字段
字段名稱,數據類型(字符和數字),類型修飾(類似於約束)
字符
CHAR(N)佔用N個空間,不管用還是沒用
VARCHAR(N)可變長度的字符:按實際的佔用比
BINARY(N)區分大小寫的二進制字符
VARBINARY(N)可變長的二進制字符
TEXT(N)明確說明存儲多大長度的文本
BLOB(N)二進制的大對象
數值
精確數值
整型
TINYINT:微整型一個字節的變化
SMALLINT:小整型兩個字節
MEDIUMINT:三個字節
INT:四個字節
BIGINT:八個字節
修飾符:UNSIGNED,無符號
NOT NULL 不允許爲空
十進制
DECIMAL
近似數值
浮點型
FLOAT
DOUBLE
日期時間型
DATE
TIME
DATETIME
STAMP
布爾型
內置類型:ENUM(枚舉類型,最多隻接受集中類型,其它的都不接受), SET
②索引
③視圖
④約束
⑤存儲過程
⑥存儲函數
⑦觸發器:做主動數據庫
⑧遊標:C語言編程用到
⑨權限、用戶、事物
通用二進制格式
源碼編譯
我們在表中完成操作的時候主要有兩種操作:
選擇:指定某字段作爲搜索碼,做邏輯比較,篩選符合條件的行
投影:以列的方式顯示的
www.php.net:php的官方站點