mysql数据库复习加强

一.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 外键名称

 

你可能感兴趣的:(mysql数据库复习加强)