PHP学习文件总结9.docx
《PHP学习文件总结9.docx》由会员分享,可在线阅读,更多相关《PHP学习文件总结9.docx(27页珍藏版)》请在冰豆网上搜索。
PHP学习文件总结9
mysql数据库
永久性保存数据的仓库。
php的变量,在php脚本执行周期,临时性保存变量的概念!
什么是关系型
所谓关系型数据库,基于关系模型建立的数据!
关系模型:
mysql数据是关系型数据库!
何谓关系型(关系模型),利用关系(二维表),去描述实体信息,与实体之间的联系的数据库架构就是关系型数据!
所谓关系:
二维表!
学生信息
学号
名字
年龄
所属班级
Itcast_007
王翦
66
Java1011
Itcast_010
李白
44
Php1016
Itcast_001
杜十娘
33
Ios1021
Itcast_123
喜羊羊
11
Java1011
班级信息
班级名称
教室号
Php1016
102
Java1011
201
.net0918
108
Ios1021
218
其他的类型的数据介绍
nosql:
notonlysql,非关系型数据库
sql:
一门语言,结构化查询语言,操作关系型数据的语言!
典型的是key/value型,键值对型
‘abcedefakasdnfakjsdi’=>{‘itcast_007’,王翦,66,java1011}
‘asdfkndikciuehaalcidk’=>{‘itcast_001’,杜十娘,33,ios1021,‘female’,{‘珠宝’,‘百宝箱’,’投河’}}
关系型数据的基本概念
关系,二维表
行,记录,一行就是一条记录。
列,字段,一列就是一个字段。
SQL:
结构化查询语言,操作关系型数据库的语言!
操作MYSQL基本流程
什么数据库系统,mysql就是数据库系统!
数据库系统最基本应该由:
数据系统=数据库(数据主体部分)+数据管理系统(操作数据的工具)
DBS(DataBaseSystem)=DB(Database)+DBMS(DatabaseManagenemtSystem)
mysql的操作,是基于C/S的!
Client/Server,客户端/服务器.
c/s指的是不同的服务器,提供的是不同的终端访问方式!
操作mysql,就一定:
通过操作mysql客户端,向mysql服务器发出指令,从而完成操作!
按照mysql时,自动携带一个命令行的客户端!
mysql。
利用该客户端,向服务器发送指令,然后等待执行结果即可!
任何操作mysql服务器行为的行为,都是mysql客户端发出的!
msyql服务器的基本结构体系
数据库服务器->库->表->字段(数据)
完成数据的操作,先建立数据的结构(由库到表再到字段)
SQL:
大体分成典型:
DML(数据管理语句,数据操作),DDL(数据定义语句,数据结构的控制语句,表操作和库操作)
库操作,DDL
创建,create
(create,几乎所有的结构都是用该语法完成)
createdatabase库名[库选项]
注意的问题:
库选项,只有字符集,校对集的概念!
每个库,会对应一个数据目录
存放在当前mysql的总的数据库目录内
参考mysql的配置文件得到该目录:
看到刚刚的数据库目录:
看看目录内,没有表,没有其他文件,除了一个数据库选项文件:
数据库名的问题
大小写问题,取决于mysql服务器,所在的操作系统!
(建议是,认为区分)
特殊名称,关键字,特殊字符等!
默认是不可以的!
但是,可以使用反引号将名称包裹起来,告知服务器,此处一个名字,而不是特殊操作!
中文等都可以作为标识符(库名),需要同样反引号!
(多字节字符,还需要注意字符集的问题)
查询(看看有哪些库,库的基本结构),show
查询已有的数据库名字
showdatabases;
showdatabaseslikes;
like关键字用于过滤多个数据库!
可以使用通配符(通用匹配符,可以匹配多个字符)
%匹配任意字符的任意次数(包括0次)的组合!
_匹配任意字符的一次!
like‘x_y’;
x1yxbyxxy(可以)
xy(不可以)
通配符是与like关键字一起使用!
注意如需要匹配特定的通配符,则需要对通配符转义,使用反斜杠\完成转义!
查看某个数据库的定义
showcreatedatabase库名;
修改,alter
alterdatabase数据库名
只能修改数据库选项
删除,drop
dropdatabase名字
ifnotexists,ifexists
在create与drop时,创建和删除时,有两个额外的操作:
createdatabaseifnotexists
如果不存在则创建
dropdatabaseifexists
如果存在,则删除
表操作,DDL
表本身,与表结构的操作!
创建,createtable
createtable表名(
字段的定义
)[表选项];
其中表名,一定先要确定数据库!
因此一个典型的表名是由两部分组成:
所在库.表名
test.itcasttest库内itcast表
itcast.stuitcast库内的stu表
但是我们可以设置默认数据库,如果不指定则使用默认数据库(当前数据库)
use数据库名。
选择默认数据库!
在使用表名但是没有指明其所在数据库时,默认数据库才会起作用!
在itcast库内创建:
useitcast;createtablestu;
或者
createtableitcast.stu
其中字段的部分
字段才是最终的数据的载体(与变量的概念是类似的,都是基本保存数据的),mysql的是强类型,字段的类型是固定的,提前定义好的!
因此,在定义字段时,至少要字段名和字段类型!
两种最基本的mysql数据类型(int,varchar,varchar必须指定最大长度字符为单位)
表选项部分
典型的常用的表选项有:
字符集(校对集),表引擎。
查看,show,desc
查看所有的表有哪些
showtableslike‘模式’
查看具体的建表语句
showcreatetabletable_name
在mysql的命令行客户端,如果数据过多,不容易展示!
可以使用\G作为语句结束符!
查询表结构
desc表名
descdescribe的简写
修改,altertable
修改表选项
altertabletable_name[新选项]
改表名
renametable原表名to新表名。
注意,表名可以由库名.表名形式的!
因此,可以跨库修改表名:
只要在表名前增加库名即可
修改表结构,表内字段
增加字段
altertabletable_nameaddcolumn字段定义[字段位置]
增加一个age字段:
增加一个height在name之后:
使用关键字aftersome_column_name;
在最开始增加sn字段
使用关键字,first
删除字段
altertabletable_namedropcolumncolumn_name;
修改已有字段(修改字段定义)
altertabletable_namemodifycolumncolumn_name新的定义!
可以修改位置
字段改名
altertabletable_namechangecolumn原字段名新字段名新字段定义!
注意,不是纯粹的改名,而是需要在修改定义的同时改名!
删除,droptable
droptableifexists
createtableifnotexists!
数据操作,DML
基本的操作
增加,创建,插入,insert
insertinto表名(字段列表)values(与字段相对的值列表)
不一定要一次性插入所有字段,或者按照原始的字段顺序插入:
但是:
字段与值的数量一定要匹配:
特别的:
如果所有的值都按照字段的出现顺序都插入的话,可以省略字段列表部分!
注意:
数值类型,不需要增加引号!
而字符串类型都需要出现引号内!
(但是数值型,可以出现引号内)
查询,检索,选择,select
select字段列表from表名[where条件表达式]
其中字段列表可以使用*表示所有字段!
关于条件表达式,默认是没有,表示永远为真!
但是,很少出现没有条件的情况!
为了突出,应该所有的语句都有查询条件!
即使没有条件,我也强制增加一个where1;
关于字段列表:
也应该够用就可以!
删除,delete
deletefrom表名where条件;
关于条件,可以省略。
表示永远为真。
注意,删除是不可逆的。
要避免没有条件的删除!
修改,更新,update
update表名set字段=新值,字段n=新值nwhere条件
关于条件,可以省略。
表示永远为真。
create,show,alter,dropdatabase/talbe
add,modify,change,dropcolumn
insert,select,update,deletetable_name
字符集
字符集,描述可见到的图形,在存储和传输时使用的编码称之为字符集!
指的是:
图形与编码之间的对应关系!
字=>111001011110000100010100
数据存储的编码
数据是存储在服务器端的!
究竟是以哪种编码保存的,怎么决定?
数据是最终要映射(保存)到字段的层面上!
因此决定数据的编码,也是最终由字段来决定!
确定数据的存储编码是由以下的方案完成的:
1,先看字段的编码!
如果存在则确定完毕!
2,如果字段没有设置编码,查看表的编码,如果有,则确定数据编码!
3,如果表没有编码,查看库的编码,如果有,则确定数据编码!
4,如果库也没有编码,则有服务器程序确定!
典型的编码:
gbk,utf8!
客户端操作,查询的编码
在客户端与服务器端交互时,存在两个重要的编码:
1,客户端发送数据的编码
2,客户端接收到服务器数据编码!
可以通过showvariableslike‘character_set_%’展示以character_set开头变量,其中就有上面的两个值:
在命令行客户端下:
该客户端,只能是gbk编码!
使用set变量名=变量值的形式更改变量值!
setnamesgbk,就是一个快捷操作,将上面两个配置同时更改成目标编码!
setnamesgbk|utf8取决于,客户端所能接受的编码!
整体流程:
setnamesgbk|utf8。
PHP操作mysql服务器
php作为mysql服务器的客户端!
连接认证
发送sql
执行sql,生成结果(mysql-server)
处理结果
关闭连接
加载必要的扩展,使可以作为客户端使用
mysql_connect();
连接认证
mysql_connect()
成功返回连接资源,失败false!
向mysql服务器发送sql
mysql_query(sql,连接资源);
失败返回false,成功返回资源或者true!
可以使用mysql_error(连接)mysql_errno(连接)获得错误信息和标识
处理返回数据
执行成功后:
返回数据可以是资源也可以true。
执行失败一定是false!
依据所执行的sql,是否有返回数据!
返回资源:
有返回数据:
select,show,desc。
返回true:
没有返回数据的:
use,set,insert,update,delete,DDL
处理返回资源
称之为结果集(resultset)类型资源!
结果集:
结果的集合!
将数据,从结果集中取出来!
称之为fetch!
使用函数:
mysql_fetch_assoc|row|array。
功能完全一致,只是返回的数据格式不同!
在结果集中,取得一条记录。
结果集内也存在结果集记录指针的概念!
fetch一次,只能取得当前记录,但是可以向后移动记录指针!
配合上循环结构可以将所有的记录从结果集中取出!
特别注意:
任何有结果的sql操作,返回的都是结果集!
结果集,就是一个二维表的结构!
是一行行的记录组成!
即使,结果集中只有一条记录
甚至,我们只需要返回一条数据!
释放资源
mysql_free_result(结果集)
mysql_close(连接资源);
预习
校对集
列类型(数据类型)
列选项(列属性,列约束)
设计模式(范式,关联)
作业
1,模拟查找所有的数据表结构
2,编码问题!