PHP NOTE 9 mysql 复习
@20130611 by boxcore
约定:
tabname:表名
dbname:数据库名
fieldname 或 field+n : 字段名
oldTabName:旧表名
newTabName:新表名
——————–
一、数据库概述
——————–
1.MySQl操作过程:MySQl 服务端,MySQl客户端;
2.数据库产品分类:关系型数据库 ,非关系型数据库;
3.数据表的字符集:Client,Conn,Server,DB
1 )my.ini配置默认字符串:
dafault-character-set=utf8 # client & Conn charset;
character-set-server=utf8 # server & DB charset;
2 )PHP语句设置客户端字符集: mysql_query(“set name utf8”);
3 )创建表时指定字符集方法:
create table tab(…)engine=MyISAM DEFAULT CHARSET=utf8; (简写)
create table tabname(…)type=mysiam default character set utf8 collate utf8_generalci;
4.数据表组成:表结构文件 (),表数据文件(), 表索引文件 ();
5.数据库引擎:InnoDB支持事务处理,但不支持全文搜索, MyISAM支持全文搜索但不支持事务, MEMORY和MyISAM 一样,只不过它把数据保存在内存而不是磁盘中,这样速度更快。
———————-
二、数据库的常用操作:
———————-
1.数据库的连接:mysql -uroot -p123 -h192.168.2.2
2.退出MySQL:exit|quit|Ctrl+C
3.中断数据库的操作:c
4.MySQl服务器的关闭和退出:net stop mysql || net start mysql
5.MySQl中用户的修改:set password=password(“密码 “);
创建用户: CREATE USER ‘test1’@’localhost’ IDENTIFIED BY ‘**’;
6.MySQl中用户授权:grant all on .* to user1@192.168.190.20 identified by “密码”;
GRANT ALL PRIVILEGES ON `test1%` . TO ‘test1’@’localhost’;
7.刷新权限如:flush privileges;
在客户端修改用户权限后需要刷新数据库缓存
8.查看用户授权
use mysql
select user,password,host from user;
10.删除用户
方法一: drop user user1@”%”;
方法二:
use mysql
delete from user where user=” 用户名”;
—————–
三、数据库的操作
—————–
1.创建数据库 create database dbname ;
2.查看数据库 show databases;
3.删除数据库 drop database dbname ;
4.切换数据库 use dbname ;
———–
四、表操作
———–
1.查看表:show tables ;
2.创建表:create table tabname (field1 ,field2, fieldn);
3.删除表:dorp table [if exists] tabname ;
4.修改表名:rename table oldTabName to newTabName ;
5.查询表结构:desc tabname;
——————–
五、表内容管理
——————–
1.增加数据:insert
insert into user(name) values(“user4”);
2.删除数据:delete
//必须加where 条件,如果不加 where全部删除,这个时候应该用 truncate清空数据
delete from user where id>=3 and id<=5;
delete from user where id between 3 and 5;
3.修改数据:update
update user set name=’user5’,age=20 where id=5;
//在mysql 中没有==,只有 =,即包含赋值,又包含比较
4.查询数据:select
———————–
六、数据字段类型
———————–
1.数值 // 显示和大小
int|float|tinyint
·tinyint数值类型的无符号取值范围: 0-255
·int数值类型的无符号取值范围: 0-42亿
2.字符串 // 显示和个数
char|varchar|enum|set
·char(3)的意思是什么: 0-255
·varchar(3)的意思是什么: 0-65535
3.日期和时间( 数值)
date|time|datetime|year|timestamp
在php中把时间加工成时间戳,放到 mysql中的int 列
——————-
七、数据字段属性
——————-
1.unsigned
2.zerofill
3.auto_increment
4.null
5.not null # 如表中性别例子 ,如果有一列你设计成not null,那么给 default默认值
6.default
—————–
八**.**数据表的类型
—————–
1.myisam // 默认就是 myisam
2.innodb // 事务
创建表时指定表类型: create table t1(id int) engine=innodb;
修改表引擎类型: alter table tablename engine=innodb;
查看表类型: show create table tabname;
——————-
九**.**数据表索引设置
——————-
1.主键索引 primary key 一个表中只能有一个主键索引
添加索引 :
1).建表时就加上去
2).用alter 命令
alter table t2 add primary key(id); // 加主键
alter table t2 modify id int unsigned auto_increment; // 加无符号和自增属性
删除索引 :
alter table t2 modify id int; // 加无符号和自增属性
alter table t2 drop primary key;
2.唯一索引 unique index
// 每一列都可以是唯一索引,本列值不能重复值
3.普通索引 index
添加索引 :alter table user add index in_name(name);
删除索引 :alter table user drop index in_name;
//每一列都可以是普通索引
4.全文索引 fulltext
————————
八**.**修改数据表结构 -alter
————————
1.修改字段
1)change
·alter table user change age sex int;
#把age 的字段重命名为 sex并设置字段属性为int;【更改字段名,修改字段名】
//修改字段名的时候建议带上他原有的 int或者varchar 属性,如果不写属性会报错;
2)modify
·alter table user modify age tinyint;
2.添加字段
·alter table user add age int; //默认加到最后
·alter table user add age int first; //加到最前面去
·alter table user add age int after id; //加到id 后面
3.删除字段
·alter table user drop age;
4.添加索引
·alter table tab62 add primary key(id);
·alter table tab62 modify id int unsigned auto_incrment;
·alter table tab62 add unique un_name(name);
·alter table tab62 add index in_pass(pass);
5.删除索引
·alter table tab62 modify id int;
·alter table tab62 drop primary key;
·alter table tab62 drop index in_pass;
·alter table tab62 drop unique un_name;
6.更改表名称
1)rename table tab62 to tab26; 修改表名,非字段
2)alter table user rename to user1;
7.更改auto_increment 属性的初始值
alter table user autoincrement=1;
//truncate user; 效率快,自增列表自动从 1开始(清空表中所有数据)
8.更改表名称:alter table 旧表名 rename as 新表名
9.删除表:dorp table [if exists] 表名;
———————————–
结构化查询语言 sql**包含四个部分**:
———————————–
1.DDL // 数据定义语言 ,create,drop,alter
2.DML // 数据操作语言 ,insert,update,delete
3.DQL // 数据查询语言 ,select
4.DCL // 数据控制语言 ,grant,commit,rollback
—————————-
操作数据表中的数据记录 (DML)
—————————-
1.insert
eg:insert into user(name) values(“user4”);
2.update
update user set name=”user4” where id=4;
//在mysql 中没有==,只有 =,即包含赋值,又包含比较
update user set name=’user5’,age=20 where id=5;
3.delete
//必须加where 条件,如果不加 where全部删除,这个时候应该用 truncate清空数据
delete from user where id>=3 and id<=5; 等同于 delete from user where id between 3 and 5;
———————————
数据查询语言( DQL**)**–select 使用
———————————
1.选择特定的字段
select id,name from user;
//select from user;
2.给字段取别名-as
select id,name from user;
select id maoxian,name from user;
select id as maoxian,name from user;
3.distinct关键字的使用
//取出唯一值
select distinct age from user;
4.使用where 条件进行查询
select from user where id>=3 and id<=5;
5.查询空值null
select from user where age is null;
select from user where age is not null;
6.between and的使用方法
select from user where id between 3 and 5;
7.in的使用方法
select from user where id=1 or id=2 or id=10;
select * from user where id in(1,2,10); 建议使用这个
8.like的使用方法
//模糊查询,text 类型不能加索引
% 匹配所有
匹配一个字符
select from user where name like “%mysql%”; //% 在前,name这一列的索引会失效
9.使用order by 对查询结果排序
//排序,asc 和desc,一个是升序,一个降序
select from user order by id asc; // 默认就是升序 ,数字从小到大
select from user order by id desc; // 默认就是升序 ,数字从大到小
10.使用limit 限定输出个数 (分页实现)
select from user order by id limit 0,2;
select from user order by id limit 5; //limit 0,5 前五个
11.concat() 连接函数
select concat(id,age) from user; # 输出的值为每一行中指点的列字符串相加。
select concat(“aaa”,”bbb”,”cccc”); # 输出连接的字符串: aaabbbccc,如果没有双引号则误认为是字段,报错。
12.rand() 随机数
eg: select from user order by rand() limit 3;
13.使用统计函数:
count() 统计个数
sum() 求和
avg() 平均值
max() 最大值
min() 最小值
eg:
select count(id),sum(age),avg(age),max(id),min(id) from user;
14.group by分组聚合的 使用-select
结合合计函数,根据一个或多个列对结果集进行分组
//分组 聚合
//只分组没有意义,必须用函数去聚合 .
eg: select banji,sum(score),count(id) from user group by banji; // 从班级表中统计每个班的总分数和总人数
eg2:查找每个客户的总金额(总订单) :
————————————
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
————————————
执行语句: SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer;
结果集类似这样:
————————-
Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000
————————–
—————————————
数据查询语言( DQL**)**2–select 的多表查询
—————————————
假如下面三种方法都能实现一种表,优先选择普通多表查询。
1.普通多表查询
1)两表查询
mysql> select user.id,user.name,user.score,user.banji,tel.num from user,tel where user.id=tel.uid;
2)三表查询
mysql> select user.name,tel.num,qq.qq from user,tel,qq where user.id=tel.uid and user.id=qq.uid;
2.嵌套查询| 子查询-in
select from user where id in(select uid from tel);
3.左链接查询-left join on
select user.id,user.name,tel.num from user left join tel on user.id=tel.uid;
//左链接以左边的表为主导,先输出左边表的所有数据,按条件输出右边表的内容,没有相对应的内容就为 null
普通多表查询的三种方法,分别有什么区别:
普通多表查询,查多个表,并且可以输出多个表的内容
嵌套查询,查多个表,但只能输出一个表的内容
左链接查询,查多个表,先把左边的表全部输出,右边的表按条件输出,否者输出 null
==========================================
复习 –**最常用的语法:*
———————————–
1.DDL 数据定义语言,create,drop,alter
1)create database {database}
2)create table {table}();
2.DML 数据操作语言,insert,update,delete
1)insert into 表名 [(字段 1,字段2, 字段n)] values (‘值 1’,’值2’,’ 值n’);
2)update 表名 set 字段名 =表达式[, 字段n=表达式 n] [where 条件] [order by 字段] [limit 行数 ];
3)delete from 表名 [where 条件 ] [order by 字段] [limit 行数];
3.DQL 数据查询语言,select
select [all|distinct] {|table.*|[table.]field[as alias1][,[table.]field2[as alias2][,…]]} from tableexpression[,…][in externaldatabase] [where…] [group by…] [having…] [order by…] [limit count];
4.DCL 数据控制语言,grant,commit,rollback
1)grant 权限 on 数据库 .数据表 to 用户@登录主机 indentified by “密码”