mysql卸载
- 先在mysql安装目录下找到my.ini文件找到datadir=" ";这个代码复制路径
- 卸载MySQL
- 找到复制的路径 在目录下删除MySQL文件夹
mySQL命令
MySQL服务启动
使用管理员打开cmd
* net start mysql :启动服务
* net stop mysql :关闭服务
MySQL登录
- mysql -uroot -p密码
- mysql -h(ip) -uroot -p连接目标密码
MySQL退出 - exit
- quit
表操作
DML:增删该表中数据
- 添加数据
- 语法: insert into 表名(列名1,列名2,…)values(值1,值2,…);
- 注意
- 列名和值要一一对应
- 如果表名后,不定义列名则默认给所有列添加 insert into 表名 values(值1,值2,…)
- 除了数字类型,其他类型需要用引号
- 删除数据
- 语法: delete from 表名 where 条件
- 注意:
- 如果不添加条件则删除表所有数据
- 如果要删除所有记录推荐 TRUNCATE TABLE 表名
- 修改数据
- 语法:update 表名 set 列名1=值1,列名2=值2 where 条件
- 注意:如果不加条件则将表中所有记录全部修改
DQL:单表查询表中数据
查询全部信息
select * from 表名
查询姓名和年龄(查询某一些字段)
select name , age from 表名( select 字段1 ,字段2 from 表名)
查询某些字段并去除重复值
select distinct 字段名1,字段名2 from 表名
计算math和English分数和
select math , english ,math+english from 表名( select 字段1 ,字段2 , 字段1+字段2 from 表名)
如果有null值参与运算则将null替换为0 在计算
select math , english ,math+ifnull(english ,0 )from 表名( select 字段1 ,字段2 , 字段1+ifnull(字段2 , 0)from 表名)ifnull(参数1,参数2 ) 该方法参数1为要判断是否为null的字段 参数2为要替换的值
给字段起别名
select name As 姓名 from 表名(select 字段名 As 字段的别名 from 表名)AS可以用空格替换
查询年龄大于(>,<,=,>=,<=)20(查询某一个范围)
select * from 表名 where age>20 (select 字段名 from 表名 where 范围条件)
查询年龄大于等于20小于等于30的内容
select * from 表名 where age>20 and age<30 (select 字段名 from 表名 where 范围条件1 and 范围条件2)
或者
select * from 表名 where age between 20 and 30 (select 字段名1 from 表名 where 字段名1 between 范围条件1 and 范围条件2)
between 20 and 30 表示包含20和30的范围即 [20 ,30]
查询年龄22和19的信息(查询满足条件1或者条件2)
select * from 表名 where age=22 or age=19 (select 字段名 from 表名 where 条件1 or 条件2 )
或者
select * from 表名 where age in(22,19) (select 字段名 from 表名 where 字段名 in(条件1 , 条件2) )
查询内容为空null
select * from 表名 where 字段名 is null
查询内容不为空null
select * from 表名 where 字段名 is not null
模糊查询
like _ 表示一个占位符 %表示多个占位符
查询姓名第一个字为马的人
select * from 表名 where name like '马%' (select * from 表名 where 字段名 like '马%')
同理查询姓名中包含马的人
select * from 表名 where name like '%马%' (select * from 表名 where 字段名 like '%马%')
排序查找(如果多个字段作为条件则按照第一个字段排序查找如果第一个相同则按照第二字段)
降序查找
select * from 表名 order by 字段名1 desc ,字段名2 desc
desc为降序排列方式(第二个字段排序方式可以与第一个字段排序方式不一样)
升序查找
select * from 表名 order by 字段名1 asc ,字段名2 asc
asc为降序排列方式 (如果不写排序方式则默认为升序排序)
聚合函数(计算时会排除null值):将一列数据作为一个整体进行纵向的计算
- count:计算某一列个数
select count(列名) from 表名
- max:计算最大值
select max(列名) from 表名
- min:计算最小值
select min(列名) from 表名
- sum :计算和
select sum(列名) from 表名
- avg:计算平均值
select avg(列名) from 表名
分组查询
- where在分组之前进行限定不满足则不参与。where后面不能跟聚会函数判断
- having 在分组之后进行限定不满足则不显示出结果。having后面能跟聚会函数判断
分别查询男女同学平均分
select sex, avg(math) from 表名 group by sex;
(select 分组字段 ,聚合函数(可以有多个) from 表名 group by 分组字段(即按什么分组))
分别查询男女同学平均分并且只有分数大于70才参与
select sex, avg(math) from 表名 where math>70 group by sex;
(select 分组字段 ,聚合函数(可以有多个) from 表名 where 限定条件 group by 分组字段(即按什么分组))
分别查询男女同学平均分并且只有分数大于70才参与并且分组后人数要大于2个
select sex, avg(math) from 表名 where math>70 group by sex having count(id)>2;
(select 分组字段 ,聚合函数(可以有多个) from 表名 where 限定条件 group by 分组字段(即按什么分组) having 分组后限定条件)
分页查询
select * from 表名 limit 开始索引((当前页码-1)*每一页显示个数) , 每一页显示的个数;
DQL:多表查询表中数据 方便查询可以给表起别名
查询两张表对应信息
select * from 表名1,表名2 where 表名1.id=表名2.id;
(查询表1和表2对应id(该相同id分别时两张表的主键和外键)相同的内容)
查询两张表中部分数据
select 表1.列名 ,表2.列名 from 表名1,表名2 where 表名1.id=表名2.id;
(查询 表1中指定列名和表2指定列名 对应id(该相同id分别时两张表的主键和外键)相同的内容)
外链接查询
- 左外连接(查询的时左表所有数据以及起交集部分):
- 语法:
select 字段列表 from 表1 left [outer] join 表2 on 条件(表名1.id=表名2.id)(为两张表的主键和外键)
- 右外连接(查询的时右表所有数据以及起交集部分):
- 语法
select 字段列表 from 表1 right [outer] join 表2 on 条件(表名1.id=表名2.id)(为两张表的主键和外键)
子查询
在查询语句中嵌套查询
不同情况
- 子查询的结果时单行单列的(一个查询语句可以作为另一个查询语句的条件并且使用运算符(< ,>,)来判断)
- 子查询的结果时多行单列的(一个查询语句可以作为另一个查询语句的条件并且使用in()来判断)
- 子查询的结果时多行多列的(子程序可以作为一张虚拟表然后用多表查询进行查询)
Redis
概念: redis是一款高性能的NOSQL系列的非关系型数据库
目前为止Redis支持的键值数据类型如下:
- 符串类型 string
- 哈希类型 hash
- 列表类型 list
- 集合类型 set
- 有序集合类型 sortedset
redis的应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)
- 聊天室的在线好友列表
- 任务队列。(秒杀、抢购、12306等等)
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒 • 分布式集群架构中的session分离)
下载安装
- 官网:https://redis.io
- 中文网:http://www.redis.net.cn/
- 解压直接可以使用: * redis.windows.conf:配置文件 * redis-cli.exe:redis的客户端 * redis-server.exe:redis服务器端
命令操作
- redis的数据结构:
- redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
- value的数据结构:
1. 字符串类型 string
2. 哈希类型 hash : map格式
3. 列表类型 list : linkedlist格式。支持重复元素
4. 集合类型 set : 不允许重复元素
5. 有序集合类型 sortedset:不允许重复元素,且元素有顺序
- 字符串类型 string
1. 存储: set key value
127.0.0.1:6379> set username zhangsan OK (ip地址:端口号>set 键名 值)
2. 获取: get key
127.0.0.1:6379> get username "zhangsan"
3. 删除: del key
127.0.0.1:6379> del age
(integer) 1
- 哈希类型 hash
1. 存储: hset key field value
127.0.0.1:6379> hset myhash username lisi
(integer) 1
127.0.0.1:6379> hset myhash password 123
(integer) 1
2. 获取:
1. hget key field: 获取指定的field对应的值
127.0.0.1:6379> hget myhash username "lisi"
2. hgetall key:获取所有的field和value
127.0.0.1:6379> hgetall myhash
1. "username"
2. "lisi"
3. "password"
4. "123"
3. 删除: hdel key field
127.0.0.1:6379> hdel myhash username
(integer) 1
- 列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
1. 添加:
1. lpush key value: 将元素加入列表左表
2. rpush key value:将元素加入列表右边
127.0.0.1:6379> lpush myList a
(integer) 1
127.0.0.1:6379> lpush myList b
(integer) 2
127.0.0.1:6379> rpush myList
c (integer) 3
2. 获取:
* lrange key start end :范围获取
127.0.0.1:6379> lrange myList 0 -1
1. "b"
2. "a"
3. "c"
3. 删除:
* lpop key: 删除列表最左边的元素,并将元素返回
* rpop key: 删除列表最右边的元素,并将元素返回
- 集合类型 set : 不允许重复元素
1. 存储:sadd key value
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset a
(integer) 0
2. 获取:smembers key:获取set集合中所有元素
127.0.0.1:6379> smembers myset
"a"
3. 删除:srem key value:删除set集合中的某个元素
127.0.0.1:6379> srem myset a
(integer) 1
- 有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
1. 存储:zadd key score value
127.0.0.1:6379> zadd mysort 60 zhangsan
(integer) 1
127.0.0.1:6379> zadd mysort 50 lisi
(integer) 1
127.0.0.1:6379> zadd mysort 80 wangwu
(integer) 1
2. 获取:zrange key start end [withscores]
127.0.0.1:6379> zrange mysort 0 -1
1. "lisi"
2. "zhangsan"
3. "wangwu"
127.0.0.1:6379> zrange mysort 0 -1 withscores
1. "zhangsan"
2. "60"
3. "wangwu"
4. "80"
5. "lisi"
6. "500"
3. 删除:zrem key value
127.0.0.1:6379> zrem mysort lisi
(integer) 1
- 通用命令
1. keys * : 查询所有的键
2. type key : 获取键对应的value的类型
3. del key:删除指定的key value
- 持久化
- redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据 持久化保存到硬盘的文件中。
- redis持久化机制:
- RDB:默认方式,不需要进行配置,默认就使用这种机制
在一定的间隔时间中,检测key的变化情况,然后持久化数据- 编辑redis.windwos.conf文件
- RDB:默认方式,不需要进行配置,默认就使用这种机制
#after 900 sec (15 min) if at least 1 key changed
save 900 1
#after 300 sec (5 min) if at least 10 keys changed
save 300 10
#after 60 sec if at least 10000 keys changed
save 60 10000
2. 用cmd重新启动redis服务器,并指定配置文件名称
例如:D:\JavaWeb2018\day23_redis\资料\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf
- AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
1. 编辑redis.windwos.conf文件
appendonly no(关闭aof) --> appendonly yes (开启aof)
#appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行一次持久化
#appendfsync no : 不进行持久化