搜索
首页数据库mysql教程mysql数据库总结复习_MySQL

mysql数据库总结复习_MySQL

Jun 01, 2016 pm 01:35 PM
ecshop控制器数据库触发器

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 =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=2;

select avg(score),name from score where name in(select name from score where score =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
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL的许可与其他数据库系统相比如何?MySQL的许可与其他数据库系统相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL许可证。1)GPL许可证允许自由使用、修改和分发MySQL,但修改后的分发需遵循GPL。2)商业许可证可避免公开修改,适合需要保密的商业应用。

您什么时候选择InnoDB而不是Myisam,反之亦然?您什么时候选择InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

选择InnoDB而不是MyISAM的情况包括:1)需要事务支持,2)高并发环境,3)需要高数据一致性;反之,选择MyISAM的情况包括:1)主要是读操作,2)不需要事务支持。InnoDB适合需要高数据一致性和事务处理的应用,如电商平台,而MyISAM适合读密集型且无需事务的应用,如博客系统。

在MySQL中解释外键的目的。在MySQL中解释外键的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL中有哪些不同类型的索引?MySQL中有哪些不同类型的索引?Apr 25, 2025 am 12:12 AM

MySQL中有四种主要的索引类型:B-Tree索引、哈希索引、全文索引和空间索引。1.B-Tree索引适用于范围查询、排序和分组,适合在employees表的name列上创建。2.哈希索引适用于等值查询,适合在MEMORY存储引擎的hash_table表的id列上创建。3.全文索引用于文本搜索,适合在articles表的content列上创建。4.空间索引用于地理空间查询,适合在locations表的geom列上创建。

您如何在MySQL中创建索引?您如何在MySQL中创建索引?Apr 25, 2025 am 12:06 AM

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL与Sqlite有何不同?MySQL与Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要区别在于设计理念和使用场景:1.MySQL适用于大型应用和企业级解决方案,支持高性能和高并发;2.SQLite适合移动应用和桌面软件,轻量级且易于嵌入。

MySQL中的索引是什么?它们如何提高性能?MySQL中的索引是什么?它们如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是数据库表中一列或多列的有序结构,用于加速数据检索。1)索引通过减少扫描数据量提升查询速度。2)B-Tree索引利用平衡树结构,适合范围查询和排序。3)创建索引使用CREATEINDEX语句,如CREATEINDEXidx_customer_idONorders(customer_id)。4)复合索引可优化多列查询,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。5)使用EXPLAIN分析查询计划,避

说明如何使用MySQL中的交易来确保数据一致性。说明如何使用MySQL中的交易来确保数据一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事务可以确保数据一致性。1)通过STARTTRANSACTION开始事务,执行SQL操作后用COMMIT提交或ROLLBACK回滚。2)使用SAVEPOINT可以设置保存点,允许部分回滚。3)性能优化建议包括缩短事务时间、避免大规模查询和合理使用隔离级别。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能