这篇博客是对我自己的学习的一个记录。
1.如何设计一张表?
- 确定需求
- 找到对象(明确的实体)
- 找到关系
- 确定属性
- 确定属性类型以及其他越是
- 可以有优化的进阶部分
2.对于表的增删改查没什么可说的,值得注意的是有一个truncate + 表名功能是把表截断,不要在生产环境用。
如果要在生产环境中修改表的结构,通常会导致短时间内的服务停止,这是不能允许的,所以一般的做法是,先用一个表拷贝现有的旧表,同时修改成想要的结构,最后旧表成为代替表,新表成为旧表,补上缺少的数据,这是一个原子操作。
create tab new_table to backup ,new_table to old_table
我目前学的查询包括一下几种 - 普通查询
- 聚合查询
- 连表查询
- 子查询
普通查询用select查询where加上后面语句做条件order by 排序
聚合查询里面的分组聚合写法为
select + group BY后面的字段或者聚合函数 FROM 表名 grop BY字段(可以有多个字段)
注意这里不要搞混Group by和 order by
还有一个知识点是,having和where都是条件查询但是两个有差别。
HAVING是在分组聚合的查询结果上继续过滤的
使用Where子句指定条件时,由于排序之前就对数据进行了过滤
关于mysql的内置函数
mysql有很多关于计算的函数,但是因为mysql的效率较差,所以最好让mysql只做储存,不要计算。
连表查询:当没有指定连表条件时,得到的结果数量为两个表的数据的笛卡尔乘积。
连表查询包括以下两种
- 内联查询:只保留共有部分
- 外联查询:包括左外联,右外联,全外联(mysql不支持全外联)
具体例子为
select …From 表1,表2 where 表1.id = 表2.class_id
select…From 表1 join 表2 on 表1.id = 表2.class_id where
select…From 表1 left join 表2 on 表1.id = 表2.class_id where
(把上面的left改成right就是右外联)
可以说内联是求交集,外联是求并集。
子查询:查询结果作为两种情况使用 - 条件
- 新的表用来诚信查询。
注意一点,作为结果二次查询,要起别名才能使用。
这里记一下,查询时mysql面试考察的重点。
小知识点:DML和DDL的区别
DML(Data Manipulation Languag)使用增删改查来修改数据,
如insert,delete,update,select都是DML。
而DDL用来创建和操作表的结构的。
如creat,alter,drop,是隐式提交的,不能rollback.