目录
一、数据库分类
1.1、按照业务来划分
1:关系型数据库:mysql(最多),pgsql,oracle(并发最高的),OceanBase(分布式)
每个表之前可以形成关联,叫做关系型数据库。
2:非关系型数据库:每个表之间都没有联系。redis(key-value),mongoDb(存聊天记录),非关系型数据库天然具有分布式属性,性能也优于关系型数据库。
1.2、按照架构来划分
按照架构来分:
内存型数据库:将数据库里的数据存到内存里面,内存一个特性(断电或者重启,数据就丢了),所以说内存型数据库,一般都要做好持久化措施。
redis持久化策略:(都会将这个方案结合)
1,记录日志:key的每次增删改都会在磁盘里面记录一条日志。
2,快照:每隔一分钟,将redis里存放的值打一个快照。
优点:快
非内存性数据库:mysql,mongoDb:存放到磁盘(都会选择机械硬盘)
二、基础sql语句解析
2.1、首先在数据库中先建表
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_name` varchar(255) COLLATE utf8_bin NOT NULL,
`password` varchar(255) COLLATE utf8_bin NOT NULL,
`status` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `t_class` (
`user_id` int NOT NULL,
`class_name` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
2.2、语句分析
1、插入语句关键字是insert,如下values后括号的内容与前面的列一一对应。
insert t_user(user_name,password,status) values("张三","123","1"),("李四","223","0");
结果是:
2、修改语句关键字是update,如下
set后面需要写修改哪个属性
update t_user set user_name = "王五",password = "456" where id = 1;
结果是
3、删除语句关键字是delete,如下
delete from t_user where id = 1;
结果是
4、查询和or关键字
表里字段
select * from t_user where id = 2 or status = 0 and id = 4;
结果是下图所示,原因是and的优先级更高,实际执行的是id=2 or(status=0and id=4)
5、like关键字:模糊查询,字段记得一部分的时候用此关键字查询
如果引号里不加%,like相当于等号的作用
select * from t_user where user_name like '%四%';
6、distinct是去重关键字,在查询类别是可以去掉重复的类别。
7、in关键字
在某个范围内查询,mysql最大查询5000个以内的数据。
select * from t_user where user_name in("李四");
8、group by 分组,和函数一起使用,求平均值,求最大值,算总和
group by 是根据某一列或多列属性进行分组
select user_name,count(user_name),status from t_user GROUP BY user_name,status
结果是
9、order by 和limit
order by是对数据进行升序或降序排列,limit是对数据的显示做限制
如下图是根据id降序排列,不写desc默认是升序,
limit 3,5 是从索引为三开始拿出5条数据展示。
select * from t_user ORDER BY id desc limit 3,5;
10、join关键字是连接多个表的时候使用的
①left join:左关联,以语句中left join左边的表为基准去对比右边的表进行匹配查询
select * from t_user tu left join t_class tc on tu.id = tc.user_id
②inner join 内连接,两边表里都有的查出来
select * from t_user tu inner join t_class tc on tu.id = tc.user_id
③right join:右关联,以right join右边的表为基准去对比左边的表进行匹配查询。
select * from t_user tu right join t_class tc on tu.id = tc.user_id