重蔚自留地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

相关推荐

  • Cookie基本使用(增删改查)

    创建cookie(增加) setcookie();setcookie有7个参数: 参数1:保存的cookie变量名称 参数2:变量对应的值 参数3:cookie文件的有效期 读取cookie的数据 参数4:有效路径 默认情况只允许访问当前目录、当前目录子...

    2018年9月13日 PHP自学教程
    0263
  • php如何使用PHP的Zookeeper扩展。

    PHP是一种非常流行的编程语言,广泛应用于Web应用程序和服务器端开发。Zookeeper是一个分布式的协调服务,用于管理、协调和监控分布式应用程序和服务。在PHP应用程序中使用Zookeeper可以提高应用程序的性能和可靠...

    2023年6月3日
    04
  • 重蔚自留地php学习第四十二天——对象(面向对象)

    面向对象编程 面向对象编程不是技术,是一种思想而已。 面向对象编程:OOP(object oriented programming) 面向过程和面向对象 面向过程:将一个事务分成具体的某系列功能,然后将一连串的功能连起来使用,从而...

    2018年12月24日 我php路线
    0315
  • 重蔚自留地php学习第44天——继承重载

    回顾 自动加载:__autoload(),而是在需要使用类的时候,而类又没有被加载进内存情况下,会自动触发的一个函数而已。   类常量:const 常量名 使用:类名::常量名   静态:静态属性和静态方法,static ...

    2019年1月9日 我php路线
    0337
  • PHP与MySQL查询优化。

    随着互联网和信息技术的发展,Web应用程序成为了企业和个人必备的一项技术。在Web应用程序中,PHP与MySQL是相当重要的技术,PHP提供了丰富的功能和特性,而MySQL则是用于存储和管理数据。然而,当数据量增加时,...

    2023年5月21日
    00
  • PHP8.0中的文本处理库:Phonetic

    随着PHP 8.0的发布,很多人都在关注它的新特性。其中一个备受瞩目的特性是它的文本处理库,Phonetic。这个库提供了一些有用的方法,如音标转换、拼音转换和近似字符串匹配。在本文中,我们将深入探讨这个库的功能...

    2023年5月18日
    01
  • PHP中的数据抓取和爬虫技术。

    随着移动互联网和Web2.0时代的发展,人们越来越需要获取和分析互联网上的数据。而在这个过程中,数据抓取和爬虫技术成为了必不可少的工具。在众多语言中,PHP作为一种脚本语言,也能够实现较为简单和高效的数据抓...

    2023年5月28日
    06
  • 重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

    回顾 面向对象三大特性 封装:隐藏数据实现,提供外部调用的方法 继承:实现代码的重用,提高效率 多态:方法的重载,PHP不支持多态   PHP继承:extends 如果一个类是用来被实例化的,那么尽可能的将内容私...

    2019年1月11日 我php路线
    0365

联系我们

QQ:951076433

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