关联查询
- 分析过程
1.确定实体间是否有关系
2.确定是几对几的关系
3.确定在哪个实体中建立字段
自关联
- 结构相同的又具有一对多关系的数据,放在一张表里,把自己表的id值当做外键,形成自关联。
- 物理上是一张表,逻辑上是多张表。通过连接查询将原来多个表合成一张大表。
create table areas(
id int primary key auto_increment not null,
title varchar(20),
pid int,
foreign key(pid) references areas(id)
);
- 查询包含省和下属市的表
select pro.*,city.* from areas as pro
inner join areas as city on pro.id=city.pid
where pro.pid is null and pro.title='山西省';
实测:pro.pid is null 不要也可以 - 适用条件
有一个表的行数很有限,几个表的结构很相似,业务逻辑是相近的———>把他们存在一张表里
视图
- 视图本质是对查询的一个封装,简化了查询语句调用
- 用法: create/alter view 名字 as xxxx;
xxxx为查询语句代码即select xxx from xxx where xxx
create 为创建,alter为修改,选择一个即可
事务
- 当一个业务逻辑需要多个sql完成时,如果其中某条sql语句出错,则希望整个操作都退回
- 使用事务可以完成退回的功能,保证业务逻辑的正确性
- 事务四大特性(简称ACID)
- 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行
- 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致
- 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的
- 持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障
- 要求:表的类型必须是innodb或bdb类型,才可以对此表使用事务
- 作用:保证业务逻辑的完整性
- 事务语句
begin; // 启动事务
操作语句
commit; 或者 rollback; //提交或回滚
索引
- 查看索引:show index from 表名;
- 创建索引:create index indexName on 表名(列1,列2);
- 删除索引:drop index [indexName] on 表名;
- 索引的缺点:
- 虽然索引大大提高了查询速度,同时降低更新表的速度,如对表进行insert,update,delete。因为更新表时,mysql不仅要保存数据,还要保存索引文件
- 建立索引会占用磁盘空间的索引文件
补充
alter table 表名 change|modify
1,可以使用CHANGE old_col_name column_definition子句对列进行重命名。重命名时,需给定旧的和新的列名称和列当前的类型。
2,如果您想要更改列的类型而不是名称, CHANGE语法仍然要求旧的和新的列名称,即使旧的和新的列名称是一样的。
3,当需要修改字段名称时使用change;当需要修改字段类型时使用modify,毕竟modify还是比change少写个字段名称的,相对简单聚合函数:count(*)计算总行数, max(列) , min(列), sum(列),avg(列) 可以与group by组合使用。
- 新建表的开销很大,在表添加数据的开销较小
- 开启运行时间监测:set profiling=1;
执行语句;
查看执行时间:show profiles;可查看之间所有执行语句的耗时 - 额外插入外键约束:
alter table 表名 add constraint 约束名称 foreign key(列) references 关联表名(列); - case when then函数
//demo:
case sex
when '1' then '男'
when '2' then '女’
else '其他' end