php、MySQL

LAMP組合:php

web資源的類型:html

靜態資源:原始形式與響應結果一致;java

動態資源:原始形似一般爲程序文件或者是程序片斷,須要在後臺運行以後將運行結果返回給用戶;在客戶端展現的是程序的運行結果;python

客戶端動態:js(java scripts)mysql

服務器動態:php,jsp,.Net(.asp, .aspx),python,go,perl程序員


CGI:Common Gateway Interface,通用網關接口web


CGI協議是簡裝版的而且有特殊功用的http協議;正則表達式


做用:sql

可讓一個客戶端,從客戶端代理向運行於網絡服務器上的程序傳輸數據;CGI描述了客戶端和服務器程序之間數據傳輸的標準;shell


在整個過程當中,httpd充當了服務器程序的反向代理;


請求流程:

Client(http) --> httpd --> (cgi) --> application process(source code file) --> (mysql) --> MySQL(MariaDB) 


Facebook --> php (hhcp) C++ 


程序=指令+數據


數據模型:層次,網狀,關係


指令:命令、關鍵字、特定代碼;

數據:文件,數據存儲系統的內容;


PHP:腳本編程語言,專門爲web開發而設計,將代碼嵌入html文檔中;


關於PHP


1、PHP簡介

PHP是通用服務器端腳本編程語言,其主要用於web開發以實現動態web頁面,它也是最先實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,所以,其也能夠在大多數系統上做爲一個獨立的shell來使用。


Rasmus Lerdorf於1994年開始開發PHP,它是初是一組被Rasmus Lerdorf稱做「Personal Home Page Tool」 的Perl腳本, 這些腳本能夠用於顯示做者的簡歷並記錄用戶對其網站的訪問。後來,Rasmus Lerdorf使用C語言將這些Perl腳本重寫爲CGI程序,還爲其增長了運行Web forms的能力以及與數據庫交互的特性,並將其重命名爲「Personal Home Page/Forms Interpreter」或「PHP/FI」。此時,PHP/FI已經能夠用於開發簡單的動態web程序了,這便是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP發佈於comp.infosystems.www.authoring.cgi Usenet討論組,今後PHP開始走進人們的視野。1997年,其2.0版本發佈。


1997年,兩名以色列程序員Zeev Suraski和Andi Gutmans重寫的PHP的分析器(parser)成爲PHP發展到3.0的基礎,並且今後將PHP重命名爲PHP: Hypertext Preprocessor。此後,這兩名程序員開始重寫整個PHP核心,並於1999年發佈了Zend Engine 1.0,這也意味着PHP 4.0的誕生。2004年7月,Zend Engine 2.0發佈,由此也將PHP帶入了PHP 5時代。PHP5包含了許多重要的新特性,如加強的面向對象編程的支持、支持PDO(PHP Data Objects)擴展機制以及一系列對PHP性能的改進。


2、PHP Zend Engine


Zend Engine是開源的、PHP腳本語言的解釋器,它最先是由以色列理工學院(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人名字的合稱。後來兩人聯合創立了Zend Technologies公司。


Zend Engine 1.0於1999年隨PHP 4發佈,由C語言開發且通過高度優化,並可以作爲PHP的後端模塊使用。Zend Engine爲PHP提供了內存和資源管理的功能以及其它的一些標準服務,其高性能、可靠性和可擴展性在促進PHP成爲一種流行的語言方面發揮了重要做用。


Zend Engine的出現將PHP代碼的處理過程分紅了兩個階段:首先是分析PHP代碼並將其轉換爲稱做Zend opcode的二進制格式(相似Java的字節碼),並將其存儲於內存中;第二階段是使用Zend Engine去執行這些轉換後的Opcode。


3、PHP的Opcode


Opcode是一種PHP腳本編譯後的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執行PHP腳本代碼通常會通過以下4個步驟(確切的來講,應該是PHP的語言引擎Zend):

一、Scanning(Lexing) —— 將PHP代碼轉換爲語言片斷(Tokens)

二、Parsing —— 將Tokens轉換成簡單而有意義的表達式

三、Compilation —— 將表達式編譯成Opocdes

四、Execution —— 順次執行Opcodes,每次一條,從而實現PHP腳本的功能

hhvm


掃描-->分析-->編譯-->執行


4、php的加速器


基於PHP的特殊擴展機制如opcode緩存擴展也能夠將opcode緩存於php的共享內存中,從而可讓同一段代碼的後續重複執行時跳過編譯階段以提升性能。由此也能夠看出,這些加速器並不是真正提升了opcode的運行速度,而僅是經過分析opcode後並將它們從新排列以達到快速執行的目的。


常見的php加速器有:


一、APC (Alternative PHP Cache)

遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用於PHP 5.4。項目地址,http://pecl.php.net/package/APC。


二、eAccelerator

源於Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,目前encoder已經不在支持。項目地址, http://eaccelerator.net/。


三、XCache

快速並且穩定的PHP opcode緩存,通過嚴格測試且被大量用於生產環境。項目地址,http://xcache.lighttpd.net/


四、Zend Optimizer和Zend Guard Loader

Zend Optimizer並不是一個opcode加速器,它是由Zend Technologies爲PHP5.2及之前的版本提供的一個免費、閉源的PHP擴展,其可以運行由Zend Guard生成的加密的PHP代碼或模糊代碼。 而Zend Guard Loader則是專爲PHP5.3提供的相似於Zend Optimizer功能的擴展。項目地址,http://www.zend.com/en/products/guard/runtime-decoders


五、NuSphere PhpExpress

NuSphere的一款開源PHP加速器,它支持裝載經過NuSphere PHP Encoder編碼的PHP程序文件,並可以實現對常規PHP文件的執行加速。項目地址,http://www.nusphere.com/products/phpexpress.htm


5、PHP源碼目錄結構


PHP的源碼在結構上很是清晰。其代碼根目錄中主要包含了一些說明文件以及設計方案,並提供了以下子目錄:


一、build —— 顧名思義,這裏主要放置一些跟源碼編譯相關的文件,好比開始構建以前的buildconf腳本及一些檢查環境的腳本等。

二、ext —— 官方的擴展目錄,包括了絕大多數PHP的函數的定義和實現,如array系列,pdo系列,spl系列等函數的實現。 我的開發的擴展在測試時也能夠放到這個目錄,以方便測試等。

三、main —— 這裏存放的就是PHP最爲核心的文件了,是實現PHP的基礎設施,這裏和Zend引擎不同,Zend引擎主要實現語言最核心的語言運行環境。

四、Zend —— Zend引擎的實現目錄,好比腳本的詞法語法解析,opcode的執行以及擴展機制的實現等等。

五、pear —— PHP 擴展與應用倉庫,包含PEAR的核心文件。

六、sapi —— 包含了各類服務器抽象層的代碼,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。

七、TSRM —— PHP的線程安全是構建在TSRM庫之上的,PHP實現中常見的*G宏一般是對TSRM的封裝,TSRM(Thread Safe Resource Manager)線程安全資源管理器。

八、tests —— PHP的測試腳本集合,包含PHP各項功能的測試文件。

九、win32 —— 這個目錄主要包括Windows平臺相關的一些實現,好比sokcet的實如今Windows下和*Nix平臺就不太同樣,同時也包括了Windows下編譯PHP相關的腳本。


LAMP:

L:Linux

A:Apache(httpd)

M:MySQL(MariaDB)

P:php/perl/python/ruby


httpd與php的結合方式:

CGI:httpd主進程管理php進程;

module:將php編譯爲httpd的擴展模塊;

MPM:

prefork:libphp5.so

event[,worker]:libphp5-zts.so

FastCGI:

fpm


LAMP的實現方式:

httpd(prefork) + libphp5.so + mysql

httpd(event) + libphp5-zts + mysql

httpd + php-fpm + mysql --僅在httpd2.4版本中能夠支持


LAMP(2)


數據庫管理系統——DBMS

RDBMS:表,行(實例,實體或記錄)和列(字段,域)


ANSI:SQL系列標準

SQL-86

SQL-89

SQL-99

SQL-03


補充材料:RDMBS設計範式基礎概念


設計關係數據庫時,聽從不一樣的規範要求,設計出合理的關係型數據庫,這些不一樣的規範要求被稱爲不一樣的範式,各類範式呈遞次規範,越高的範式數據庫冗餘越小。


目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。知足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步知足更多規範要求的稱爲第二範式(2NF),其他範式以次類推。通常說來,數據庫只需知足第三範式(3NF)就好了。


(1) 第一範式(1NF)


所謂第一範式(1NF)是指在關係模型中,對域添加的一個規範要求,全部的域都應該是原子性的,即數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。即實體中的某個屬性有多個值時,必須拆分爲不一樣的屬性。在符合第一範式(1NF)表中的每一個域值只能是實體的一個屬性或一個屬性的一部分。簡而言之,第一範式就是無重複的域。


說明:在任何一個關係數據庫中,第一範式(1NF)是對關係模式的設計基本要求,通常設計中都必須知足第一範式(1NF)。不過有些關係模型中突破了1NF的限制,這種稱爲非1NF的關係模型。換句話說,是否必須知足1NF的最低要求,主要依賴於所使用的關係模型。


(2) 第二範式(2NF)


第二範式(2NF)是在第一範式(1NF)的基礎上創建起來的,即知足第二範式(2NF)必須先知足第一範式(1NF)。第二範式(2NF)要求數據庫表中的每一個實例或記錄必須能夠被惟一地區分。選取一個能區分每一個實體的屬性或屬性組,做爲實體的惟一標識。


第二範式(2NF)要求實體的屬性徹底依賴於主關鍵字(主鍵)。所謂徹底依賴是指不能存在僅依賴主關鍵字一部分的屬性,若是存在,那麼這個屬性和主關鍵字的這一部分應該分離出來造成一個新的實體,新實體與原實體之間是一對多的關係。爲實現區分一般須要爲表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是在第一範式的基礎上屬性徹底依賴於主鍵。


(3) 第三範式(3NF)


第三範式(3NF)是第二範式(2NF)的一個子集,即知足第三範式(3NF)必須知足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個關係中不能包含已在其它關係已包含的非主關鍵字信息。簡而言之,第三範式就是屬性不依賴於其它非主屬性,也就是在知足2NF的基礎上,任何非主屬性不得傳遞依賴於主屬性。


某公司,員工信息表:

5000人,五個部門,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX市場部


NoSQL:Not-Only SQL

Redis

Memcached

MangoDB

Hbase


關係型數據庫管理系統:

GreSQL,SyBase,DBII,InfoMIX

Oracle


PostGreSQL,MySQL


Unireg,


MySQL AB,Solaris,1994 第一個二進制版本;

http://www.mysql.com


MariaDB,

http://mariadb.org


CentOS 6:mysql-server-5.1

CentOS 7:mariadb-server-5.5


MySQL/MariaDB:

C/S架構,客戶端/服務器架構形式;

C:

命令行客戶端:mysql,mysqladmin

圖形客戶端:phpMyAdmin,SQLyog,navicot,...


S:

mysqld


客戶端到服務器端的鏈接方式:

客戶端和服務器端在同一臺主機上:

1.Unix Sock

2.IPv4的socket

3.IPv6的socket


客戶端和服務器端不在同一臺主機上:

1.IPv4的socket

2.IPv6的socket


MariaDB(MySQL)

數據模型:關係模型,二維關係;


表:row,column

視圖:虛表,view

索引:index

樹型:B-tree

hash:

SQL接口:SQL,Structured Query Language,結構化查詢語言;

分析器,操做求解器,計劃執行器,優化器


相似於OS的shell;也能夠提供編程功能;


能夠被SQL接口處理的SQL語句:

DDL:Data Defined Language,數據定義語言

CREATE,ALTER,DROP

DML:Data Manapulating Language,數據操縱語言

INSERT,DELETE,UPDATE,SELECT

DCL:Data Controlled Language,數據控制語言

GRANT,REVOKE


SQL接口也提供了編程接口:選擇、循環

存儲過程:Storage Procedure <-- call

存儲函數:Storage Function <-- select

觸發器:trigger

事件調度器:event scheduler

例程:routine = 過程 + 函數


事務(Tranaction):組織多個操做爲一個總體,這個總體要麼所有執行,要麼所有不執行;只要有任何操做沒有被成功執行,則整個事務回滾(RollBack);


在MySQL裏面,事務是存儲引擎的屬性;判斷標準,即ACID標準:

A:原子性;

C:一致性;

I:隔離性;

D:持久性;


存儲引擎:表空間,表類型


約束:constraint,向數據表插入的數據所必須遵照的限制規則;

主鍵約束:一個或多個字段構建的可以惟一標識記錄的組合,填入主鍵的數據,必須不能和已經填寫的數據相同,且不能爲空;

外鍵約束:也稱爲"引用性約束",一個表中的某個字段能插入的數據,取決於另一張表的主鍵中的數據;

唯一鍵約束:一個或多個字段構建的可以惟一標識記錄的組合,填入主鍵的數據,必須不能和已經填寫的數據相同,但能夠爲空;

檢查性約束:取決於表達式的要求;


關係運算:

選擇:根據指定的條件挑選出符合條件的行;

投影:根據指定的條件挑選出符合條件的列;

鏈接:多表關聯操做;


數據抽象:

物理層:決定數據的存儲格式,即如何將數據組織成物理文件;

邏輯層:描述了數據庫存儲什麼樣的數據,以及數據之間存在怎樣的關係;

視圖層:描述了數據庫中部分數據;


MySQL和MariaDB:

都支持插入式存儲引擎:

存儲管理器有多種實現版本,彼此間的功能和特性可能略有區別;用戶能夠根據本身的須要靈活選擇;


MariaDB的特性:

1.更多的存儲引擎

MyISAM:不支持事務

MyISAM:Aria

InnoDB:Percona-XtraDB

2.諸多的擴展和新特性;

3.提供了較多的測試組件;

4.truly open source


安裝MariaDB:

1.rpm包

2.OS發行商提供的;

3.官方提供的二進制包;

4.源代碼包


/etc/my.cnf

[mysqld]

innodb_file_per_table = ON

skip_name_resolve = ON


簡要介紹基本SQL語句:


得到幫助:help命令

回顧:

LAMP


LAMP(3)

MariaDB(MySQL)


基本命令:

mysql - 基本的交互式命令行客戶端程序

MySQL的配置文件的生效順序:

/etc/mysql/my.cnf --> /etc/my.cnf --> ~/.my.cnf 


mysql [OPTIONS] [database]

經常使用選項:

-Ddb_name, --database=name:指定鏈接到MySQL服務器端以後所使用的默認數據庫;默認爲NULL;

-e 'SQL COMMAND':鏈接至MySQL服務器並讓服務器執行後面給出的命令以後直接返回bash的命令提示符;

-hHOST:遠程主機,即MySQL服務器的主機名或IP地址;默認是localhost

-p[PASSWORD]:鏈接到遠程MySQL服務器時所使用的密碼,默認爲空密碼;

-PPORT:以指定的端口鏈接至遠程MySQL服務器;默認是3306;

-uUSERNAME:指定鏈接至遠程MySQL服務器時所使用的用戶名;默認爲root;


注意:MySQL的用戶帳號由兩部分組成:'USERNAME'@'HOST'

其中HOST指的是給定的USERNAME用戶名能夠經過哪臺客戶端主機鏈接服務器;


HOST的表示方式,支持使用通配符:

%:表示任意長度的任意字符

_:表示任意單個字符;


'root'@'172.16.%.%'


可使用mysql_secure_installation命令完成MySQL的帳戶安全初始化,使得MySQL只能讓root用戶在本地登陸,而且移除匿名用戶和test數據庫;


mysql的交互式命令:

客戶端命令:mysql程序自身的命令;本地執行;

clear,\c:表示中止發送當前正在鍵入的命令或語句;

delimiter,\dCHAR:設置語句的結束標記;

go,\g:將前面的語句送往服務器執行;

ego,\G:將前面的語句送往服務器執行,將返回結果縱向顯示;

exit,quit,\q:退出mysql程序;

status,\s:獲取服務器的狀態信息;

use,\u:選擇使用指定的數據庫;


服務器命令:經過mysql協議創建的鏈接發送到服務器端執行並返回結果的命令;

DDL,DML,DCL


注意:在執行服務器命令時,每一個語句必須以指定的結束符結尾,默認是";";


DDL:數據定義語言,主要用於管理數據庫的各組件;例如:數據庫,表,索引,視圖,用戶,存儲過程,存儲函數,觸發器,事件等;

經常使用的服務器命令:CREATE建立,ALTER修改,DROP刪除,SHOW


DML:數據操縱語言,主要用於管理表中的數據,實現數據的增、刪、改、查等操做;

經常使用的服務器命令:INSERT,DELETE,UPDATE,SELECT


DCL:數據控制語言,主要用於管理數據的訪問受權;

經常使用的服務器命令:GRANT,REVOKE


獲取幫助:

mysql> help COMMAND_KEYWORD

MariaDB [(none)]> help COMMAND_KEYWORD


數據庫管理:

建立數據庫:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification]


create_specification:

[DEFAULT] CHARACTER SET [=] charset_name 

[DEFAULT] COLLATE [=] collation_name


查看當前MySQL服務器支持的字符集:

mysql> show character set;


查看當前MySQL服務器支持的各字符集對應的排序規則:

mysql> show collation;


修改數據庫的屬性:

ALTER {DATABASE | SCHEMA} [db_name] alter_specification ...


alter_specification ...

[DEFAULT] CHARACTER SET [=] charset_name 

[DEFAULT] COLLATE [=] collation_name


刪除數據庫:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name


表管理:

表:包括行和列

行:實例,實體,記錄,用來描述某個具體事物的某些屬性;對於表來講,表中能夠沒有任何一行,這樣的表稱爲空表;


列:字段,域,用來定義或描述某個具體的屬性;對於表來講,表中至少要有一列屬性,沒有列的表是沒有意義的;


數據類型:

定義數據類型的意義:

1.決定數據的存儲格式;

2.決定數據所能參與的運算;

3.決定數據能夠表示的有效範圍;


數值型:

精確數值型:

INT

TINYINT(1)

SMALLINT(2)

MEDIUMINT(3)

INT(4)

BIGINT(8)


近似數值型:

FLOAT

DOUBLE


字符型:

定長字符型:

CHAR(#):不區分字符大小寫 256

CHAR(30) abc000000000000000000

BINARY(#):區分字符的大小寫 256


變長字符型:

VARCHAR(#):65536

VARCHAR(30) abc$ 

VARBINARY(#):65536


對象存儲:

TEXT:(TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT)

BLOB:(TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB)


內置特殊類型:

SET:集合,能夠從集合中任意選擇字符進行組合;

ENUM:枚舉,只能存放列舉出來的固定的字符或字符串;

ENUM('M','F')


日期時間型:

DATE:日期型 (3Bytes)

TIME:時間型 (3Bytes)

DATETIME:日期時間型 (8Bytes)

TIMESTAMP:時間戳,相對時間,(4Bytes)

YEAR:年份,YEAR(2),YEAR(4)


數據類型相關的修飾符:

與整數有關的:

UNSIGNED,無符號整數;

注意:UNSIGNED必須緊跟在精確數值型的類型標識符以後;

AUTO_INCREMENT [=] value:數值遞加1;


通用修飾符:

NOT NULL:非空約束;

DEFAULT value:爲字段設置默認值;  v            如何【;pihyrwqaQAEGUIOP'[;PIKJGFRWSQ qedghyuo;lkjugfrWQASGHUK,LI98UM JU7HJN Y6下午 7:46 2017/9/6GT5RFCESSXAQ1AW3RGYUIO;/;OKJUHYTRFRGB,LKU8RFGRVGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 


建立表:

CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options]


create_definition:

字段:col_name data_type

鍵:

PRIMARY KEY [(col1,col2,...)]

UNIQUE KEY [(col1,col2,...)]

FOREIGN KEY (column)

索引:

INDEX | KEY (col1,col2,...)


table_options:

ENGINE [=] engine_name


示例:

mysql> create table students (ID tinyint unsigned not null auto_increment primary key,Name char(30) not null,Age tinyint unsigned,Gender enum('M','F'));


刪除表:

DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...


修改表:修改的是各個字段的屬性或定義;

ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]


alter_specification:

添加字段:

ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]


示例:在表中添加新的字段

mysql> alter table students add Class varchar(50) not null;


刪除字段:

DROP [COLUMN] col_name


鍵和索引的管理:

ADD  PRIMARY KEY (index_col_name,...)

ADD  UNIQUE KEY (index_col_name,...)


DROP [PRIMARY] KEY KEY_NAME


示例:

mysql> alter table students add unique key (Age);

mysql> alter table students drop key Age;


修改字段的屬性:

CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]

MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]


示例:

mysql> alter table students modify ID tinyint unsigned not null;

mysql> alter table students change Class Classes char(50) not null;


DML:INSERT,DELETE,UPDATE,SELECT

向表中添加數據信息;

INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} (value1,value2,...),(...),...


注意:

1.若是向表中插入的value是字符串,則value必須使用引號引用;

2.若是向表中插入的value是數字,則必定不能用引號引用;


示例:

mysql> insert into students values (1,'Guo Jing','Gaibang',35,'M');

mysql> insert into students (ID,Name,Classes) values (2,'Zhang Sanfeng',"Wudang"),(3,'Zhang Wuji',"Mingjiao");


查詢表的內容:

SELECT

1.SELECT * FROM tbl_name;

2.投影:SELECT col_name1,col_name2,... FROM tbl_name;

注意:能夠爲指定的字段設置其用於顯示的別名:

col_name AS col_alias 

3.選擇:SELECT * FROM tbl_name [WHERE Clause];

WHERE clause:用於指明選擇時所依賴的條件;

col_name 操做符 value


操做符:

1.比較操做符:<,>,<=,>=,=,==,!=

2.邏輯操做符:and,or,not

3.特殊操做符:

BETWEEN ... AND ...

LIKE "PATTERN":PATTERN中可適當添加通配符,"%"或"_"

RLIKE "PATTERN":使用正則表達式對字符串進行模式匹配;

IS NULL或IS NOT NULL:判斷指定的字段內容是否爲空;

4.排序:SELECT * FROM tbl_name [WHERE Clause] ORDER BY col_name1,col_name2,... [ASC|DESC]


示例:

mysql> select * from students order by age desc;


批量插入用戶:

~]# for I in {4..30} ; do AGE=$[$RANDOM%99+1] ; mysql -p123456 -e "insert into qhdlink.students (ID,Name,Classes,Age) values ($I,\"STU$I\",\"qhdlink\",$AGE);"; done


修改表數據:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... WHERE where_condition [ORDER BY ...] [LIMIT row_count]


示例:

mysql> update students set age=age+5;

mysql> update students set age=age-10 where gender is not null;

mysql> update students set age=age-20 order by age desc limit 5;


根據離散條件選擇:

mysql> select * from students where ID in (2,12,7,10,6);


刪除表數據:

DELETE FROM tbl_name WHERE where_condition [ORDER BY ...] [LIMIT row_count]


示例:

mysql> delete from students where age <= 18;

mysql> delete from students order by id desc limit 5;


注意:

在使用UPDATE和DELETE命令時,必須使用WHERE子句或ORDER BY+LIMIT子句來限定要操做的數據記錄;不然將全表修改或全表刪除;


用戶帳號管理及權限管理:

用戶帳號:'USERNAME'@'HOST'


CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password']

DROP USER 'USERNAME1'@'HOST','USERNAME2'@'HOST',...


DCL:

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...ON [object_type] priv_level TO user_specification [, user_specification] ..


示例:

mysql> grant select ON qhdlink.students to 'linkuser'@'172.16.%.%' identified by 'linkpass';

mysql> grant delete ON qhdlink.students to 'linkuser'@'172.16.%.%' identified by 'linkpass';


REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ...


注意:MySQL或MariaDB,在啓動服務的時候,會讀取mysql數據庫中受權表並加載至內存;

1.若是使用GRANT或REVOKE命令進行受權和收權,此類操做的結果會保存與收權表中,而MySQL或MariaDB會重讀該受權表;

2.其餘方式進行的受權,要想使受權生效, 則必須手動執行重讀受權表的命令:mysql> flush privileges;



LAMP平臺快速架構,httpd和php經過模塊方式通訊的模型:

1.安裝軟件包:

CentOS 7:

yum install httpd  php  php-mysql(接口驅動)  mariadb-server

CentOS 6:

yum install httpd  php  php-mysql  mysql-server


2.建立虛擬主機


3.在MySQL或MariaDB中建立用於測試的帳戶;

mysql> create database wpdb;

mysql> grant all on wpdb.* to 'wpuser'@'172.16.%.%' identified by 'wppass';

4.測試php,測試php和mysql之間的通訊,將如下源代碼複製到以index.php爲文件名的主頁文件中;

測試php:

<?php 

phpinfo();

?>

測試mysql鏈接性:

<?php

$conn = mysql_connect('172.16.100.71','testuser','testpass');

if($conn)

echo "OK";

else

echo "Failure";

?>


5.將某個應用複製到虛擬主機的文檔根目錄中,進行進一步測試;

wordpress

Discuz!

相關文章
相關標籤/搜索