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/    之后通过xshellwindows传到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的处理器核心数

LAMP(1)_数据库管理

]# 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_safemysqldmysqld_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协议发往服务器执行并取回结果

        每个命令都必须命令结束符号;默认为分号;

LAMP(1)_解释器_02


如何安全的初始化

第一步:

LAMP(1)_关系数据库_03第二步:设置密码,密码为mageedu

LAMP(1)_解释器_04

第三步:删除匿名用户

LAMP(1)_关系数据库_05

第四步:禁止root用户远程登录 (此次未禁止)

LAMP(1)_数据库管理_06

LAMP(1)_关系数据库_07

此时,再进入数据库可以看到匿名用户已经被删除,并加了密码

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   (字段数据类型  修饰符,字段数据类型  修饰符 )    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 1bytesmallint 2bytesmediumint 3bytesint 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