当前位置:Gxlcms > mysql > mysql数据库总结复习_MySQL

mysql数据库总结复习_MySQL

时间:2021-07-01 10:21:17 帮助过:29人阅读

bitsCN.com

mysql数据库总结复习

1.mysql数据库复习加强

2.mysql事务触发器

3.mysql 索引外键加强

4.zendstudio 的安装使用

5.svn版本控制器的使用

1.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日期函数快

我建议使用时间戳表示时间

练习:

给我们的同学建一张数据表,字段包括

学生id

姓名

入学时间

tinyint 255 -128 127 0-255

unsigned

varchar(10) 可变长度,最多10个字节,真正使用几个给你分配几个

char() ---------定长 0-65535,不管字符串或多或少都占用 65535长度

name

time

date, datetime mysql内置的日期函数,mysql引擎查询的时候要先解析 函数,速度慢

timestamp 字符串(‘2013-04-16’)

优化表注意事项:

1,创建id-----尽量表前缀连上id,假如 商品表 goods_id 分类表 cat_id

2,创建表的时候---指定存储引擎------如果查询为主的话,engine=myisam ,为了避免乱码----指定utf8 default charset

3,尽量使用时间戳或字符串 表示日期和和时间

4,字段(数值,字符串)

(2)查询语句:

获得商品id为 3 5 7 8 的商品信息

group by 分组的使用

1,商品表和商品分类表,通过在商品表中增加 cat_id字段,关联起来了

2,ecs_category分类表,保存的是商品的分类 id

注意:

//查询不同cat_id,下面对应的不同的商品数量

(1)先根据分类,分组

(2)再统计分组里面的商品的数量

group by 根据xx来分组,

如果合计函数,和group by 一起使用的话,统计的是当前分组内的数据

练习题:

查询不同的商品分类下面,商品价格的总和

查询不同的商品分类下面,价格最高的商品

查询不同的商品分类下面,商品价格的平均数

合计函数:

Max:最大值

M1in:最小值

Count():统计总的记录数

Avg:平均数

Sum:求和

having 和 where 区别:

where:限制的是整个数据表中字段

select goods_name from ecs_goods where goods_id=9;

having: 限制的条件是:前面查询的结果,这个结果有什么条件

union查询

union 联合 连接

union可以将多个查询语句连接起来,select 1 union select2

(select goods_name from ecs_goods where cat_id=3 order by shop_price desc limit 3)

union (select goods_name from ecs_goods where cat_id=4 order by shop_price asc li

mit 3);

//查询手机类型下面的所有的手机品牌

mysql> select cat_name from ecs_category where cat_id=1 union select cat_name fr

om ecs_category where parent_id=1;

子查询

如果一个select查询语句 包含了另一select查询语句 就称之为子查询

(1)select型子查询

select goods_name from ecs_goods where cat_id=(select cat_id from ecs_cat

egory where cat_name = 'GSM手机');

(2)from型子查询

需要注意:

from后面的子查询列表 要有自己的别名

select goods_name from(select * from ecs_goods where cat_id in(3,5)) as tem_goods where goods_name like '诺基亚%';

思路1:

select avg(score),name from score where name in(select name from score where score < 60 group by name having count(*)>=2) group by name;

思路2:

1,统计每个分组中,分数小于60的功课数量

select count(subject) as na from score group by subject having na >=2;

思路3:

1,统计每个分组中,分数小于60的功课数量

select sum(score<60) as su from score group by name having su>=2;

select avg(score),name from score where name in(select name from score where score < 60 group by name having count(*)>=2) group by name;

2.mysql事务触发器

1,连接查询

union 连接的是多个select 语句

join 连接查询:

当我们期望的结果不再同一张表上时,我们需要使用join连接查询

语法:

table1 join table2 on table1的某个字段 = table2的某个字段

条件是 商品表中商品的分类id = 分类表中这个分类的id

当查询语句中,多次使用某个表,或者这个表名特别长的时候,我们建议给这个表添加一个别名

mysql> select goods_name,shop_price,cat_name from ecs_goods as g join ecs_catego

ry as c on g.cat_id = c.cat_id where g.shop_price>=1000;

join的分类:

左连接查询 left join:查询的结果是只要左边有的记录,都会显示,右边没有的显示为null

右连接查询 right join

内连接查询 inner join : 查询的结果是两个表都有的数据

事务:

什么是事务?

事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务

注意:mysql数据支持事务,但是要求必须是innoDB存储引擎

解决这个问题:

mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全

如何使用:

(1)在执行sql语句之前,我们要开启事务 start transaction;

(2)正常执行我们的sql语句

(3)当sql语句执行完毕,存在两种情况:

1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ

2,某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销

php代码:

开启事务后,只要不执行commit,sql语句不会对真实的数据库造成影响

只有执行commit之后,才会对真实数据库造成影响

触发器:

触发器是数据库的一个程序,他是用来监听着数据表的某个行为,一旦数据表的这个行为发生了,马上执行相应的sql语句

触发器的语法结构:

create trigger 触发器的名称 触发器事件 on 监听的表名 for each row 行为发生后执行的sql语句

触发器事件组成:;两部分组成:

触发器事件发生的时间-----是在监听的表的行为 after before 常用的是after

触发器执行的内容:增删改

创建order 表的时候,需要注意,因为order在mysql中是一个关键字 排序,为了避免错误的发生,我们可以添加反引号,表明这不是一个关键字

如何使用触发器:

案例研究:

一旦生成订单,对应的库存表要减去相应的数据

(1)建商品表和订单表

订单表

(2)给订单表绑定触发器,一旦订单表增加订单,马上执行sql语句,将商品库存表减去相应的数据

现在有个问题:

每次下订单后,库存表都是减去相应的数量固定死的,但是我们的需求是:用户下几个订单,库存表减去几个库存

如何在触发器中使用触发数据?

什么是触发的数据:就是用户在订单表中购买的数量

new 关键字代表新增加的数量,订单表中新下的订单数量

old 关键字代表是旧的记录(过去的记录,取消的订单数量)

new 的使用:

old的使用:

旧的过去的记录,之前买了几个商品,但是又不想要了,取消订单

取消订单后,库存中要增加的相应的数量

update中new 和 old的使用

现在的需求是:

之前购买了5个samsung手机,现在想买10个,需要更新订单表

这个时候,触发器就需要监听着 update这个行为

先将之前下的订单撤销,再重新下订单

触发器是什么?

用来监听数据表的某个行为(insert,delete,update),一旦这个行为发生了,马上执行相应的sql语句

删除触发器:

drop trigger 触发器的名称

3.mysql 索引外键加强

1,索引

什么是索引?

索引------搜索---引导------引导着我去搜索到某个记录的

定义:

没有索引的情况下,我们查询一条记录,需要从第一条记录一直往下查询,知道查找到我们需要的记录,如果记录数特别大的话,相当于大海捞针,速度特别慢

索引:建一个索引-----指向的是数据的位置-----反映到新华字典-----记录所在的页数

优势:

查询速度快了,但是不足:

增加了维护索引的工作量-----每增加一条记录----我就要在索引列表中增加一个索引号指向这条记录的位置

查询速度快了,但是增 删除 更新 速度慢了

扩展一点

数据库中索引保存在哪里?

保存在

索引的分类:

1,主键索引:当我们创建一个表后,指定主键后,自动将主键设置为主键索引

2,普通索引:就是在一个普通的字段上建立索引

3,唯一索引:数据表中的某个字段是唯一的,没有重复----

4,全文索引:在某个字段上建立全文索引,将记录内的关键字抽取出来,然后对每个关键字进行索引 sphinx-----可以建立全文索引

创建索引:

(1)create [索引类型] index 索引名 on 表名(表的某个字段上)

(2)alter table 表名 add [索引类型] index (表的字段)

创建索引之前查询的记录数

创建索引之后查询一条记录,经过的记录数

删除索引:

修改索引:

只能是先删除在增加

外键:

什么是外键:

学生举例:

每个学生对应一张

个人信息表(姓名,学号)

学生详细信息表(成绩,违纪记录,获得奖励,家庭地址,学费,)

这两个表通过外键关联之后,如果有一天你毕业了,应该将你姓名,学号删除,这个学生下面对应的详细信息(成绩,违纪记录,获得奖励,家庭地址,学费)自动删除

使用外键的条件:

(1)保证数据表的存储引擎必须是innoDB

(2)外键关系的两个表的列必须数据类型相似 int tinyint int----------varchar

外键定义的语法:

create table tem(id int, name varchar, foreign key(id) references outTable(id) on delete cascade on update cascade )

监听的外键表的行为:delete update

foreign key(id) 指定当前表哪个字段是外键

references 和外部哪个表关联

constrict ‘’; 指定一个名称,(外键关联的名称,为了将来删除这个外键的话,通过这个名称来删除)约束的名称

mysql> create table xiaodi(id int primary key auto_increment,foreign_id int,name

varchar(32),constraint xiaodi_for foreign key(foreign_id) references dage(id) o

n delete cascade on update cascade)engine=innodb default charset=utf8;

(1)使用外键将两个表关联

在当前表创建外键字段------和外部表的某个字段可关联:foreign key(foreign_id) references dage(id)

关联起来之后监听着外部那个表,如果他删除了,我要做什么?如果他更新了,我又要做什么

on delete (参数3个) on update (参数3个)

当前表监听着 外键关联的那个表,监听的行为有两种(delete,update),一旦这些行为发生之后,我(xiaodi)要做哪些操作

操作分为3中(常用的有3中),cascade:瀑布,表示跟随着外键关联的哪个表

restrict 严格,表示外部关联的那个表删除了,我自己严格要求自己(不跟随变化)

NO ACTION -------- 无动作,没有反映

删除外键:

alter table 表名 drop foreign key 外键名称

重置数据库密码

(1)我们要明确数据库的密码保存在哪里?

mysql数据库 的 user表

要想修改密码,先进入mysql窗口,然后修改user表的password字段

步骤:

(1)先关闭mysqld服务器端的进程

(2)再次开启mysqld这个服务,以不带权限验证形式开启(再打开一个窗口,开启mysqld-nt.exe这个进程之后不要关闭窗口)

(3)通过客户端 链接到mysql服务器端,这个时候我们登录的是root用户

(4)赶紧修改密码 注意:需要使用mysql的password()加密函数加密

(5)赶紧把跳过权限验证登录的形式 关闭(结束进程,重新开启服务进程)

4.zendstudio 的安装使用

如同dw notepad 的结合体~

5.svn版本控制器的使用

包括服务器端, 客户端

服务器端在根目录创建repository库存放库文件 如 weibo

在cmd窗口 运行 svnserve -d -r create 路径

在客户端创建文件夹并从相关路径获取即可

修改文件后 使用commit 交托给服务器

更新时使用update 选择相应version进行更新

bitsCN.com

人气教程排行