一.基本数据类型
1.1 整数类型
tinyint,smallint,mediumint,int,bigint,分别是1,2,3,4,8字节,
任何整数类型都可以加上unsigned,表示无符号(非负整数)
1.2 实数类型
float,double,decimal
decimal有precision(整数和小数一共的数字)和scale(小数部分的数字)两个属性 可以用来存储比bigint还大的整形,能存储精确的小数
float,double比decimal效率高一点
1.3 字符串类型
varchar,char,text,blob
char:固定长度类型。优点:效率高,缺点:占空间
varchar:可变长度。每个值占用的字节加一个记录长度的字节
空间上比较合适,效率较低
1.4 枚举类型(enum)
一种预定义的集合
1.5 日期和时间类型
尽量使用timestamp,空间效率高于datetime
如果需要存储微秒,可以使用bigint存储
1.6具体分析
1.6.1 varchar(50)中50的含义
最大占50字符,早期mysql是指字节,现在是字符
1.6.2 int(20)中20的含义
表示的是数据长度,而非存储大小,占4字节存储
1.6.3 int(10)和char(10)以及varchar(10)
int的10表示的是数据长度,varchar和char表示的是存储数据的大小,也就是存储多少个字符
char10表示存储空间定10字符,不足用空格补齐,占用更多的空间
varchar表示的是变长字符,存多少个就是多少个字符,空格也按字节存储,char的空格是占位,不算一个字符
1.6.4 float和double的区别
存储8位十进制,内存中占4字节
存储18位十进制,内存中占8字节
1.6.5 drop,delete,truncate区别
drop:删整个表的时候
delete:删表中部分数据
truncate:保留表,删表中所有数据
1.6.6 union和union all的区别
union all,不会合并重复的纪录行,在没有去重的情况下,效率比union高
union会进行重复行合并,并排序(相当于distinct)
二.数据库经常使用的函数
- count(*/column):返回行数
- sum(column): 返回指定列中唯一值的和
- max(column):返回指定列或表达式中的数值最大值
- min(column):返回指定列或表达式中的数值最小值
- avg(column):返回指定列或表达式中的数值平均值
- date(Expression): 返回指定表达式代表的日期值
三.常用sql语句
3.1 sql语句分类
- 数据定义语言DDL create,drop,alter
- 数据查询语言DQL select
- 数据操控语言DML insert,update,delete
- 数据控制语言DCL grant,revoke,commit,rollback
3.2 sql语法顺序
- SELECT
- FROM
- JOIN
- ON
- WHERE
- GROUP
- HAVING
- UNION
- ORDER BY
- LIMIT
3.3 sql执行顺序
- FROM:将数据从硬盘加载到数据缓冲区,方便对接下来的数据进行操作。
- WHERE:从基表或视图中选择满足条件的数据。(不能使用聚合函数)()
- JOIN
- ON:join on实现多表连接查询
- GROUP BY:分组,一般和聚合函数一起使用。
- HAVING:在表中筛选出符合条件的数据(类似于where)。(一般与GROUP BY进行连用)
- SELECT:查询的数据集需要哪些列。
- DISTINCT:去重的功能。
- UNION:将多个查询结果合并(默认去掉重复的记录)。
- ORDER BY:进行相应的排序。
- LIMIT 1:显示输出一条数据记录
3.4 sql约束分类
- NOT NULL:非空
- UNIQUE:不能重复
- PRIMARY KEY:主键
- FOREIGN KEY:外键
- CHECK:字段范围
3.5 六种关联查询
A:3X3 B2X3
- 交叉连接(cross join)(9X5)
- 内连接(inner join)(交集)
- 外连接(left join/right join)(以左/右为标准的交集)
- 联合查询(union /union all)()
- 全连接(full join)
四.sql优化
4.1数据库优化经验
- sql大写,因为数据库是编译成大写字母再执行的
- 合理使用索引,索引会占用磁盘空间,加快查询速度的同时,会降低增删改的速度。
- 保证数据库完整性的同时,可以不遵从三大范式,合理使用外键,因为他会影响增删改的性能
- jdbc使用preparedStatement来创建sql,sql语句会预编译在此对象中,他会比Statement速度快
4.2怎么优化sql查询语句
- 合理使用索引,在where或order by涉及的列建立索引
- 避免全表扫描,where
- 避免select *,SQL尽量大写
4.3定位慢sql,及其解决
4.3短时间提高mysql性能
- 先处理掉占着连接不工作的线程,断开事物内空闲的连接
- 减少连接过程的消耗,慢sql(索引的设计,sql语句)
五.sql生命周期
- 应用服务器与服务器建立一个连接
- 数据库进程拿到请求sql
- 解析并生成执行计划,执行
- 读取数据到内存并进行逻辑处理
- 发给客户端数据
- 关闭连接,释放资源