1,导出mysql数据库里ecshop到d盘
mysqldump 指令和 mysql指令是一样的
引出一个环境变量:
就是系统找到需要运行的程序的路径
Mysqldump -u root -p 数据库名 > 导出的文件名
1,找到mysqldump.exe这个程序,它是用来备份的
2,执行备份命令
E:\wamp\mysql\bin>mysqldump -u root -pecshop > d:/ecshopbak.sql
(2)备份数据库中某个数据表
1,找到mysqldump.exe这个程序,它是用来备份的
2,执行备份命令
E:\wamp\mysql\bin>mysqldump -u root -pecshop ecs_goods > d:goodsbak.sql
导入外部数据库文件
source 指令是属于mysql的
删除数据表
droptable 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,字段(数值,字符串)
(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 wheregoods_id=9;
having:限制的条件是:前面查询的结果,这个结果有什么条件
union查询
union 联合连接
union可以将多个查询语句连接起来,select 1 union select2
(select goods_name from ecs_goods wherecat_id=3 order by shop_price desc limit 3)
union (select goods_name from ecs_goodswhere cat_id=4 order by shop_price asc li
mit 3);
//查询手机类型下面的所有的手机品牌
mysql> select cat_name from ecs_categorywhere 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 wherecat_id=(select cat_id from ecs_cat
egory where cat_name = 'GSM手机');
(2)from型子查询
需要注意:
from后面的子查询列表要有自己的别名
select goods_name from(select * fromecs_goods where cat_id in(3,5)) as t
em_goods where goods_name like '诺基亚%';
1,连接查询
当我们期望的结果,不能在一个表中获得时,就需要使用连接查询
通常使用join,在两个表中产生关联
语法:
table1 join table2 on table1的某个字段 = table2的某个字段
table1的某个字段需要使用表明.字段名的形式
(1)获得如下列表
商品名 商品价格 商品分类名称
mysql> selectgoods_name,shop_price,cat_name from ecs_goods join ecs_category on
ecs_goods.cat_id = ecs_category.cat_id;
(3)注意在处理字段时,如果出现字段名不唯一的情况,我们需要使用表名 来表示当前字段属于哪个表
select goods_name, shop_price, cat_name,cat_id from cz_goods join cz_category on cz_goods.cat_id=cz_category.cat_id;
应该这样:
(3)在连接的语句中,由于要频繁的使用表名,当碰到表名很长,或者表名很接近时,容易产生表名错误,为了避免这种错误,我们可以给表起别名
select g.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 只要右表存在数据,就会最终在结果中显示
事务:
我们在实际处理某个问题的时候,需要多条sql语句在一起才能完成某个操作,这组sql语句的关系是,要不都执行成功,要不都执行失败,这个特性就是事务
定义:
事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败
有了事务,可以保证数据在业务逻辑上是安全的
一旦我们成功的生成订单,意味着库存量要减少
在转账系统中,需要保证一个人将钱从帐号中移除,另一个人在帐号中增加某些金额
使用事务:
mysql本身支持事务,但是与mysql的存储引擎相关,只有innoDB型的存储引擎才支持事务
完成转账小例子:
(1)mysql> create table bank(namevarchar(20),money decimal(10,2))engine=innodb;
(2)mysql> insert into bankvalues('zhao',1000),('qian',400);
开始转账:
(1)先扣钱
mysql> update bank set money = money-200where name='zhao';
(2)再加钱
mysql> update bank set money = money+200where name = 'qian';
但是,如果在执行过程中,某个sql语句出现错误
(1)还是先扣钱
mysql> update bank set money=money-200where name = 'zhao';
(1)再加钱
mysql> update bank set mony= money+200where name = 'qian';
ERROR 1054 (42S22): Unknown column 'mony'in 'field list'
其中,第二条语句的字段名错误导致钱没有增加到 ‘qian’用户当中
整个系统就少了 200
使用事务解决这个问题:
如果我们发现有执行失败的操作,我们应该将整个过程中所有执行sql语句产生的影响,全部撤销,我们将整个操作称之为回滚
使用事务的步骤:
(1)开启事务,应该在这组sql执行之前,开启事务
(2)正常执行我们的sql语句
(3)当sql语句执行完毕后,存在两种可能:
①全部成功,如果全部成功,我们执行的操作叫commit(将以上sql语句对数据库的影响添加到数据库中)
②某些语句执行失败,如果某些sql语句执行失败,我们执行的操作叫rollback,将以上sql语句对数据库的影响撤销
如果我们开启了事务,在真个事务执行过程中,是不会对真实的数据库中的数据产生影响的,因此即使成功,也不会影响真实的数据库中的数据,因此我们需要将正确的执行结果,提交到数据库内,对真实的数据产生影响
触发器:
一旦我们成功的提交订单,意味着商品的库存量要减少
触发器(触发程序的定义)
触发器是保存在数据库中的程序,用于监听某个表的行为,一旦这个行为发生,就去执行相应的sql语句
这些行为包括:增加 删除 修改
例子:一旦我们生成订单,意味着商品的库存量要减少
监听的对象:order 数据表
监听的行为:生成订单(订单增加)
监听后的操作:修改goods表中的某条记录(update)
定义触发器的语法:
createtrigger 触发器名 触发器事件 ON 监听的表名 for each row 要执行的操作(sql语句)
触发器事件:
事件的组成:事件发生的时间,事件的内容
触发器发生的时间:before 还是after,某个行为发生之前还是之后,常用的是after
事件的内容:增加,删除,修改
for eachrow 监听每一行 必须写
(1)创建商品表:
mysql> insert into goodsvalues(3,'nokiaN85',3500,35),(5,'iphone4S',5000,30),(7,
'Lumia',4500,20);
(3)创建订单表:
模拟生成订单后,在order表中增加记录的操作
如何在触发程序中,使用触发的数据?
上面是写死的,我购买的是3号商品,购买了5个,那么商品表中3号商品就应该减去5个
old关键字----- 代表的是过去的记录(被删除掉的记录,更新前的记录)
new关键字---------代表新的记录(新增加的记录,或者更新后的记录)
触发程序所监听表的某个记录,不管是new还是old都是代表记录的
既然是记录,都有对应的字段
old的使用:
如果我们需要撤销订单的话,意味着将order表中的某条记录删除,此时意味着要将订单表中所关联的商品库存,再加回去
撤销订单时,会将订单表中购买的数量加回去,恢复goods表中的库存
在update更新语句中,可以使用new和old
我们在修改订单order信息时,需要先讲购买数量撤销,再增加新的购买数量
那么商品表中,先加上撤销的数量,再减去重新购买的数量
删除触发器:
drop trigger 触发器名
一个表的一个事件,只存在一个触发器
索引
什么是索引?
索引------搜索---引导------引导着我去搜索到某个记录的
定义:
没有索引的情况下,我们查询一条记录,需要从第一条记录一直往下查询,知道查找到我们需要的记录,如果记录数特别大的话,相当于大海捞针,速度特别慢
索引:建一个索引-----指向的是数据的位置-----反映到新华字典-----记录所在的页数
优势:
查询速度快了,但是不足:
增加了维护索引的工作量-----每增加一条记录----我就要在索引列表中增加一个索引号指向这条记录的位置
查询速度快了,但是增 删除 更新 速度慢了
外键:
什么是外键:
学生举例:
每个学生对应一张
个人信息表(姓名,学号)
学生详细信息表(成绩,违纪记录,获得奖励,家庭地址,学费,)
这两个表通过外键关联之后,如果有一天你毕业了,应该将你姓名,学号删除,这个学生下面对应的详细信息(成绩,违纪记录,获得奖励,家庭地址,学费)自动删除
使用外键的条件:
(4)保证数据表的存储引擎必须是innoDB
(5)外键关系的两个表的列必须数据类型相似 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 intprimary key auto_increment,foreign_id int,name
varchar(32),constraint xiaodi_for foreignkey(foreign_id) references dage(id) o
n delete cascade on updatecascade)engine=innodb default charset=utf8;
(4)使用外键将两个表关联
在当前表创建外键字段------和外部表的某个字段可关联:foreignkey(foreign_id) references dage(id)
关联起来之后监听着外部那个表,如果他删除了,我要做什么?如果他更新了,我又要做什么
on delete (参数3个) on update (参数3个)
删除外键:
alter table 表名 drop foreign key 外键名称
1,安装服务器端的软件
傻瓜式安装,但是需要注意:
(4)安装软件----安装路径不要尽量不要有中文,不要有特殊字符,不要有空格
(5)安装svn服务器的时候,区分开仓库和服务器,单独创建一个server目录
安装完成之后,如何测试是否安装成功:
打开cmd窗口,运行svn测试
开始使用svn:
需求:
两个程序员,小白(项目经理)和小黑(程序员),一起开发一个微博项目.
让小白在服务器创建一个仓库,一定是先创建一个仓库,然后把最原始的项目源码提交到仓库去,让小黑下载(checkout)一份源码并进行开发
初始化仓库、
(1)通过指令创建 svnadmin create 仓库路经
(2)(2)可视化工具创建(svn客户端创建)