重蔚自留地php学习第三十五天——mysql基础1

文件操作:目录操作,文件操作

目录操作步骤:

  1. 准备一个目录(路径)
  2. 判断一个路径是否是一个目录
  3. 打开目录opendir,返回一个目录资源,包含当前目录下所有的文件
  4. 遍历目录资源,循环+readdir,每次获得一个文件名,将资源指针下移一位
  5. 关闭资源closedir

 

文件操作步骤:

  1. 准备一个文件路径
  2. 判断一个路径是否是一个文件
  3. 打开文件,获得其中内容
  4. a) PHP5:file_get_contents,file将文件按照行进行获取返回一个数组
  5. b) PHP4:打开资源fopen(文件名,Mode),fgetc获取一个字符,fgets获取指定长度或者一行,fread获取指定长度
  6. 写入内容
  7. a) PHP5:file_put_contents(文件名,字符串,Mode),Mode:追加,起始位置插入
  8. b) PHP4:fwrite,fputs,往文件中插入数据(数据插入位置默认由fopen决定)
  9. c) Fseek:将文件的指针指向指定的位置。
  10. 关闭文件,fclose

 

文件操作相关函数

 

Scandir:获取指定目录下所有的文件,以数组形式返回

如果自定义遍历目录?(笔试的时候经常出现)

  1. 写一个函数遍历一个文件夹下的所有文件
Function myScandir($dir = “.”){

//定义一个数组,接收遍历的所有结果

$arr = array();

 

//循环遍历当前文件夹下所有文件

$o = opendir($dir);

While($filename = readdir($o)){

//每次得到一个文件

$arr[] = $filename;

}

 

//返回

Return $arr;

}
  1. 如果当前文件夹内,还有子文件夹,需要进入子文件夹再次进行遍历
//可以采用遍历当前文件夹的内容的形式来判断,但是很难做到全部遍历

Foreach($arr as $value){

//拼凑一个路径

$dir .= ‘/’ . $value;

//判断路径

If(is_dir($dir)){

//是一个路径

$subarr = myScandir($dir);

}

}

 

递归调用函数本身

Function myScandir($dir = “.”){

//定义一个数组,接收遍历的所有结果

Static $arr = array();

 

//循环遍历当前文件夹下所有文件

$o = opendir($dir);

While($filename = readdir($o)){

//将.和..必须去除

If($filename == ‘.’ || $filename == ‘..’)

{

$arr[] = $filename;

}else{

//每次得到一个文件

$arr[] = $filename;

//也许当前文件是一个文件夹,那么需要更深层次的遍历

If(is_dir($dir . ‘/’ . $filename)){

//子文件夹与当前文件夹有同样的结构,只需要调用当前函数本身即可

myScandir($dir . ‘/’ . $filename);

}

}

}

//返回

Return $arr;

}

 

递归:函数内部调用自己

递归有两个要素:递归出口,递归点

递归出口:当条件达到指定要求时,函数不在进行递归调用

递归点:子问题与父问题结构一

Mysql基础知识和应用

Mysql课程体系

Mysql基础知识和应用

这部分最重要,主要了解数据的操作和基本原理

大型数据库优化

主要是讲如何提高数据库的效率,索引,分表(垂直分表,水平分表)

数据库部署

如何对大型数据库进行服务器部署,服务器集群,负载均衡

 

有几个概念需要了解:

数据库:Database存放数据的仓库,高效率存储和处理数据的软件(狭义的理解)

广义的讲,凡是能够存储数据的介质都称之为数据库

数据库管理系统:Database Management System,DBMS,管理数据库的系统

数据库系统:Database System = DBMS + DB

系统管理员:Database Administrator DBA,负责日常数据库的维护(部署)

 

数据库有两大阵营:关系型数据和非关系型数据库

 

关系型数据库:建立在关系模型上的数据库

关系模型:通过数据结构,数据关系,数据约束三部分构成

关系模型可以理解为是一张二维表,关系指的是二维表(实体)内部的数据联系,以及(实体)表与表之间的联系

实体:人类世界中,所能看到的各种单位

 

设计一个教学系统

实体:老师,学生,教室,科目。。。

 

设计一个学生表

学号 姓名 性别 年龄
PHP1001 李商隐 28
PHP1002 屈原 34

 

注意:一个实体创建一张数据表保存,数据表保存的都是一个实体的相关属性,与实体无关的不放到一起

 

设计一个班级表

班级名字 教室名字 开班时间 结束时间
PHP1405 B2302M 20140510 20140925
PHP1402 D306 20140320 20140805

 

班级表里面维护与班级相关的信息

 

实体与实体间的联系

如何将学生和班级进行关联?

学号 姓名 性别 年龄 班级名字
PHP1001 李商隐 28 PHP1405
PHP1002 屈原 34 PHP1402
PHP1003 李清照 PHP1403

 

实体与实体之间,通过某一个关系进行管理。

对应数据表,如果进行关联呢?怎么表示实体与实体之间是有关系的?

在一个实体中,维护一个信息,该信息指向另外一个实体。

 

世面上有哪些关系型数据库?

几乎所有看到数据库都是关系型数据,Mysql,Oracle,SQLServer,Access。。。

 

关系型数据库特点:

  1. 都是保存在硬盘
  2. 都是使用二维表保存数据
  3. 关系型数据库即便表中的某个字段数据不存在,但是数据库也会为该字段保留空间,关系型数据库比较浪费硬盘空间。

 

非关系型数据库:不是关系型数据库的都叫非关系型数据

NOSQL:NOT ONLY SQL

 

非关系型数据库中数据的存在形式

  1. 数据运行在内存中,有一个同步机制,将内存中的内容保存硬盘
  2. 存在形式:以键值对形式存在,学号=>PHP1001

 

非关系型数据:memcache,mongodb,redis

 

关系型与非关系型数据比较:

  1. 非关系型数据库效率高
  2. 关系型数据库更安全

关系型数据库的几个典型概念

行(row):指的是数据表中的横向结构,行也称之为记录(record),表示一条数据(代表一个实体信息)

行和记录没有本质区别,行是从结构的角度出发,记录从数据(内容)角度出发

列(col):指的数据表中的纵向结构,列也称之为字段(field),表示一列数据

列和字段也没有本质区别,一个从结构出发,一个从数据出发

 

SQL:Structured Query language,结构化查询语言。

指的是关系型数据库中对数据库进行管理的语言。SQL虽然是关系型数据库,但是在不同的关系型数据库中有那么一点点微小的区别。

 

SQL:DDL,DML,DCL

DDL:Data Definition Language,数据定义语言,定义结构,通常指的是结构的操作,如数据库的创建和删除,数据表的创建、删除和修改,create,drop

DML:Data Manipulation Language:数据操作语言,对数据的增删改查,查询是一门专门的语言:DQL,Data query Language,数据查询语言,select,insert,update,delete

DCL:Data Control Language:数据控制语言,主要是实现对系统用户的权限管理,grant,revoke,flush

 

Mysql

Mysql是一种关系型数据库,是一种管理数据的软件。

 

软件结构:b/s和c/s

b/s:browser/server,浏览器服务器,指的是只要服务器运行,在客户端(PC)通过浏览器就可以实现访问

c/s:client/server,客户端服务器,如果用户(PC)希望访问服务器,必须要安装对应的客户端,还要保证客户端和服务端同时运行。

飞秋是c/s结构,飞秋已经扁平化了,没有严格的客户端和服务端。

 

Mysql是一种c/s结构

  1. 安装必须要有客户端和服务端,mysql.exe是客户端,mysqld.exe是服务端
  2. 进行通信,必须保证两个端都同时在运行

 

Mysql是如何实现mysql.exe与mysqld.exe进行通信的呢?

  1. 连接认证,客户端发送连接请求,同时服务端对客户端进行身份认证
  2. a) 保证找到对应的服务端:-h host,服务器所在的地址 –hlocalhost,-h192.160.3.1
  3. b) 指定端口,找到对应的应用软件:-P port,端口 –P3306,3306是数据库的默认端口
  4. c) 还要提供身份:用户名和密码,-u username,-p password
  5. d) exe –h192.168.3.1 –P3306 –uroot –proot

重蔚自留地php学习第三十五天——mysql基础1

登录成功

重蔚自留地php学习第三十五天——mysql基础1

  1. 客户端准备和发送SQL语句,发给服务端
  2. 服务端执行SQL语句,将执行结果返回给客户端
  3. 客户端要解析结果,并负责显示

以上三个步骤,是没有办法分离显示,因为操作太快

重蔚自留地php学习第三十五天——mysql基础1

  1. 退出客户端
  2. a) Quit
  3. b) Exit
  4. c) q

重蔚自留地php学习第三十五天——mysql基础1

Mysql操作原理

重蔚自留地php学习第三十五天——mysql基础1

如何维护mysql服务?

  1. 安装的过程中加入到系统服务,系统在启动的时候自动加载mysql服务,在控制台运行

在windows下,服务的管理,使用命令:net [stop,start,restart] [服务名]

关闭mysql服务:net stop mysql

重蔚自留地php学习第三十五天——mysql基础1

开启mysql服务:net start mysql

重蔚自留地php学习第三十五天——mysql基础1

  1. 进入服务列表进行操作

重蔚自留地php学习第三十五天——mysql基础13.Mysqld.exe的启动

重蔚自留地php学习第三十五天——mysql基础1

 

Mysql服务端,用户没有办法直接查看里面到底有哪些东西。

Mysql服务端有四层对象

重蔚自留地php学习第三十五天——mysql基础1

服务端:最终管理数据,数据最终是落到字段上进行管理

SQL基本操作

基本操作指的是增删改查:C(create新增)R(read/retrieve,查询)U(update修改)D(delete删除)

库操作

创建数据库

语法:create Database 数据库名字 [库选项]

库选项

字符集:charset/character set,指定数据库内容的编码

校对集:collate,指的是数据库数据的比较方式

重蔚自留地php学习第三十五天——mysql基础1

这条语句执行后,mysql服务端做了哪些工作?

  1. 在服务器端的数据文件夹内创建一个名为shop的文件夹

重蔚自留地php学习第三十五天——mysql基础1

如何找到该路径呢?

My.ini文件中的datadir配置项

  1. 创建一个库选项文件,在对应的数据库文件夹里,有一个db.opt文件,保存数据库的库选项

重蔚自留地php学习第三十五天——mysql基础1

内容就是保存的库选项

重蔚自留地php学习第三十五天——mysql基础1

数据库命名规则

1.使用字母,下划线和数字来命名,通常,以字母开头(数据库名字命名并没有非常严格的要求)

重蔚自留地php学习第三十五天——mysql基础1

2.如果出现关键字或者保留字当做数据库名字,应当使用反引号对库名进行包裹,反引号是esc下面的那个键,在英文输入状态下输出的内容

Syntax错误:语法错误,提示错误的范围

重蔚自留地php学习第三十五天——mysql基础1

正确使用

重蔚自留地php学习第三十五天——mysql基础1

  1. 数据可以使用中文做名字,但是需要使用反引号

重蔚自留地php学习第三十五天——mysql基础1

但是中文数据库下创建的数据库文件夹名字,会以额外的编码形式存在

重蔚自留地php学习第三十五天——mysql基础1

规范:

  1. 通常数据库的命名,要做到见名之意
  2. 不使用中文
  3. 通常,数据库会有前缀ecs_

查看数据库

语法1:show databases,显示所有数据库

重蔚自留地php学习第三十五天——mysql基础1

语法2:show databases like [‘pattern’],模糊查询,指定查询条件

%:通配符,匹配所有字符,所有数量

_:匹配所有字符,一次

Show databases like “my%”; -- 查找以my开头的所有的数据库

重蔚自留地php学习第三十五天——mysql基础1

Show databases like “my_”;  -- 查找以my开头,后面跟一个字符的数据库

重蔚自留地php学习第三十五天——mysql基础1

重蔚自留地php学习第三十五天——mysql基础1

原因:下划线匹配一个字符,%匹配所有字符  ==》以information开始的所有数据

如果要得到下划线,必须对下划线进行转义

重蔚自留地php学习第三十五天——mysql基础1

查看数据库创建语句

语法:show create database 数据库名字

重蔚自留地php学习第三十五天——mysql基础1

修改数据库

数据库名字不可以修改。

修改的是数据库库选项

语法:alter database 数据库名字 [库选项]

重蔚自留地php学习第三十五天——mysql基础1

效果

重蔚自留地php学习第三十五天——mysql基础1

删除数据库

结构的删除都是使用drop关键字,而数据库是一种结构

语法:drop Database 数据库名字

重蔚自留地php学习第三十五天——mysql基础1

效果

重蔚自留地php学习第三十五天——mysql基础1

注意:不能轻易的删除任何数据,数据库也不能随意删除,因为数据的删除是不可逆的。如果非要删除数据库,那么请先对数据库进行备份

表操作

对数据库内的数据表进行CRUD操作,该操作仍然是结构上的。

表应该对应结构才能称之为表。

表操作包含自身操作以及字段的操作。表跟字段是密不可分的。

创建表

语法:create table 表名(

--字段列表

字段1 字段类型,

字段2 字段类型,

字段N 字段类型

)[表选项];

表选项:字符集和存储引擎

字符集:该表存储数据所采用的字符集

存储引擎:当前表按照上面数据格式来存储数据

 

字段为什么需要字段类型?

SQL是一门强类型语言,对于数据必需要指定其数据类型,不是同一个数据类型的内容不能存放。

创建数据表

错误:没有选择数据库

重蔚自留地php学习第三十五天——mysql基础1

原因:数据表是依赖数据库存在的,是数据库的子对象,所以创建的数据表必须指定数据库

  1. 显示指定数据库,指的是在创建表的时候,明确指定该表应该放到哪个数据库下

语法:数据库.数据表

重蔚自留地php学习第三十五天——mysql基础1

  1. 默认使用数据库,前提是当前环境已经进入到某个指定的数据库。

进入数据库语法:use 数据库名字

重蔚自留地php学习第三十五天——mysql基础1

所有创建语法,都可以先对要创建的对象进行是否存在判断。

如不能创建已经存在的数据库

重蔚自留地php学习第三十五天——mysql基础1

防止冲突的办法:

If not exists:如果不存在

If exists:如果存在

If not exists使用

重蔚自留地php学习第三十五天——mysql基础1

If exists使用

重蔚自留地php学习第三十五天——mysql基础1

数据表的命名规则:跟数据库基本一致

一般数据表的命名采用下划线方式。

R:查询表

  • 语法:show tables;查询当前数据库中所有的表
  • 重蔚自留地php学习第三十五天——mysql基础1
  • 语法:show tables like “c%”;模糊查询
  • 重蔚自留地php学习第三十五天——mysql基础1
  • 语法:show create table 数据表名,查看表的创建语句
  • 重蔚自留地php学习第三十五天——mysql基础1
  • 语法:desc 表名;查看表中的字段信息,describe 表名;show columns from 表名
  • 重蔚自留地php学习第三十五天——mysql基础1
  • 重蔚自留地php学习第三十五天——mysql基础1

U:更新表结构

语法:alter table 表名 add/modify/change/drop [column] 字段名 [字段类型] [位置]

Add:添加一个字段:add 字段名字 字段类型 [位置]

重蔚自留地php学习第三十五天——mysql基础1

指定位置

重蔚自留地php学习第三十五天——mysql基础1

Modify:修改一个字段类型:modify 字段名 字段类型 [位置]

重蔚自留地php学习第三十五天——mysql基础1

Change:修改一个字段名字:change 旧字段名 新字段名 字段类型 [位置]

重蔚自留地php学习第三十五天——mysql基础1

重蔚自留地php学习第三十五天——mysql基础1

Drop:删除一个字段:drop 字段名

重蔚自留地php学习第三十五天——mysql基础1

位置:有两个选项的

First:表示放到表的第一个位置,语法:first

After:表示放到哪个字段的后面,语法:after 字段名

修改表的名字

语法:rename table 旧表名 to 新表名

重蔚自留地php学习第三十五天——mysql基础1

D:删除数据表

语法:drop table 表名

重蔚自留地php学习第三十五天——mysql基础1

注意:删除要慎用,表的删除会将整个表中的数据全部干掉,而这种操作不可逆。

数据操作

对数据表里保存的数据进行增删改查操作

C:新增数据

语句:insert into 表名 [(字段列表)] values (值列表)

如果没有字段列表,值列表的数量必须跟表字段数目完全一致,顺序要完全对应

重蔚自留地php学习第三十五天——mysql基础1

如果有字段列表,那么字段列表与值列表的字段数据必须完全一致,顺序要完全对应

重蔚自留地php学习第三十五天——mysql基础1

如果使用字段列表,该字段列表可以不与数据表的字段列表顺序一致

重蔚自留地php学习第三十五天——mysql基础1

错误1:字段类型与值类型不匹配

重蔚自留地php学习第三十五天——mysql基础1

错误2:待插入的字段列表与当前插入的值列表的数量不匹配

重蔚自留地php学习第三十五天——mysql基础1

R:查询数据

语法:select [字段列表] from 表名 [where条件]

查询所有数据

重蔚自留地php学习第三十五天——mysql基础1

查询指定字段

重蔚自留地php学习第三十五天——mysql基础1

查询指定条件数据

重蔚自留地php学习第三十五天——mysql基础1

U:更新数据

语法:update 表名 set 字段 = 值 [where条件]

重蔚自留地php学习第三十五天——mysql基础1

多字段修改

重蔚自留地php学习第三十五天——mysql基础1

D:删除数据

语法:delete from 表名 [where条件]

重蔚自留地php学习第三十五天——mysql基础1

注意:通常update和delete都必须匹配where条件,否则不允许操作,因为更新和删除都是永久性的,不可逆的。

中文数据插入

重蔚自留地php学习第三十五天——mysql基础1

Windows下,命令行模式里,只识别gbk编码,而且该编码不可以改变

重蔚自留地php学习第三十五天——mysql基础1

要保证mysql.exe在控制台可以输入中文并且让服务端识别的话,有一个快捷方式

Set names gbk; //告诉服务器,客户端给服务器传递数据是gbk编码的

重蔚自留地php学习第三十五天——mysql基础1

查看mysql支持的字符集

语法:show character set;

重蔚自留地php学习第三十五天——mysql基础1

一共支持39种字符集,除了这39种之外,其他的字符集就不能支持。

查看mysql服务器对外设置的默认的字符集

语法:show variables like ‘character_set%’;

重蔚自留地php学习第三十五天——mysql基础1

保证服务器端能够识别客户端的数据,只需要修改character_set_client = gbk;

Set character_set_client = gbk;

重蔚自留地php学习第三十五天——mysql基础1

就可以使用gbk编码的数据传输给服务器

重蔚自留地php学习第三十五天——mysql基础1

修改结果集的字符集

重蔚自留地php学习第三十五天——mysql基础1

Mysql.exe就可以解析数据

重蔚自留地php学习第三十五天——mysql基础1

客户端与服务端进行不同字符集编码数据通信的原理

重蔚自留地php学习第三十五天——mysql基础1

Set names gbk做了什么事情?

重蔚自留地php学习第三十五天——mysql基础1

数据库数据存储的最终编码?

  1. DBMS:安装数据库时指定编码
  2. DB:创建数据库时指定
  3. Table:创建表时指定
  4. Field:创建字段的时候指定

最终数据的存储编码,受最近的字符集影响,如果没有强制指定,那么顺序依次是:字段à表à数据库àDBMS

重蔚自留地php学习第三十五天——mysql基础1

注意:

1           只要用户设定好了,客户端的编码(character_set_client,character_set_results),不管数据库最终存储数据是按照什么字符集,都不会出现乱码。

2           字符集的最终设定受当前代码所在的环境影响,代码在控制台,就只能是gbk,代码在文件里,跟文件的编码是一致的。

本文来自投稿,不代表科技代码立场,如若转载,请注明出处https://www.cwhello.com/5786.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
上一篇 2018年3月26日 00:00
下一篇 2018年3月27日 11:02

相关推荐

  • PHP入门指南:PHP和Logstash。

    首先,让我们简单介绍一下PHP和Logstash是什么。PHP是一种用于Web开发的脚本语言,它广泛应用于服务器端的开发,可用于构建动态网站,Web应用程序和Web服务。它也可以与MySQL和其他数据库一起工作,以便收集和处...

    2023年5月22日
    04
  • PHP模拟supervisor的进程管理

    前言模拟supervisor进程管理DEMO(简易实现)截图:实现1、在主进程循环内启动子进程执行命令2、在web输入 127.0.0.1:7865 获取子进程状态3、socket接收请求消息,并且执行相应操作,返回web页面4、回收子进程,...

    2022年6月27日
    0133
  • PHP文件操作相关函数

    bool copy ( string filename , string dest ) 复制文件 string filename:原文件 string dest :目标文件 bool unlink ( string filename ) 删除文件 string filename:要删除的文件 bool rename ( string oldna...

    2017年11月15日
    0353
  • PHP使用Memcache技术,提升网站性能的秘诀。

    随着互联网的不断发展,网站的访问量日益增加,而各种高并发的情况也随之出现。这时候,网站性能就变得尤为重要。为了能够提升网站的性能,各种技术手段也应运而生。其中,PHP结合Memcache技术是提升网站性能的一...

    2023年5月21日
    01
  • PHP中的自动化部署工具。

    PHP作为一种广泛应用的编程语言,它的应用范围十分广泛。无论是个人网站还是大型企业应用,PHP都有着相应的应用场景。然而,在开发PHP应用过程中,如何进行自动化部署是十分重要的。因为自动化部署可以极大地减少...

    2023年5月30日
    02
  • PHP开发的最佳SSH应用。

    PHP开发的最佳SSH应用在现代软件开发中,SSH已经成为了一种非常常见的协议,用于保护服务器和计算机之间的数据传输安全。SSH(Secure Shell)是一个网络协议,用于在计算机之间安全地进行数据传输和命令执行。在...

    2023年5月28日
    00
  • 如何在PHP-Slim框架中使用CORS跨域请求。

    在Web开发中,跨域请求是一个常见的问题。这是因为浏览器对于不同域名之间的请求有严格的限制。例如,网站A的前端代码无法直接向网站B的API发送请求,除非网站B允许跨域请求。为了解决这个问题,出现了CORS(跨域...

    2023年6月3日
    02
  • 探索php+ajax实现带进度条的大数据排队导出思路

    废话不多说,先上效果图:点击导出,实现点击导出统计完成之后点击确定下面来谈谈实现的思路:前面导出操作简单,从第二个导出操作开始:点击"确定"调用exportCsv函数代码如下:<a class="on&qu...

    2022年6月12日 PHP自学教程
    0137

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息