基础考点
MySQL 数据类型
整型:tinyint、smallint、mediumint、int、bigint
小数型:float、double、decimal
字符串型:varchar、char、text、blob
时间日期型:time、date、datetime、timestamp
枚举类型:enum
在定义
整型数据类型
时,经常看到 int(4) 括号里指定的是显示长度
,不限制值合法范围,这个显示长度要配合zerofill
这个属性才有意义。
1、 VARCHAR 比 CHAR 更节约空间
2、 CHAR 比 VARCHAR 存储效率更好
3、 VARCHAR 与 CHAR 的长度,如果存储内容超出指定长度,会被截断
4、 存储经常改变的数据,CHAR 不容易产生碎片
尽量避免使用 BLOB/TEXT 类型,导致严重的性能开销
1、 有时可以使用枚举类型代替字符串类型
2、 枚举类型内部存储成整型(节省空间)
3、 避免使用数字作为 enum枚举 的常量,易混乱
1、 尽量使用 TIMESTAMP 来保存时间日期数据
2、 如果需要存储微秒, 可以使用 BIGINT 类型
MySQL 基础操作
连接与关闭:
mysql -u -p -h -P
MySQL 存储引擎(数据表)
MyISAM与InnoDB的区别
1、 InnoDB支持事务,MyISAM不支持事务
2、 InnoDB支持行级锁,MyISAM支持表锁
3、 InnoDB数据存储在共享表空间,MyISAM数据存储在MyD文件和MyI文件
4、 InnoDB支持奔溃后的安全恢复,MyISAM不支持
5、 InnoDB对主键查询的性能高于其他存储引擎
6、 MyISAM拥有全文索引、压缩、空间函数
MySQL 锁机制
由于并发操作的产生,所以需要
使用锁进行并发控制
锁分为2种:共享锁
和排他锁
,就是读锁
和写锁
共享锁(读锁),不堵塞,多个用户可以同时读同一资源,互不干扰
排他锁(写锁),一个写锁会阻塞其他读锁和写锁,这样只允许一个人进行写入操作,防止其他人进行读取或者写入
注意:InnoDB支持行级锁,MyISAM支持表锁
MySQL 事务处理
注意:使用事务的前提是
表必须是InnoDB引擎
安全性考点
SQL注入
使用
预处理
来防止SQL注入
特殊字符转义
写入数据库的数据必须经过
特殊字符转义
操作,此操作在应用层进行
错误记录
当发生查询错误时,不能把
错误信息
返回给用户,把错误记录到日志
索引考察点
使用索引的优缺点
优点:
1、减少服务器扫描的数据量
2、避免排序和临时表
3、随机I/O变顺序I/O
4、提高查询速度
缺点:
1、降低写的速度
2、占用磁盘
索引使用场景
非常小的表(1~1000) 不使用索引
中型(1000~100W) 使用索引
大型(100W~1000W) 使用索引
超大(1000W以上) 索引 + 分区技术
索引类型
1、普通索引
2、唯一索引 (在普通索引的基础上,加上唯一约束)
3、主键索引 (在唯一索引的基础上,加上不能为Null)
4、组合索引
5、全文索引 (少用,只适合英文)
6、外键索引 (少用,使用业务逻辑进行数据关联)
索引创建原则
1、最适合索引的列是出现在where子句中的列,或连接子句中的列,而不是出现在SELECT关键字后的列
2、索引列基数越大,效果越好
3、对字符串进行索引,应该制定一个前缀长度,可以节省大量索引空间
4、根据情况创建复合索引,复合索引能提高查询效率
5、避免创建过多的索引
6、主键尽量选择较短的数据类型
索引注意事项
1、复合索引遵循前缀原则(重要,按顺序)
2、like查询,%不能在前面(在前面索引会失效,如果要在前面请使用第三方全文索引)
3、列is Null也是可以使用索引
4、如果OR条件想用到索引,必须or前后的字段都需要是索引字段
5、列是字符串类型时,查询时一定要使用引号(单或双),索引才会生效
SQL语句关联考察点
关联操作
1、关联更新
2、关联查询
连接方式
1、交叉连接 Cross join (无条件)
select * from A CROSS JOIN B CROSS JOIN C;
2、内连接 INNER JOIN (有条件的交叉连接) 简写 JOIN
select * from A INNER JOIN B INNER JOIN C ON A.id = B.id;
select * from A,B where A.id = B.id;
select * from A T1 INNER JOIN A T2 ON T1.id = T2.id;
3、外连接
左外连接 LEFT JOIN
右外连接 RIGHT JOIN
4、联合连接 (UNION重复的合并,UNION ALL重复的不合并)
SELECT * FROM position UNION SELECT * FROM team;
SELECT * FROM position UNION ALL SELECT * FROM team;
**UNION ALL性能高于UNION**
5、全连接(MySQL不支持)
MySQL高扩展与高可用
分库
分表(水平与垂直)
读写分离
主从复制
负载均衡