一.mysql数据库复习加强
1,导出mysql数据库里ecshop到d盘
mysqldump 指令和 mysql指令是一样的
引出一个环境变量:就是系统找到需要运行的程序的路径
Mysqldump -u root -p 数据库名 > 导出的文件名
1,找到mysqldump.exe这个程序,它是用来备份的
2,执行备份命令
E:\wamp\mysql\bin>mysqldump -u root -p ecshop > d:/ecshopbak.sql
(2)备份数据库中某个数据表
1,找到mysqldump.exe这个程序,它是用来备份的
2,执行备份命令
E:\wamp\mysql\bin>mysqldump -u root -p ecshop ecs_goods >d:goodsbak.sql
导入外部数据库文件:source 指令是属于mysql的
删除数据表:drop table ecs_goods;
清空数据表中的数据:delete from 表名
delete 和 drop 区别:
delete q清空数据表中的数据(结构)
drop 删除整个表
编码:
utf-8 统一的编码,它支持中文和英文,建议建表的时候都是用utf-8,利于网站国际化
gb2312 支持大陆的中文,
gbk 包括gb2312,支持韩文,日文,香港。。。
mysql 数据库数据类型(列类型)
1,数值类型(整型,浮点型,定点型)
2,字符串类型(char, varchar,text,enum(枚举类型))
但是enum类型由于兼容性和移植性,不太建议使用
3,日期和时间类型
datetime()------年月日时分秒
date----------年月日
time--------时分秒
时间戳表示时间---------timestamp---------now()
int表示的范围是 --- 0---
tinyint 表示的范围------0-255
smallint--------
有符号 signed ------正负数 -128 到 127 表示的范围也是255个长度
无符号 unsigned------没有正负数 0 -255
如果给全班同学建表
unsinged
字符串类型
char 定长(固定长度)字符串----- 0-65535
varchar 可变长度----varchar (255)多少个字节 ,最多255个
text 大的文本数据
时间日期类型
date()
解析这个数据库函数
timestamp ------------不解析-----所以速度要比mysql日期函数快
优化表注意事项:
1,创建id-----尽量表前缀连上id,假如 商品表 goods_id 分类表 cat_id
2,创建表的时候---指定存储引擎------如果查询为主的话,engine=myisam ,为了避免乱码----指定utf8 default charset
3,尽量使用时间戳或字符串 表示日期和和时间
4,字段(数值,字符串)
查询例题:
1)in()在某个范围(集合)之间
//获得 商品id 为 3, 5, 7 ,8 这几个商品的信息
select goods_id from ecs_goods where goods_id in(3,5,7,9);
(2)Between and 在两个值之间的数据
//查询价格在1000-1500之间的商品信息
select * from ecs_goods
where shop_price between 1000 and 1500;
(3)Order by排序 排序方法(升序ASC,降序DESC)
//将获得的商品按照 价格 由高到低 排序
select * from ecs_goods order byshop_price desc;
(4)limit限定获得数据的数量
//获得价格最高的前十个商品
select * from ecs_goods
order by market_price asc limit 2;
limit 偏移量,想要获得的记录数量
//获得价格最高的 十个商品 除掉最高的前十个
select * from ecs_goods
order by market_price asc limit10,10;
(5)查询不同的商品分类下面,商品价格的总和
select sum(shop_price) from ecs_goods group by cat_id;
(6)查询不同的商品分类下面,最高的商品
selectgoods_name,max(shop_price) from ecs_goods group by cat_id;
(7)查询不同的商品分类下面,商品价格的平均数
select avg(shop_price) from ecs_goods group by cat_id;
(8)计算商品的平均价格在1000元以上的商品的分类:
select avg(shop_price) from ecs_goods group by cat_id having avg(shop_price)>1000;
(9)查询手机类型下面的商品名称
Select cat_name from ecs_category where cat_id=1 union select cat_namefrom ecs_category where parent_id=1;
(10) 查询 GSM手机 下的商品有哪些?
Select goods_name from ecs_goods where cat_id=(select cat_id fromecs_category where cat_name=”GSM手机”);
(11) 取得商品分类为3或5,商品名为 诺基亚开头的数据
Select goods_name from(select * fromecs_goods where cat_id in(3,5)) as tem_goods where goods_name like “诺基亚%”;
(12)查询2门及两门以上不及格人的平均成绩
Selectavg(score),name from s where name in(select name from s where score<60 groupby name having count(*)>=2)group by;
连接查询:
语法:table1 join table2 on table1的某个字段 = table2的某个字段
table1的某个字段需要使用 表明.字段名的形式
eg: (1)获得如下列表 商品名 商品价格 商品分类名称
select goods_name,shop_price,cat_name from ecs_goods joinecs_category on ecs_goods.cat_id = ecs_category.cat_id;
(2)要求 以上列表 商品价格不能低于1000
selectg.goods_name, g.shop_price, c.cat_name, g.cat_id from cz_goods as g join cz_category as c ong.cat_id=c.cat_id where g.shop_price>= 1000;
join的分类
inner join 将左表和右表同时存在的数据,最终在结果中显示
left join 只要左表存在数据,就会最终在结果中显示
right join 只要右表存在数据,就会最终在结果中显示
事务:
1,什么是事务?
我们在实际处理某个问题的时候,需要多条sql语句在一起才能完成某个操作,这组sql语句的关系是,要不都执行成功,要不都执行失败,这个特性就是事务
2,事务的定义:
事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,有了事务,可以保证数据在业务逻辑上是安全的
3,使用事务解决该问题的步骤:
(1)开启事务,应该在这组sql执行之前,开启事务
(2)正常执行我们的sql语句
(3)当sql语句执行完毕后,存在两种可能:
①全部成功,如果全部成功,我们执行的操作叫commit(将以上sql语句对数据库的影响添加到数据库中)
②某些语句执行失败,如果某些sql语句执行失败,我们执行的操作叫rollback,将以上sql语句对数据库的影响撤销
[如何使用:
(1)在执行sql语句之前,我们要开启事务 start transaction;
(2)正常执行我们的sql语句
(3)当sql语句执行完毕,存在两种情况:
1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ
2,某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销]
触发器:
1,触发器(触发函数的定义)
触发器是保存在数据库中的程序,用于监听某个表的行为,一旦这个行为发生,就去执行相应的sql语句
2,定义触发器的语法:
create trigger 触发器名 触发器事件 ON 监听的表名 for each row 要执行的操作(sql语句)
触发器事件组成:
触发器发生的时间:before after某个行为发生之前还是之后
事件的内容:增加,删除,修改
3删除触发器: drop trigger 触发器名
一个表的一个事件,只存在一个触发器
[如何在触发器中使用触发数据?
什么是触发的数据:就是用户在订单表中购买的数量
new 关键字代表新增加的数量,订单表中新下的订单数量
old 关键字代表是旧的记录(过去的记录,取消的订单数量)]
二.mysql 索引外键加强
索引
1,索引
定义:没有索引的情况下,我们查询一条记录,需要从第一条记录一直往下查询,知道查找到我们需要的记录,如果记录数特别大的话,相当于大海捞针,速度特别慢
索引:建一个索引-----指向的是数据的位置-----反映到新华字典-----记录所在的页数
优势:查询速度快了
不足:增 删除 更新 速度慢了
2.索引的分类:
(1),主键索引:当我们创建一个表后,指定主键后,自动将主键设置为主键索引
(2),普通索引:就是在一个普通的字段上建立索引
(3),唯一索引:数据表中的某个字段是唯一的,没有重复----
(4),全文索引:在某个字段上建立全文索引,将记录内的关键字抽取出来,然后对每个关键字进行索引 sphinx-----可以建立全文索引
3.创建索引:
(1)create [索引类型] index 索引名 on 表名(表的某个字段上)
Eg: create index goods_name ongoods(goods_name);
(2)alter table 表名 add [索引类型] index (表的字段)
Eg:alter table goods addindex (goods_number);
4.创建索引之前查询的记录数
Eg: mysql> explain select * from goods\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: goods
type: ALL
possible_keys: NULL //可能用到的索引
key: NULL //真是用到的索引
key_len: NULL
ref: NULL
rows: 8 //查询的记录数
Extra:
1 row in set (0.00 sec)
5.创建索引之后查询一条记录,经过的记录数
mysql> explain select * from goods where goods_number=23\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: goods
type: ref
possible_keys: goods_number
key: goods_number
key_len: 5
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)
6.删除索引:
(1)//删除索引(方法一)
mysql> drop index goods_number on goods;
Query OK, 8 rows affected (0.06 sec)
Records: 8 Duplicates: 0 Warnings: 0
(2)//删除索引(方法二)
mysql> alter table goods drop index goods_name;
Query OK, 8 rows affected (0.08 sec)
Records: 8 Duplicates: 0 Warnings: 0
7.修改索引:只能是先删除在增加
外键:
1.使用外键的条件:
(1)保证数据表的存储引擎必须是innoDB
(2)外键关系的两个表的列必须数据类型相似 int tinyint int----------varchar
2.外键定义的语法:
create table tem(id int, name varchar, foreign key(id) referencesoutTable(id) on delete cascade on update cascade )
3.监听的外键表的行为:delete update
4.(1)foreignkey(id) 指定当前表哪个字段是外键
(2)references 和外部哪个表关联
(3)constrict ‘’; 指定一个名称,(外键关联的名称,为了将来删除这个外键的话,通过这个名称来删除)约束的名称
5.mysql> create table xiaodi(id int primary keyauto_increment,foreign_id int,name
varchar(32),constraintxiaodi_for foreign key(foreign_id) references dage(id) o
n delete cascade on update cascade)engine=innodb default charset=utf8;
(1)使用外键将两个表关联
在当前表创建外键字段------和外部表的某个字段可关联:foreignkey(foreign_id) references dage(id)
关联起来之后监听着外部那个表,如果他删除了,我要做什么?如果他更新了,我又要做什么
on delete (参数3个) on update (参数3个)通常使用cascade
6.删除外键:
alter table 表名 drop foreign key 外键名称