一.会话控制
http是一个无状态的协议,此协议无法维护两个事务之间的联系。当一个用户请求一个页面后再请求另外一个页面时,http无法告诉我们这两个请求是来自同一个人。为了使得网站可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息,这样就产生了会话控制。
(一)cookie
当用户访问服务器时,服务器可以设置和访问cookie的信息。cookie保存在客户端,通常是IE和Firefox浏览器的cookie临时文件夹中,可以手动删除。
1.向客户端电脑中设置cookie
setcookie (name,value,expire,path,domain,secure);
name参数必需,名称;
value参数必需,值;
expire参数可选,有效期;
path参数可选,服务器路径;
domain参数可选,域名;
secure参数可选,规定是否通过安全的HTTPS连接来传输cookie。
2.在服务器端上读取cookie的内容
$_COOKIE
3.将多维数组应用于cookie中
setcookie("member[name]",'姓名');
setcookie("member[email]",'1234567890@qq.com');
4.删除Cookie
setcookie("member",'',time()-1);
注:使用setcookie删除cookie的时候,需要与当初设置cookie的时候参数一致。
(二)session
session与cookie不同,是将用户参数留在服务器端。session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期。
1.开启session
session_start();
注:这个函数没有参数,且返回值均为true。
二.MySQL
MySQL是关系模型数据库管理系统,以稳定、可靠、快速、可信而成为世界上最受欢迎的数据库管理系统之一。无论是小型网站还是大型网站,都可以通过MySQL完成数据存储业务。
(一).数据库基本概念
数据库:信息存储的仓库,包括一系列的关系措施;
表:一个数据库中可以有若干张表(形式上你可以看出我们日常生活中建立的表);
字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数据库技术叫”字段”,栏目里面存的具体信息叫”字段值”;
记录:一条信息我们叫一条记录。
一个数据库管理系统中可以建立若干个数据库,每个数据库中又可以建立若干张表,每张表中可以有若干条记录。
(二)MySQL支持的数据类型
数值类型、日期类型、字符串类型
(三)(My)SQL使用入门
1.SQL语言简介
SQL 是用于访问和处理数据库的标准的计算机语言。
SQL指结构化查询语言,全称是 Structured Query Language。
SQL 可以访问和处理数据库。
SQL 是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。
2.SQL分类
1)DDL(Data Definition Languages)语句
数据定义语句,通过这类语言可以对数据库进行创建删除更改。
2)DML(Data Manipulation Language)语句
数据操纵语句,用于添加、删除、更新和查询数据库记录并检查数据完整性。3)DCL(Data Control Language)语句
数据控制语句,通过此类语句可以对数据库的相关权限进行设置。
3.DDL语句
对数据库内部的对象进行创建、删除、修改等操作的语言,DDL语句更多的是由数据库管理员(DBA)使用,开发人员一般很少使用。
show databases; //查看数据库列表
1)创建数据库
create database 数据库名;
选择要操作的数据库:USE 数据库; 对于要操作的数据库我们需要使用use来选择一下。
查看数据库中所有的数据表show tables;
2)删除数据库
drop database 数据库名称;
3)创建表(在哪个数据库里面创建表需要先使用use选择到那个要操作的数据库)
创建表
create table 表名(
字段1名 字段1类型 列的约束条件,
字段2名 字段2类型 列的约束条件,
...
)
创建完表之后可以查看表的定义
desc 表名;
查看创建表的SQL语句
show create table 表名 \G
另: \G选项使得记录能够按照字段竖向排列,以便更好地显示内容较长的记录,\G后面无需再加分号。
4)删除表
drop table 表名;
5)修改表
修改表的字段类型
alter table 表名 modify [column] 字段定义 [first|after 字段名];
增加表字段
alter table 表名 add [column] 字段定义 [first|after 字段名];
删除表字段
alter table 表名 drop [column] 字段名;
字段改名
alter table 表名 change [column] 旧的字段名 字段定义 [first|after 字段名];
注:change与modify都可以修改表的定义,不同的是change后面需要接两次列名,不方便,但是优点是change可以修改字段名称
修改字段排列排序
前面介绍的字段增加和修改语法(add/change/modify)中,都有一个可选项first|after 字段名,这个选择可以用来修改。字段在表中的位置新增的字段默认是加载在表中最后位置,而change/modify 默认都不会改变字段的位置。
alter table t1 modify id2 tinyint first;
alter table t1 modify id2 tinyint after id1;
注意:change/first|after 字段名 这些关键字都是属于MySQL在标准SQL上的扩展,在其他的数据库上不一定适用
6)更改表名
alter table 表名 rename [to] 新的表名;
4.DML语句
select * from 表名;//查询
1)插入记录insert into 表名(字段1,字段2,字段3,...,字段n) values(值1,值2,值3,...,值n);
也可以不用指定字段名,但是values后面的顺序应该和字段的排序一致
多条:
insert into 表名(字段1,字段2,字段3,...,字段n)
values
(值1,值2,值3,...,值n),
(值1,值2,值3,...,值n),
(值1,值2,值3,...,值n)
;
2)更新记录
更新一个表
update 表名 set 字段1=值1,字段2=值2,...字段n=值n [where 条件];
更新多个表中数据
update 表1,表2,...表n set 表1.字段1=表达式1,表n.字段n=表达式n [where 条件];
注:多表更新更多的用在根据一个表的字段来动态的更新另外一个表的字段
3)删除记录
删除单表中的数据
delete from 表名 [where 条件];
删除多个表中的数据
delete 表1,表2,...表n from 表1,表2,...表n [where 条件];
不管是单表还是多表,不加where条件将会把表中的所有记录删除,所以操作时一定要小心。
4)查询记录
select 字段名|* from 表名;
查询不重复的记录
SELECT distinct field1,field2 FROM 表名;
只要field1,field2任何一个字段有不同就会被选择。一般使用distinct,只筛选一个字段。
注:条件字段比较符号:=,<,>,>=,<=,!=等比较运算符多个条件之间可以使用or and等,where 后面接条件
select * from 表名 where 条件
排序和限制
排序:
//asc:由低到高,也是默认值
select * from employee order by salary asc;
//desc:由高到底
select * from employee order by salary desc;
//多个字段排序
select * from employee order by salary desc,id desc;
限制:
在语句的最后面 加上limit 数字1,数字2 来进行查询数量的限制。
limit 数字1,数字2 数字1代表从第几条记录开启取(是从0开始的),数字2代表取几条!
聚合
①sum求和
select sum(字段名) from 表名;
②count记录总数
select count(*|字段名) from 表名;
③max最大值
select max(字段名) from 表名;
④min最小值
select min(字段名) from 表名;
⑤GROUP BY分类聚合
select department,sum(salary) from employee group by department;
⑥WITH ROLLUP分类聚合后的结果进行再汇总
select sum(salary) from employee group by department with rollup;
⑦HAVING
注意:having和where的区别在于,having是对聚合后的结果进行条件过滤,而where是在聚合前就对记录进行过滤 ,应该尽可能的对记录进行先过滤!
select sum(salary) from employee group by department having sum(salary)>1000;
在一起使用:select sum(id),max(id),min(id),count(*) from a1;
5)表连接
需求:显示多个表中的字段的时候即可使用表连接
连接分类
内连接:选取两张表中相互匹配的记录
外连接:不仅仅选取两张相互匹配的记录,并且会选出其他不匹配的记录
外连接
左连接
概念:包含左边表中的所有记录(包括右表中没有和它匹配的记录)
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
右连接
概念:包含右边表中的所有记录(包括左表中没有和它匹配的记录)左连接和右连接是可以相互转换的。
6)子查询
需求:一个查询需要另外一个查询的结果参与的时候
用于子查询的关键字:in
语法:select * from employee where id in(select eid from employee_late);
in 在..里面
注意点 in后面的子语句必须只返回一个字段
若查询结果唯一(只有一条)可以使用=代替in
not in与in相反
exists
语法:select语句 where exists(select 语句);
exists:后面那个子语句有没有查询出记录来,如果查询出记录来返回true,否则就是false,并且查询出来的记录的具体的值是NULL也是没有关系,也是返回true.
not exits与exists相反select * from emp where deptno in(select deptno from dept);
若查询结果唯一可以使用=代替in
select * from emp where deptno=(select deptno from dept limit 1);
7)记录联合
我们常常会碰到需要将两个表或者多个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示这是就需要用到记录联合。
多个select 语句用UNION或者UNION ALL隔开即可实现
区别:前者会将多个查询结果合并后并且进行去除重复后返回
后者:则直接合并并不去除重复
联合的条件:查询的列个数要相等