Mysql基础学习笔记三


http协议的特点


1,基于请求,响应
2,无状态  (记录是否登陆,cookes)


var_dump($GLOBALS);
var_dump($_ENV); //接收服务器系统环境
var_dump($_POST);//接收post数据
var_dump($_GET);//接收get数据
var_dump($_COOKIE);//接收cookie数据
var_dump($_SERVER);//接收服务器相关信息
var_dump($_FILES);//接收上传舞武器的相关文件
var_dump($_REQUEST);//接收get参数,接收post参数,接收cookie参数
var_dump($_session);//接收session数据




必背的十个函数
1,$_SERVER['HTTP_USER_AGENT'];//返回浏览器的客户端信息
2,$_SERVER['HTTP_PEFERER'];//返回上级请求来源地址
3,$_SERVER['SERVER_NAME'];//服务器名称
4,$_SERVER['SERVER_ADDR'];//服务器的IP地址
5,$_SERVER['REMOTE_ADDR'];//客户端的IP地址
6,$_SERVER['DOCUMENT_ROOT'];//获取网页地址的根目录
7,$_SERVER['SCRIPT_FILENAME'];//获取当前脚本的文件名称
8,$_SERVER['QUERY_STRING'];//获取脚本发送变量,获取所有的get参数字符串通常配合parse_str函数来使用
9,$_SERVER['REQUEST_URI'];//获取所有的带参数的url
10,$_SERVER['REQUEST_TIME'];//获取当前文件请求的时间戳
GET传递参数


1,form表单的提交
2,直接在浏览器当中输入
3,可以使用超链接


数据表概念


数据表是数据库中的基本对象元素,以激励行和字段列组成的二维数组用于存储数据,数据表由表结构和表内容两部分组成,先建立表结构,然后才能输入数据,数据表结构设计主要包括字段名称,字段类型和字段属性的设置。


数据列的四大数据类型




数值类数据类类型
浮点类型的注意事项
浮点型后面的数字会存入数字四舍五入,例如把一个1.234存入float(6,1)中,结果是1.2 6代表长度,1代表小数长度,会四舍五入。
char和varchar的区别
char是固定长度,后面的会截取。
如果存入的数据比指定的长度小,会补空格到指定长度
varchar是可变长度
如果实际长度长,会截取
如果实际长度小,则会自动缩短
效率度高的是char,他不会自动判断长度,但是占用空间
enum('value1','value2')使用方式最好是单选
set('value1','value2')使用方式最好是多选




字符串类数据列类型




日期和事件类数据列类型






数据字段属性




UNSIGNED 
只能用于设置数值类型,不允许出现负数
最大存储长度会增加一倍
ZEROFILL
只能用于设置数值类型,在数值之前会自动用0补齐不足的位数
AUTO_INCREMENT
用于设置字段的自动增长属性,每增加一条记录,值会自动增加1.
注意,设置自增时候必须设置索引
在设置自增的字段上设置primary key 
或者unique
id int unsigned AUTO_INCREMENT unique




null类型
null和null




默认是null,即插入值时没有再次字段插入值,默认为null值,如果指定了not null,则必须在插入值时在此字段填入值




DEFAULT
可以通过此属性制定一个默认值,如果没有在此列添加值,则设置默认值。


什么是索引?




1,类似书的目录
2,作用:a,提高查询速度
3,索引的分类
a,主键索引 PRIMARY KEY
1,唯一性
注意,在一个表上只允许有一个主键
  主键索引不是必须创建的
b,唯一索引  UNIQUE
1,唯一性
注意,在一个表上可以有多个索引
c,普通索引 INDEX/KEY
d,全文索引 FULLTEXT
a,主要用来进行全文数据的搜索(like模糊查询)
很少使用,可以使用sphinx廓检索引擎来进行搜索
e,外键索引FOREIGN KEY
1,通常情况下,配合一张表的主键使用
2,两表或者多表关联时使用
3,外键不推荐使用,效率很低
4,对索引的操作 例子bbs是数据库,bbs_user是bbs的一个数据表
a,创建
1,创建索引时候可以在字段后进行创建
2,在创建数据表的时候可以在字段写完后的最后创建索引
3,在创建完成后创建索引
alter table bbs_user add primary key(id);
b,查询 
show indexes from bbs_user\G
查询bbs_user2中的索引表
c,删除
1,alter table bbs_user drop primary key;
2,alter table bbs_user drop index username;
//描述:第一步用show indexex from bbs_user\G
// 查询一下哪一个键是索引
// 第二步,删除自增键,不删除的话删除不了
// alter table bbs_user2 drop primary key;
// 第三步,删除的键索引
// alter table bbs_user2 drop index username;
d,删除结构用drop,删除数据用delelt。




5,索引的优缺点
a,优点
提高了查询速度
b,缺点
降低写入速度
会展业一定的磁盘空间




表引擎ENGINE或者表类型
a,MyISAM
b,InnoDB
*数据表的类型及存储位置
MySQl支持MyISAM,Innodb等
myisam和innodb两种表类型最重要
1,myisam数据表类型的特点是成熟,稳定和容易管理
2,myisam表类型会产生碎片空间,要经常使用OPTIMIZE TABLE命令u清理表空间,innodb不会产生碎片空间
3,Myisam不支持事务处理,innodb支持事务处理
4,myisam不支持外键,innodb支持
5,myisam表类型的数据表执行效率高
6,myisam会产生3个文件,innodb会产生一个文件
数据库为test,产生3个文件
test.frm 表结构
test.MYI 表索引
test.MYD 表数据
innodb会产生一个文件
test.frm 表结构
ibdatal 存储索引的数据库中
索引的innodb表的索引和数据(共享表空间)




字符集




a,数据库服务器字符集
default-characater-set=utf8
b,数据库客户端字符集
默认是gbk字符集,因为是为微软的
set names utf8 设置成utf8
c,数据库字符集
汇集成数据库的字符集
d,数据表字符集
继承数据库的的字符集
e,数据表字段的字符集
继承数据表字符集
f,校验字符集
对中文进行排序
g,链接字符集
set names utf8
设置字符集,默认是utf8
default-characater-set=utf8




create table bbs_user(
id int unsigned not null 
auto_increment primary key,
username varchar(50) not null,
userpass varchar(50) not null,
telno varchar(50) not null unique,
sex enum('男','女') not null default '男',
birthday date not null default '0000-00-00',
key bbs_user_username(username),
key bbs_user_userpass(userpass)
)engine=myisam default charset=utf8;




数据库修改
ORDER BY 语句




ORDER BY 语句用于根据指定的列对结果集进行排序。




ORDER BY 语句默认按照升序对记录进行排序。




如果希望按照降序对记录进行排序,可以使用 DESC 关键字。




order by desc降序排序




DML  
增加
insert into 表名(字段1,字段2,字段3) values('数值1','数值2','数值3')
insert  
insert into user_table(id,username,password) value(1,hao,123);
批量增加
insert into user_table(id,username,password),values('1','856','55'),('2','856','55'),('3','856','55');
注意:values('数值1','数值2','数值3'),('数值1','数值2','数值3')('数值1','数值2','数值3');
  逗号和分号都是英文的分号。
插入
Update 表名 set 字段名=要修改的值 where
1,uodate bbs_user set username='' where id=1; 将id为1的用户姓名修改
2,uodate bbs_user set username='' 将所有的用户姓名更改,不推荐
3,uodate bbs_user set username='',password='123' where id=1; 
将id为1的用户姓名修改,和密码按修改
4,updata bbs_user set rtime=rtime+1 where id=2;
将id为2的用户rtime加1
5,select * from bbs_user order by id desc limit 3;
只是显示id最大的三个数值
6,updata bbs_user set password='123' order by desc limit 3;
将id最大的三个,密码修改为123
7,updata bbs_user set password='789' limit 3;
将前3个用户的密码设置为789




删除数据
delete from 表名[where条件]




1,delete from bbs_user;
删除所有的记录【不推荐】
2,delete from bbs_user where id=3;
删除所有id为3的所有数据【推荐使用】
3,delete from bbs_user order by id desc limit 3;
删除id最大的三个数值
4,delete from bbs_user limit 3;
删除id的前三个用户




DQL 
select [ALL|DISTINCT]*字段1,字段2.....FROM 表名 [where 字句] [GROUP BY分组][HAVING条件过滤(二次过滤)][ORDERBY BY排序][limit 显示数目的条数]
//GROUP BY分组,一般是用来做统计来使用
//as是改一个别名
添加一个字段
alter table bbs_user add column age int;
清空表
将这个表恢复到原始状态,就是一开始建立时的状态
truncate bbs_user;
查看表的类型和字段状态
desc bbs_user;
1,select * from bbs_user;
查询出这个表里面的所有的数据
1.1 显示出所有年龄(只有年龄信息,所有记录)
select age from bbs_user;
1.2 显示出所有的年龄(只有年龄信息,去除重复)
select distinct age from bbs_user;//distint代表去重复
1.3 查询出所有用户的所有年龄字段(默认为all)
select all age from bbs_user;
1.4 打印出我想要id,username,age信息
select id,username,age from bbs_user;
1.5 查询年龄大于22岁的
select * from bbs_user where age>22;
1.6.1 查询是各个年龄段的人数总数
select age,count(*)from bbs_user group by age;
1.7 查询出年龄段大于21岁的总人数
select age,count(*)from bbs_user where age>21 group by age;




1.8 select age,count(*)as c from bbs_user where age>20 group by age having c>1;
需求:统计出年龄大于20的人进行分组,分组大于1人的输出
执行顺序:重要!!!!!
1,先查询出年龄对于20 的索引用户 where
2,将查询出的用户以年龄进行分组 group by
3,将分组的人数进行统计 count(*)
4,将统计后的结果通过having进行二次过滤 having




1,9 select *from bbs_user order by age;
以年龄进行升序排序
1,10 select *from bbs_user order by age desc降序排序;
以年龄进行降序排序
1,11 select *from bbs_user order by age,id desc;
先对年龄进行升序排序,如果有年龄相同时,然后在对id进行降序排序
1,12 随机进行排序,广泛应用于抽奖
select *from bbs_user order by rand();
此语句会随机进行排序,表中的顺序会随机列表
1,12,1 随机抽取一个人
select *from bbs_user order by rand() limit 1;
1,13 select *from bbs_user limit 3;
查询出前三条记录
select *from bbs_user limit 3,3;
查询是跳过3来三条记录,如果id从1开始,则输出4-7的数据
select *from bbs_user limit 3,9;

查询是跳过3来九条记录,如果id从1开始,则输出4-13的数据

1$sql="select title,ptime from cms_article order by click desc,ptime desc limit 7"
在点击量(click)相同的情况下,按照发表的事件降序排序

//limit可以做分页操作
where 子句
1,14 查询password为123的,并且年龄是五岁的
select * from bbs_user where password='123' and age='5';
1,15 查询password为123的,或者年龄是五岁的
select * from bbs_user where password='123' or age='5';
1,16 查询年龄不是五岁的
select * from bbs_user wher age!=5;
1,17 查询出没有填写年龄字段,或者年龄字段为空的用户
select * from bbs_user where age is NULL;
1,18 查询出年龄字段,或者年龄字段不为空的用户
select * from bbs_user where age is NOT NULL;
1,19 查询出年龄字段在22-30岁之间的数据
第一种写法:
select * from bbs_user where age>22 and age <30 ;
第二种写法:
select * from bbs_user where age between 22 and 30;
1,19 查询出年龄字段不在22-30岁之间的数据
select * from bbs_user where age not between 22 and 30;
1,20 查询出字段中以某个子符开头的数据(zhang)
select * from bbs_user where username link 'zhang%';
//查询以zhang开头的,一定加上%号
1,21 查询出字段中有某个子符的数据(zhang)
select * from bbs_user where username link '%zhang%';
//查询包含zhang子符的,一定前后加上%号,这样的话大大降低查询效率
1,22 查询出字段id或者是1的,或者是3的,或者是5的数据
select * from bbs_user where id=1 or id=3 or id=5;
优化方案,等价上面
select * from bbs_user where id in(1,3,5);
统计函数 聚合函数
1,23 count(*)
统计总数
1,24 select sum(age) from bbs_user;
统计出age字段的和
1,25 select avg(age) from bbs_user;
统计出年龄的平均值
1,26 select max(age) from bbs_user;
统计出年龄中最大的值
1,27 select min(age) from bbs_user;
统计出年龄中最小的值
--------------------------------------------------
多表联合查询
案例:两个表,分别是bbs_user和bbs_profile
bbs_user字段:id,username,password
bbs_profile字段:uid,age,sex




1,普通关联查询
主键和外键相等就可以关联
查询出id,username,password,age,sex;
select u.id,u.username,u.password,p.age,p.sex, from bbs_user as u,bbs_profile as p,where u.id=p.uid;
u.id和p.uid进行关联,直接进行相等的条件,效率较高
或者
select id,username,password,age,sex from user_users,user_profile where id=uid;
2,链接关联查询
左连接left是左边先全部输出,在过滤右边,如果右边有部分是空的,会不会显示的,
右连接right是右边最先全部输出,过滤左边,如果左边有空,就会过滤掉。
1,左连接
select u.id,u.username,u.password,p.age,p.sex,from user_users as u left join user_profile as p on id=uid;
2,右连接
select u.id,u.username,u.password,p.age,p.sex,from user_users as u right join user_profile as p on id=uid;
3,内连接
select u.id,u.username,u.password,p.age,p.sex,from user_users as u inner join user_profile as p on id=uid;
不以任何表为主,直接输出两边输出,和普通关联查询一样。关键字 inner,on是where条件
3,嵌套关联查询(不推荐使用,效率很低)
原理:是从一条select语句中执行后的结果作为下一个语句查询的条件
案例:查询出所有的用户
select * from user_users where id in(select id from user_2);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值