(MySQL第一天)\LAMP架构

 

(一)再说LAMP架构


  • LAMP架构
资源获取过程:
静态资源:Client – http协议 –> httpd服务器
动态资源:Client – http协议 –> httpd –> PHP(libphp5.so模块) –> mysql协议 –> MySQL服务器
  • httpd + php 的组合方式分类
1:把PHP编译成为httpd的模块,httpd安装libphp5.so模块
2:使用cgi协议
3:使用fastcgi协议
  • PHP执行引擎(不讲,可以了解下)
zend 执行引擎
  • 如何快速部署LAMP
1:CentOS 6: 
1)PHP以模块的形式嵌入httpd
安装: httpd , php, php-mysql , mysql-server
2)PHP以独立的daemon进程运行(FastCGI模式)
安装:httpd , php-fpm, php-mysql , mysql-server


2:CentOS 7:
1)PHP以模块的形式嵌入httpd
安装: httpd , php, php-mysql , mysql-server

2)PHP以独立的daemon进程运行(FastCGI模式)
安装:httpd , php-fpm, php-mysql , mysql-server

  • PHP介绍
1:配置文件
主配置文件:/etc/php.ini
其他配置文件:/etc/php.d/*.ini


2:修改配置文件后,如何重启PHP
对于模块嵌入模式来说:重启httpd服务,因为PHP是httpd的模块
对于FastCGI模式来说:重启php-fpm服务

3:想了解更多PHP服务配置和PHP开发,请移步到
php.ini的核心配置选项文档为:http://php.net/manual/zh/ini.core.php
php.ini的配置选项列表:http://php.net/manual/zh/ini.list.php

(二)MySQL入门

前言:

  • 1:数据库SQL语言
1:DDL:数据定义语言 
create alter drop

2:DML : 数据操作语言
insert delete update select

3:DCL: 数据控制语言
grant revoke
  • 2:DataBase Management System(数据库管理系统) 
    • RDBMS:Relational DataBase Management System(关系型数据库管理系统)
    • MySQL
1:单进程,多线程

2:用户连接:通过线程来实现

3:事物(transaction):简单的说就是将多个操作作为一个原子性整体,要么全部执行,要么都不执行。事物最鲜明的特性就是事物的原子性

4:回滚操作:rollback

5:一个存储系统是否支持事物,测试标准
ACID机制:
A: 原子性
C:一致性
I:隔离性
D:持久性
  • 数据库结构
1:表
为了满足范式的设计,将一个数据集合拆分为多个

2:约束:constraint,向数据表中插入数据要遵循限制规范
主键约束:一个或多个字段的组合,填入主键中的数据必须不同于已经存在的数据,不能为空
唯一键约束:一个或多个字段的组合,填入主键中的数据必须不同于已经存在的数据,可以为空
外键约束:一个表中能够插入的数据取决于另外一张表的主键的数据
自定义约束:取决于表达式的要求

3:索引
将表中的某一个或某些字段抽取出来,单独将其组织在一个独特的数据结构中

4:常用的索引类型
树形机构
hash结构
注意:索引有助于读请求,但不利于写请求

5:关系运算
选择:选择符合条件的行
投影:选择符合条件的字段
连接:将多张表关联起来

6:数据抽象
物理层:决定数据的存储格式,及如何将数据组织成为物理文件
逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系
视图层:描述DB中的部分数据

7:关系模型的分类
关系模型
实体-关系模型
基于对象的关系模型
半结构化的关系模型
  • MySQL的发行版本
1:社区版本
2:企业版本

(三)MySQL安装

前言:

  • Mariadb的安装方式
1:RPM包安装 
(a)发行商提供
(b)RPM包制作者提供

2:源码包

3:二进制程序包安装
  • 使用二进制程序包安装Mariadb
第一步:准备数据库目录
mkdir -pv /mydata/data # 所有的MySQL数据保存在这个目录下
useradd -r mysql # 如果mysql用户存在就不要创建了
chown -R mysql.mysql /mydata/data # 为了mysql能够向目录里面写数据,因此让mysql用户对数据目录具有读写权限

第二步:安装二进制程序包
tar xf mariadb-5.5.54-linux-x86_64.tar -C /usr/local # 解压
cd /usr/local # 切入当前/usr/local
ln -sv mariadb-5.5.54-linux-x86_64 mysql # 制作软连接
cd /usr/local/mysql # 切入mysql二进制程序
chown -R root:mysql ./* # 修改属主和属组
cp support-files/my-large.cnf /etc/my.cnf # 拷贝配置文件
vi /etc/my.cnf 在mysqld下面添加如下指令 # 编辑配置文件
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON
scripts/mysql_install_db --user=mysql --datadir=/mydata/data # 初始化数据库
ll /mydata/data # 查看数据目录是否有数据
cp support-files/mysql.server /etc/rc.d/init.d/mysqld # 拷贝服务启动文件
chkconfig --add mysqld # 使mysqld服务被chkconfig管控

第三步:启动服务
service mysqld start

第四步:将程序路径添加到环境变量
vi /etc/profile.d/mysqld.sh
export PATH=/usr/local/mysql/bin:$PATH
. /etc/profile.d/mysqld.sh # 运行脚本

第五步:
mysql_secure_installation # 运行安全程序

第五步:
  • 简要说明mysql配置文件的读取顺序
/etc/my.cnf -> /etc/my.cnf.d/*.cnf -> ~/.my.cnf

(四)MySQL基础

前言:

  • MySQL的程序组成
1:客户端
mysql:客户端程序
mysqldump:mysql备份工具
mysqladmin:mysql管理工具
mysqlbinlog:二进制日志查询工具

2:服务端
mysqld:服务端程序
mysqld_safe :建议安全运行的服务端程序
mysqld_multi:多实例mysql程序
监听两类套接字地址

3:socket套接字的保存路径
1):RPM包安装的MySQL
/var/lib/mysql/mysql.sock

2):二进制或者源码安装的MySQL
/tmp/mysql.sock(不要把它删除了,我就删除过,使得客户端无法连接服务端)

(五)客户端程序mysql

前言:

  • 使用格式
mysql [选项] [数据库]
  • 常用选项
-h:指定服务端主机地址
-u: 指定登入的用户名
-p:指明密码
-D:指明登入的数据库
-e:连接之后直接运行SQL语句,不进入交互式模式(可以在脚本中使用)
  • 注意点
SQL语句必须以分号结尾

\G:结尾表示以以竖行显示
  • 数据类型
数据类型
char():区分字符大小写,不可变
binary():区分字符大小写 ,不可变
varchar():可变
varbinary():可变
text()
blob()
set()
enum()
int()
float()
double()
decimal()
date()
time()
datetime()
timestamp()

修饰符
unsigned
not null
default
  • SQL语句
DDL:数据库定义语言
create , alter , drop

DML:数据库操作语言
insert , delete , update , select

DCL:数据库控制语言
grant , revoke

获取帮助
例如:help create

查看所支持的字符集
show character set

查看支持排序规则:
show collation

(六)DDL语言打通关

前言:

  • 数据库
创建库
create database uplooking;

删除库
drop database uplooking;

修改库
alter database uplooking character set = utf8

alter database uplooking collate=utf8_general_ci
创建表
create table home (id int not null primary key auto_increment, name varchar(250) not null, class varchar(250) not null);

查看表结构
desc home;

修改表
添加字段:alter table home add gender enum('f','m');
删除字段:alter table home drop gender;
修改字段:
alter table home change name username varchar(100) after id;
alter table home modify username varchar(100) first;
删除表
drop table home;

(七)DML语言打通关

前言:insert, delete, update, select

  • insert
insert into home (class,username) values ('ops', '运维开发'), ('opsdev', '运维开发'), ('开发', 'java开发');
  • update
update home set class = '开发部门' where id = 1;
  • delete
delete from home where class = '开发';
  • select
查询表上的所有的数据
select * from home;

查询部分数据
select id,class from home;
# 还可以取个别名
select id as num,class from home;

使用where子句过滤
# 可以使用的算数运算符:>, < , >=, <=, ==, !=
# 可以使用连接词:and , or
select * from home where id >= 2;
select * from home where id <= 2 and id >1;
select * from home where id between 1 and 2;

# 可以使用like做模糊匹配(%:表示任意长度的字符,_:表示任意单个字符)
select * from home where class like 'ops%';

# 可以使用null对值进行判断
select * from home where id is not null;
select * from home where id is null;

使用order指定排序(默认是asc,升序排列)
select * from home order by id desc;

(八)DCL语言打通关

前言:grant revoke

  • grant
1:先创建用户,再授权
create user yhy@'172.16.19.%' identified by '123456';
grant all on *.* to yhy@'172.16.19.%';
flush privileges;


2:创建用户的同时给用户授权
grant all on *.* to yhy@'172.16.19.%' identified by '123456';
flush privileges;

3:给用户授予某些权限
show grants for yhy@'172.16.19.%';
  • revoke
revoke select ON *.* from yhy@'172.16.19.%';
flush privileges;
  • 查看用户的权限
show grants for yhy@'172.16.19.%';
  • 删除用户
delete from mysql.user where user = "yhy";
flush privileges;

(九)select查询语句详解

前言:

Alt text

1:where子句:指明过滤条件
可以使用的算数运算符:+, -, * ,/ ,= ,!= ,<=, >=
between 较小的数 and 较大的数
in (较小的数,较大的数)
is null 或 is not null
like模糊匹配
例如:
select * from home where id >= 2;
select * from home where id <= 2 and id >1;
select * from home where id between 1 and 2;
select * from home where id in (1,2); # 从1和2中取值
select * from home where class like 'ops%';
select * from home where id is not null;
select * from home where id is null;

2:group by 子句:根据指定的查询条件将查询结构进行分组,用于做聚合运算
使用聚合函数:avg( ) , max( ) , min( ) , count( ), sum( )
select age,gender from students group by gender;
select avg(age),gender from students group by gender;
select min(age), gender from students group by gender;
select max(age), gender from students group by gender;
select count(id), gender from students group by gender;

3:having子句:将分组之后的结果再次过滤
select avg(age) as 'average_age', gender from students group by gender having average_age > 50;

4:order by子句 :根据指定的字段对查询结果进行排序,默认为升序,降序使用关键字desc
select name,age from students order by age desc;

5:limit 子句:对查询的结果进行输出行数的限制
select name,age from students order by age desc limit 8; # 选前8行
select name,age from students order by age limit 4, 2; # 前4个不选,从第五行开始选2行
  • 总结单表查询次序
子句的书写顺序:
where -> group by -> having -> order by -> limit

例如:
select *,avg(score) as '各班平均成绩' from students where id > 1 group by class having avg(score) > 55 order by score desc limit 3 ;
  • 一波小小练习来袭
1:在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄
2:以Class为分组依据,显示每组的平均年龄
3:显示第2题中平均年龄大于50的分组及平均年龄
4:以年龄排序后,显示年龄最大的前6位同学的信息
5:查询年龄大于等于30岁,小于等于74岁的同学的信息,用三种方法
posted @ 2017-08-29 09:25  昌北F4  阅读(122)  评论(0编辑  收藏  举报