PHP
php解釋器
配置文件:/etc/php.ini, /etc/php.d/*.ini
配置文件(php.ini)在PHP啓動時被讀取。對於服務器模塊版本的PHP,僅在web服務器啓動時讀取一次。
對於CGI和CLI 版本,每次調用都會讀取。
ini:
[Foo]: Secion Header
directive = value
; 分號 : 註釋符;
php.ini核心配置選項:http://php.net/manual/zh/ini.core.php
php.ini配置選項列表:http://php.net/manual/zh/ini.list.php
mariadb(mysql):
數據結構模型:層次模型、網狀結構、關係模型
關係模型:
二維關係:row, column
數據庫管理系統:DBMS
關係:Relational,RDBMS
補充材料: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的基礎上,任何非主屬性不得傳遞依賴於主屬性。
事務:多個(寫)操作被當作一個整體對待
ACID 數據庫事務正確執行的四個基本要素 :
A: 原子性;
C:一致性;
I: 隔離性;
D:持久性;
SQL:結構化查詢語言
數據存儲協議:爲應用層協議,C/S模式
S: server ,監聽與套接字,接收並處理客戶端的應用請求
C: Client , 分爲 程序接口(CLI , GUI),應用編程接口( ODBC )
數據庫基礎概念
約束: constraint,向數據表提供的數據要遵守的限制
主鍵:一個或多個字段的組合,填入的數據必須能在本表中唯一標識本行;必須提供數據,即NOT NULL; 一個表只能有一個主鍵 惟一鍵:一個或多個字段的組合,填入的數據必須能在本表中唯一標識本行;允許爲NULL;可以有多個唯一鍵 外鍵:一個表中的某字段可填入數據取決於另一個表的主鍵已有的數據; 檢查性:MYSQL 還不能支持此約束
索引: 將表中的一個或多個字段中的數據複製一份另存,並且此些需要按特定次序排序存儲;
關係運算: (如何將兩張表連起來,或者在一張表中抽取數據子集)
選擇:挑選出符合條件的行(部分)
投影: 挑選出需要的字段(列)
連接
數據抽象
物理層(最底層): 決定數據的存儲格式,即RDBMS在磁盤上如何組織文件 邏輯層: 描述DB存儲什麼數據,以及數據間存在什麼樣的關係 視圖層(最高層): 描述DB中的部分數據
MariaDB的特性:
插件式存儲引擎:存儲管理器有多種實現版本,功能和特性可能均略有差別;用戶可根據需要靈活選擇;
存儲引擎也稱之爲“表類型”
(1) 更多的存儲的存儲引擎
MyISAM --> Aria,
InnoDB --> XtraDB
(2) 諸多擴展和新特性
(3) 提供了較多測試組件
(4) truly open source
安裝和使用MariaDB (本次試驗在MageCentos3上做的)
CentOS 7直接提供;
CentOS 6:
通用二進制格式安裝過程:
安裝過程:
1.停止mysql服務:]# service mysqld stop
2.刪除以前的mysql ~]# rpm -e mysql-server
3.在教室 進入ftp服務器下載
]# lftps cd Source/6.x86_64/ ls cd mariadb/ ls mget mariadb-5.5.43-linux-x86_64.tar.gz PS:x86或x86_64 如果有這些,證明是2進制包,直接解壓即可使用 Bye
注意:本次實驗用的包是從網上下的地址是 http://ftp.vim.org/db/mariadb/mariadb-5.5.43/bintar-linux-x86_64/ 之後通過xshell從windows傳到linux上。
4.在根目錄下查看 ]# ls -ls 該壓縮包大概212M
5.創建用戶
]# groupadd -r mysql
6.展開數據包
]# tar xf mariad-5.5.43-linux-x86_64.tar.gz -C /usr/local 之後查看那下 ]# cd /usr/local/ ]# ll
7.創建一個連接
]#ln -sv mariadb-5.5.43-linux-x86_64 mysql 之後查看那下 ]# ll ]#cd mysql/ ]#ll ]# chown -R root:mysql ./* 把mysql目錄下的所有文件的屬組改爲mysql ]#ll
8.創建一個新分區(回顧以前內容)
~]#fdisk /dev/sda Command (m for help): p Command (m for help): n p Partition number (1-4): 3 First cylinder (7859-13054, default 7859): Last cylinder, +cylinders or +size{K,M,G} (7859-13054, default 13054): +20G Command (m for help): w 多執行幾次這個命令 ~]# partx -a /dev/sda ~]#fdisk /dev/sda Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes): 8e Command (m for help): w 多執行幾次這個命令 ~]# partx -a /dev/sda ~]#pvcreate /dev/sda3 ~]#vgcreate myvg /dev/sda3 ~]#lvcreate -L 10G -n mydata myvg 安裝xfsprogs ]#yum install xfsprogs ~]#modprobe xfs ~]#modinfo xfs 格式化 ~]#mkfs.xfs /dev/myvg/mydata 實現開機自動掛載 ~]# mkdir /mydata 編輯 ~]# vim /etc/fstab 在文件尾部加入這一行 /dev/myvg/mydata /mydata xfs defaults 0 0 ~]#mount -a 輸入mount命令會有這一行 /dev/mapper/myvg-mydata on /mydata type xfs (rw) ]#mkdir /mydata/data ]#chown mysql:mysql data ]#cd /usr/local/mysql/ 在/usr/local/mysql/scripts/ 下有一個 mysql_install_db腳本 使用 ]# scripts/mysql_install_db --help 查看幫助信息 設置初始化的數據安裝目錄 ]#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ 設置mysql服務腳本 在/usr/local/mysql目錄下 ]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld ]#chkconfig --add mysqld ]#chkconfig --list mysqld 出現如下結果,則mysql可開機自啓動 mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
9.準備配置文件
]#mkdir /etc/mysql 在/usr/local/mysql目錄下 ]# cp support-files/my-large.cnf /etc/mysql/my.cnf
thread_concurrency 表示並行線程數,是CPU核心數*2,下圖是本人所用虛擬機MaGeCentos3的處理器核心數
]# vim /etc/mysql//my.cnf 後,做出如下修改
thread_concurrency= 2 datadir= /mydata/data innodb_file_per_table= on skip_name_resolve= on 之後重啓服務 ]# service mysqld start 使用命令]# ss -tnl 查看3306端口被啓用
MariaDB的程序組成:
客戶端:mysql:CLI交互式客戶端程序;mysqldump, mysqladmin...
服務器端:mysqld_safe、mysqld、mysqld_multi
服務器監聽的兩種socket地址:
ip socket: 監聽在tcp的3306端口,支持遠程通信
unix sock: 監聽在sock文件上(/tmp/mysql.sock, /var/lib/mysql/mysql.sock),僅支持本地通信;server: localhost, 127.0.0.1
命令行交互式客戶端程序:mysql
mysql
-uUSERNAME: 用戶名;默認爲root
-hHOST: 服務器主機; 默認爲localhost
-pPASSWORD:用戶的密碼; 默認爲空密碼 (-p後面一般不輸入密碼,直接回車)
注意: mysql用戶賬號由兩部分組成:'USERNAME'@'HOST';其中HOST用於限制此用戶可通過哪些主機遠程連接mysql服務
%: 匹配任意長度的任意字符;172.16.0.0/16, 172.16.%.%
_: 匹配任意單個字符
登陸例子: 在Magecentos3 密碼是mageedu [root@localhost~]# mysql -uroot -p Enter password:
命令
客戶端命令:本地執行
mysql> help
每個命令都完整形式和簡寫格式;status, \s
服務端命令:通過mysql協議發往服務器執行並取回結果
每個命令都必須命令結束符號;默認爲分號;
如何安全的初始化:
第一步:
第三步:刪除匿名用戶
第四步:禁止root用戶遠程登錄 (此次未禁止)
此時,再進入數據庫可以看到匿名用戶已經被刪除,並加了密碼
mysql> use mysql Database changed mysql>select User,Host,Password FROM user; +------+-----------+-------------------------------------------+ | User | Host | Password | +------+-----------+-------------------------------------------+ | root | localhost | *9A94EE7D14C10908118B62D2DA88E6932E11E438 | | root | bogon | *9A94EE7D14C10908118B62D2DA88E6932E11E438 | | root | 127.0.0.1 | *9A94EE7D14C10908118B62D2DA88E6932E11E438 | | root | ::1 | *9A94EE7D14C10908118B62D2DA88E6932E11E438 | +------+-----------+-------------------------------------------+
命令:
客戶端命令:本地執行
mysql> help
自加:help命令查詢所有可以執行的客戶端命令
服務端命令:通過mysql協議發往服務器執行並取回結果;每個命令都必須命令結束符號;默認爲分號;
自加:SELECT VERSION();查看MariaDB的版本號 mysql>SELECT VERSION(); +--------------------+ |VERSION() | +--------------------+ |5.5.43-MariaDB-log | +--------------------+ 1 row in set (0.00 sec)
關係型數據庫常見組件:
數據庫:database
表:table
行:row
列:column
索引:index
視圖:view
用戶:user
權限:privilege
存儲過程:procedure
存儲函數:function
觸發器:trigger
事件調度器:event scheduler
SQL語句:分爲:DDL:數據定義語言(CREATE, DROP, ALTER);DML:數據操作語言(INSERT, DELETE, UPDATE, SELECT)。另外兩個命令 GRANT, REVOKE
數據庫:
創建數據庫 CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
刪除數據庫 DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
自加:注意,mysql沒有回收站,一旦刪除,數據會從磁盤抹去,無法恢復
在創建數據庫語句後面也可以跟上 以下語句:
CHARACTER SET 'character set name' | COLLATE 'collate name'
查看支持所有字符集:SHOW CHARACTER SET;
查看支持所有排序規則:SHOW COLLATIONS;
查看數據庫:mysql> SHOW DATABASES;
表(對於表的操作)
CREATE TABLE tb_name (字段1 數據類型 修飾符,字段2 數據類型 修飾符 ) ENGINE='' 自加:ENGINE=''是存儲引擎
查看所有的引擎:SHOW
ENGINES;
查看錶:SHOW TABLES [FROM db_name]
查看錶結構:DESC [db_name.]tb_name
刪除表: DROP TABLE [IF EXISTS] tb_name; (刪除不可逆)
數據類型:
字符型:
定長字符型:CHAR(#),BINARY(#)
變長字符型:VARCHAR(#),
內置類型:
ENUM 枚舉類型
SET 集合類型
數值型:
精確數值型
整型:int 分爲(tinyint 1byte;smallint 2bytes;mediumint 3bytes;int 4bytes)
十進制:decimal
近似數值型
單精度浮點數:float
雙精度浮點數:double
修飾符:
NOT NULL 非空約束
DEFAULT VALUE 設定默認值
UNSIGNED 無符號,表示正式
PRIMARY KEY
UNIQUE KEY
例子:
自加:創建一個數據庫 testdb mysql> CRETTE DATABASE testdb; 使用該數據庫 mysql> use testdb; 創建一張表,第一個字段id整型非空,第二個字段name字符型大小100非空,第三個字段age tinyint類型 mysql> CREATE TABLE tb1 (id int NOT NULL, name VARCHAR(100) NOT NULL, age tinyint); 查看錶 mysql> show tables; 查看所有有權限查看的數據庫 mysql> show databases;
自加:創建一張表,名叫student,有3個字段:id無符號整型非空主鍵,name字符型長度20非空,age無符號tinyint非空
mysql>use testdb Database changed mysql>create table student (id int UNSIGNED NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL, age tinyint UNSIGNED); Query OK, 0 rows affected (0.11 sec) mysql>DESC student; +-------+---------------------+------+-----+---------+-------+ |Field | Type | Null | Key Default | Extra | +-------+---------------------+------+-----+---------+-------+ |id | int(10) unsigned | NO | PRI | NULL | | |name | varchar(20) | NO | | NULL | | |age | tinyint(3) unsigned | YES | |NULL | | +-------+---------------------+------+-----+---------+-------+ 3 rows in set (0.24 sec)
創建另一張表,一次定義兩個主鍵
mysql>create table tb2 (id int UNSIGNED NOT NULL, name VARCHAR(20) NOT NULL,age tinyint UNSIGNED, PRIMARY KEY(id,name)); Query OK, 0 rows affected (0.09 sec) mysql>DESC tb2; +-------+---------------------+------+-----+---------+-------+ |Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+-------+ |id | int(10) unsigned | NO | PRI | NULL | | |name | varchar(20) | NO | PRI | NULL | | |age | tinyint(3) unsigned | YES | |NULL | | +-------+---------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
weiwan