MYSQL知识点
前言
一、mysql安装位置
安装数据库的位置 /var/lib/mysql/
配置文件存放目录 /usr/share/mysql-8.0/
启停相关脚本 /etc/init.d/
二、MySql内部组件结构:
连接层、服务层、引擎层、存储层
三、MyISM和InnoDB区别
四、(重要)join的7种查询
-- 1.内连接 查询USER和dept中都有的
select * from t_user u inner join t_dept d where u.dept_id=d.id;
-- 2.左连接 查询dept中没有的
select * from t_user u left join t_dept d on u.dept_id=d.id where d.id is null;
-- 3.右连接 查询user中没有的
select * from t_user u right join t_dept d on u.dept_id=d.id where u.dept_id is null;
-- 4. 左外连接
select * from t_user u left join t_dept d on u.dept_id=d.id;
-- 5. 右外连接
select * from t_user u right join t_dept d on u.dept_id=d.id;
-- 6. 全外连接
select * from t_user u left join t_dept d on u.dept_id=d.id union select * from t_user u right join t_dept d on u.dept_id=d.id;
-- 7. 两表独有的数据集
select * from t_user u left join t_dept d on u.dept_id=d.id where d.id is null union select * from t_user u right join t_dept d on u.dept_id=d.id where u.dept_id is null;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_dept
-- ----------------------------
DROP TABLE IF EXISTS `t_dept`;
CREATE TABLE `t_dept` (
`id` bigint(20) NOT NULL,
`dept` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime NULL DEFAULT NULL,
`update_time` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_dept
-- ----------------------------
INSERT INTO `t_dept` VALUES (1, '研发部', '2021-09-05 14:20:33', '2021-09-05 14:20:33');
INSERT INTO `t_dept` VALUES (2, '客服部', '2021-09-05 14:20:33', '2021-09-05 14:20:33');
INSERT INTO `t_dept` VALUES (3, '市场部', '2021-09-05 14:20:33', '2021-09-05 14:20:33');
INSERT INTO `t_dept` VALUES (4, '财务部', '2021-09-05 14:20:33', '2021-09-05 14:20:33');
INSERT INTO `t_dept` VALUES (8, '直播部', '2021-09-05 14:20:33', '2021-09-05 14:20:33');
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL,
`dept_id` bigint(20) NULL DEFAULT NULL,
`user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime NULL DEFAULT NULL,
`update_time` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, 1, '小红', '1582611@163.com', '2021-09-05 14:19:15', '2021-09-05 14:19:15');
INSERT INTO `t_user` VALUES (2, 2, '小华', '1583461@163.com', '2021-09-05 14:19:15', '2021-09-05 14:19:15');
INSERT INTO `t_user` VALUES (3, 3, '张三', '1547881@163.com', '2021-09-05 14:19:15', '2021-09-05 14:19:15');
INSERT INTO `t_user` VALUES (4, 6, '李四', '1320451@163.com', '2021-09-05 14:19:15', '2021-09-05 14:19:15');
INSERT INTO `t_user` VALUES (5, 7, '王五', '1356777@163.com', '2021-09-05 14:19:15', '2021-09-05 14:19:15');
SET FOREIGN_KEY_CHECKS = 1;
五、什么是索引
索引(Index)是帮助MySQL高效获取数据的数据结构。类比字典
索引的本质:索引是数据结构。
排好序的快速查找数据结构
数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。
六、优势:
1、提高数据检索的效率,降低了io的成本。
2、通过索引列对数据进行排序,降低了对数据排序的成本,降低cpu 的消耗。
七、mysql索引结构
八、什么情况下添加索引
1:主键自动建立唯一索引
2:频繁作为查询条件的字段应该创建索引
3:查询中与其它表关联的字段,外键关系建立索引 (例如:员工和部门表,之间的部门id )
4:频繁更新的字段不适合创建索引
5:Where条件里用不到的字段不创建索引
6:单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)
7:查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
8:查询中统计或者分组字段