Linux LAMP(二)
PHP配置文件(php.ini):
配置文件php.ini在PHP启动时被读取。对于服务器模块版本的PHP,仅在web服务器启动时读取一次。对于CGI和CLI版本,每次调用都会读取;
ini格式:
[SECTION1_NAME]:段名
PARA1= :参数
...
[SECTION2_NAME]:段名
PARA1= :参数
…
以“;”为注释符;
php.ini核心配置选项:http://php.net/manual/zh/ini.core.php
php.ini配置选项列表:http://php.net/manual/zh/ini.list.php
mariadb(mysql):关系型数据库的一种开源实现;
相关概念:
1. Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。
2. Database:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。
3. DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。
4. DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
原文:https://blog.csdn.net/dianxin113/article/details/77073625
数据结构模型:层次模型,网状模型,关系模型
关系模型:
二维关系:row(行),column(列)
关系数据库设计范式介绍:
1.第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
2.第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖于主键。
3.第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
原文:http://www.blogjava.net/xzclog/archive/2009/01/04/249711.html
事务:将多个操作当作一个整体对待;比如将转账的转和收看作是一个事务,避免转帐过去了但是由于主机宕机没有收到的问题;
ACID:
A:原子性
C:一致性
I:隔离性
D:持久性
SQL:Structure Query Language,结构化查询语言;
数据库存储协议:应用层协议,C/S
S:server,监听于某个套接字,接受并处理客户端的应用请求;
C:client
程序接口:CLI,GUI
应用编程接口:通常表现为一个库,允许客户端通过特定协议与服务器交互;
ODBC:Open DataBase Connection,开放数据库系统互联;
基本概念:
约束:constraint,要求向数据表提供的数据要遵循一定的规则;比如只可以填整型或者年龄不可以超过500年;
主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行且不能为空;
惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行,可为空;
外键:一个表中的某字段可填入数据取决于另一个表的主键已有的数据;
索引:将表中的一个或多个字段中的数据复制一份另存,并且将这些数据按特定次序存储;
关系运算:
选择:挑选出符合条件的行(部分);
投影:挑选出符合条件的字段;
连接:左外,右外,笛卡尔乘积等;
数据抽象:
物理层:决定数据的存储格式,即RDBMS在磁盘上如何组织文件;例如:是多表一个文件还是一表一文件;
逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系;
视图层:描述DB中的部分数据;
关系模型的分类:
基本关系模型
实体-关系模型
基于对象的关系模型
半结构化的关系模型
安装MySQL:
源代码:编译安装
二进制格式的程序包:展开至特定路径,经过简单配置后即可使用;
包管理器管理的数据包:
rpm:
OS Vender
项目官方
deb
MariaDB的特性:
插件式存储引擎(“表类型”):存储管理器有多种实现版本,功能、特性以及性能可能均略有差别;用户可根据需要灵活选择;
1.跟多的存储引擎:
MyISAM→ Aria
InooDB(支持事物) →XtraDB
2.诸多扩展可新特性
3.提供了较多的测试组件
4.truly open source
官网描述:https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/
安装和使用MariaDB
之前的博客LAMP(一)已经讲了在Centos7中安装mariadb,这次我们使用Centos6演示安装mariadb
使用通用二进制格式安装:
如果主机上已经安装了mysql服务需要先停止服务,然后卸载mysql-server即可(rpm -e mysql-server);为了避免发生冲突;
1.首先在官网下载mariadb,我使用的是mariadb-5.5.62-linux-x86_64
https://downloads.mariadb.org/
2.创建mysql用户和mysql组
useradd -r -m -d /home/mysql/ -s /sbin/nologin mysql
groupadd -r mysql
3.将下载的安装包解压到/usr/local
tar -xf mariadb-5.5.62-linux-x86_64.tar.gz -C /usr/local/
4.在/usr/local下为刚刚解压出来的mariadb目录创建一个软链接
ln -sv mariadb-5.5.62-linux-x86_64/ mysql
5.进入mysql目录
cd /usr/local/mysql
6.更改目录中文件的属主为root属组为mysql
chown -R root:mysql ./*
其中data目录就是存放mariadb数据库中的数据的,但是通常我们是不会将数据存放在这个目录中的,因为mariadb中存放的数据量是非常大的,且/usr/local是存放一些自安装软件的数据的,所以我们通常都另外设定一个目录,最好是使用单独硬盘;
7.生成存放数据库元数据的目录
mkdir /home/mysql/mysqldata
chown mysql:mysql /home/mysql/mysqldata
scripts/mysql_install_db –help(查看帮助信息)
--basedir=path:指明mysql的安装目录
--datadir=path:指明数据存放位置
--user=user_name:以那个用户的身份来安装
--defaults-extra-file=name:指明额外配置文件路径
scripts/mysql_install_db --user=mysql --datadir=/home/mysql/mysqldata
对于mysql来说每一个数据库就是数据库路径中的一个子目录;
8.创建mariadb的服务启动脚本
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
9.mariadb的配置文件
配置文件格式:类ini格式,为各程序均通过单个配置文件提供配置信息;
[prog_name]
查找顺序:/etc/my.cof → /etc/mysql/my.cnf → --default-extra-files=/PATH/TO/CONF_FILE → ~/.my.cnf
如果上面多个文件同时出现,最后的配置文件将生效;
10.创建一个配置文件
mkdir /etc/mysql
cp support-files/my-large.cnf /etc/mysql/my.cnf
vim /etc/mysql/my.cnf
# The MariaDB server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
datadir = /home/mysql/mysqldata
innodb_file_per_table = on
skip_name_resolve = on
带颜色的三行是需要自己添加的
mysql中有一个是专门用来存放数据库元数据的目录,它包括当前数据库中有多少用户、每个用户有什么权限、有多少各库、每个库叫什么名字、每个库中有多少张表、每个表有多少字段、字段名字是什么等等等;
MariaDB的程序组成:在/usr/local/mysql/bin中
Client:
mysql:CLI交互式客户端程序;
mysqldump,mysqladmin,…
Server:
mysqld_safe
mysql
mysql_multi
服务器监听的两种socket地址:
ip socket:监听在tcp的3306端口,支持远程通信;
unix sock:监听在sock文件上(/tmp/mysql.sock(通用二进制格式安装),/var/lib/mysql/mysql.sock(rpm方式安装)),仅支持本地通信;
server:localhost,127.0.0.1
命令行交互式客户端程序:mysql
-u username:用户名,默认为root
-p password:密码,默认为空
-h host:服务器主机地址,默认为localhost;
直接键入mysql命令表示连入本机的127.0.0.1的unix sock文件,而且用户名为root,密码为空(NULL);
Note:mysql用户帐号由两部分组成:’USERNAME’@’HOST’:表示指定的用户只能通过指定的主机登陆数据库;HOST用于限制此用户可通过哪些主机远程连接mysql服务,支持使用通配符;
%:匹配任意长度的任意字符;
_:匹配任意单个字符;
命令类型:
客户端命令:本地执行
mysql>help
每个命令都有完整形式和简写形式;
status,\s,…
服务器端命令:通过mysql协议发往服务器执行并取回结果;
每个命令都必须有命令结束符,默认为分号;
SELECT VERSION();
mysql的安全初始化:mysql_secure_installation
运行:/usr/local/mysql/bin/mysql_secure_installtion
接下来是一些交互过程,根据情况填写即可;
关系型数据库的常见组件
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
调用之后没有返回结果;
存储函数:function
调用之后有返回结果;
触发器:trigger,首先会注册一个监听器,监听某一事件,比如某一张表,一旦某一个对应的数据发生了改变,就会触发相应的代码片段,使之执行;比如在表中插入一行,就会马上记录谁在表中插入了一行什么,像这种触发额外代码执行的就叫做触发器;
事件调度器:event scheduler,类似Linux中的周期性任务计划;
SQL语句:
DDL:Data Definition Language,数据定义语言
用来创建或删除上面介绍的数据库组件的;
命令:CREATE,DROP,ALTEN等
DML:DATA Manipulation Language,数据操纵语言
用来向表中插入、删除和查询数据的;
命令:INSERT,DELETE,UPDATA,SELECT等
跟授权有关的命令:GRANT,REVOKE
数据库:mysql数据库是没有回收站的,也就是说一旦删除只能根据备份数据来恢复;
CREATE DATABASE|SCHEMA ‘DB_NAME’;
DROP DATABASE|SCHEMA ‘DB_NAME’;
CHARACTER SET ‘charcher set name’:指明使用的字符集;
显示支持的字符集:SHOW CHARACTER SET;
COLLATE ‘collate name’:指明排序规则;
显示支持的排序规则:SHOW COLLATION;
获取命令使用帮助:mysql>HELP KEYWORD;
查看数据库:SHOW DATABASES;
表:
CREATE TABLE tb_name (col1(字段) datatype(数据类型) 修饰符,col2 datatype 修饰符) ENGINE=’‘;(存储引擎)
查看所有的存储引擎:SHOW ENGINES;
例子:CREATE TABLE tbl1 (id int NOT NULL ,name VARCHAR(100) NOT NULL ,age tinyint);
查看表:SHOW TABLES [FROM db_name];
查看表结构:DESC [db_name.]tb_name;
删除表:DROP TABLE [IF EXISTS] tb_name;
数据类型:
字符型
定长字符型:CHAR(#)(不区分大小写),BINARY(#)(区分大小写)
变长字符型:VARCHAR(#)(不区分大小写),VARBINARY(#)(区分大小写)
对象格式存储:
TEXT:不区分字符大小写
BLOB:区分字符大小写
内置类型:
ENUM:枚举
SET:集合
数值型
精确数值型
整形:int
tinyint:1byte
smallint:2bytes
mediumint:3bytes
int:4bytes
bigint:8bytes
十进制:decimal
近似数值型
单精度浮点型:float
双精度浮点型:double
修饰符:
NOT NULL:非空约束
DEFAULT VALUE:设定默认值
注:根据马哥视频做的学习笔记,如有错误欢迎指正;侵删;