# 修改当前登录用户密码
set password = password('新密码');
# 查看用户
select user,host from mysql.user;
# 查看指定用户权限
show grants for 'root'@'%';
# 创建用户
create user '用户名'@'loaclhost' identified by '密码';
# 授权用户所有权限
grant all on 数据库名.* to '用户名'@'loaclhost';
# 授权root权限[ with grant option ] 代表此用户可以给其他用户授权
grant all on *.* to '用户名'@'localhost' with grant option;
# 修改用户名
update user set user="新用户名" where user="用户名";
# 修改用户密码
set password for 用户名@'localhost' = password('新密码')
# 删除用户
drop user 用户名@'%';
# 刷新
flush privileges;
允许远程连接
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#注释下方一行代码
#bind-address = 127.0.0.1
show databases;
,会显示当前服务器上所有的数据库create database test charset=utf8;
,创建数据库test,指定字符集drop database test;
,删除数据库testuse test;
,选择数据库test
show tables;
select database();
show tables;
,查看当前数据库下的所有数据表create table user(username varchar(20), password char(32));
desc user;
show create database test;
show create table user;
drop table user;
create table xxx() charset=utf8;
alter table user modify username varchar(30);
,不能修改字段名alter table user change email em varchar(32);
,可以修改字段名alter table user add age int(3);
alter table user add email varchar(60) after password;
alter table user add id int(11) first;
alter table user drop age;
alter tablr user modify em varchar(32) first;
alter table user rename new_user;
说明:在大多数的操作中,使用的都是增删改查操作(CURD)。
准备:一张用于测试的表
mysql> create table tb_name(
-> id int auto_increment,
-> name varchar(20) not null,
-> money float not null,
-> province varchar(20) default null,
-> age tinyint unsigned not null,
-> sex tinyint not null,
-> primary key(id)
-> )engine=innodb default charset=utf8;
插入数据:
insert into tb_name values(1, '刘亦菲', 20000000, '武汉', 28, 1);
可以一次性插入多条数据,一条数据需要使用一个()包括起来。
insert into tb_name(name, money, age, sex, province) values('赵丽颖', 8000000, 31, 1, '河北');
插入数据的顺序与前面指定的字段名要一致。
查询数据:select * from tb_name;
查询指定数据:select * from tb_namewhere id=1;
修改数据:update tb_nameset age=31, money=10000000 where id=1;
删除数据:delete from tb_namewhere id=2;
基础查询:select * from tb_name;
指定字段查询:select name, money, province from tb_name;
删除重复记录:select distinct province, sex from tb_name;
指定条件查询:
select * from tb_name where age > 30;
select * from tb_name where age > 30 and sex=1;
select * from tb_name where age > 30 or province='河南';
select * from tb_name where age [not] between 30 and 40;
select * from tb_name where id [not] in(1,3,5);
select * from tb_name where province like '%北%'; # 包含北 的地区
select * from tb_name where province like '北_'; # 北x 的地区
select * from tb_name where province like '*北'; # 以北 开头的地区
select * from tb_name where length(name)<6;
通配符:like模糊查询使用
结果集排序:
select * from tb_name order by age asc;
select * from tb_name order by money desc;
select * from tb_name order by sex asc, age desc;
限制结果集:
示例:
select * from tb_name limit 5; # 取前5条数据
select * from tb_name limit 5 offset 2; # 偏移2条,取5条数据
select * from tb_name limit 2, 5; # 功能同上
省略offset的写法 就是将偏移量放到前面 将限制每页条数的放在后面
每页10条数据,用pageSize,page是当前页面,请写出对于页码的查询条件
第一页:limit 10
第二页:limit 10, 10
第三页:limit 20, 10
page页:limit (page-1) * pageSize, pageSize
常用聚合函数:
函数 | 说明 |
---|---|
count | 统计个数 |
sum | 求和 |
avg | 平均值 |
max | 最大值 |
min | 最小值 |
示例:
select count(*) as c from tb_name;
select max(money) as max_money from tb_name;
as可以给查询结构字段起别名
分组及过滤:
select * from tb_name group by sex; # 只分组,结果集中每个组中只有一条数据
select count(*) as c, sex from tb_name group by sex; # 分组并统计信息
select count(*) as c, province from tb_name group by province having c>1;
having后面做的是分组后的显示过滤
# 分组后条件不能使用where,只能使用having
创建多表关系:
foreign key(o_buyer_id)references s_user(u_id),
foreign key(o_seller_id)references s_user(u_id)
alter table emp add constraint foreign key emp(deptno) refetences dept(deptno);
FOREIGN KEY(o_buyer_id) REFERENCES s_user(u_id),
FOREIGN KEY(o_seller_id) REFERENCES s_user(u_id)
ALTER TABLE EMP ADD CONSTRAINT FOREIGN KEY EMP(DEPTNO) REFERENCES DEPT (DEPTNO);
select distinct
:清楚查询
隐式内连接:没有出现join
关键字
select username, name from user, goods where user.gid=goods.gid;
显式内连接:SQL语句中出现了join
关键字
select username,name from user join goods on user.gid=goods.gid;
inner
或cross
关键字,可以省略左外连接:以左表为主,left outer
select username, name from user left outer join goods on user.gid=goods.gid;
右外连接:以右表位住,right outer
select username, name from user right outer join goods on user.gid=goods.gid;
子(嵌套)查询
select * from user where gid in (1,3,5);
select * from user where gid in (select gid from goods);
记录联合
select 语句1 union select 语句2
联合更新数据
update user u, goods g set u.gid=0, g.price=g.price-200 where u.gid=g.gid and u.id=7;
说明:测试的表的存储引擎要支持事务(InnoDB)
开启事务:禁止自动提交
set autocommit=0;
操作回滚:通常在出现操作异常时使用
rollback;
提交操作:整个事务过程中没有问题
commit;
开启事务:
start transaction
提交事务:
commit
回滚操作:
rollback
查看授权:
show grants [for 'user'@'host'];
show grants for 'root'@'localhost';
创建用户:
create user 'user'@'host' identified by 'password';
create user 'test'@'10.8.156.%' identified by '123456';
用户授权:
grant 权限 privileges on 库名.表名 to 'user'@'host' identified by 'password';
grant all privileges on *.* to 'test'@'10.8.156.%' identified by '123456';
刷新权限:flush privileges;
取消授权:
revoke 权限 privileges on 库名.表名 from 'user'@'host';
revoke delete privileges on test.* from 'test'@'10.8.156.%';
删除用户:
drop user 'user'@'host';
drop user 'test'@'10.8.156.%';
linux下远程登录:
将bind-address=127.0.0.1改为:
bind-address=0.0.0.0
grant all privileges on *.* to 'root'@'%' identified by '123456';
mysqldump -uroot -p test > test.sql
mysql -uroot -p test < test.sql
pip install pymysql
pip list
import MySQLdb # sqlite3
# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取一条数据;fetchall()获取全部;fetchmany()获取一条,返回列表
data = cursor.fetchone()
print("Database version : %s " % data)
# 关闭数据库连接
db.close()
redis的特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份
性能极高 支持每秒读的次数为110000次/s,写的速度是81000次/s
常用管理命令:
redis-cli:连接redis
ping:测试连接情况,默认恢复'PONG'
quit/exit:退出客户端
auth:密码认证
config:配置命令,可以查看和设置配置信息,参考密码查看与设置
info:查看服务器信息,可以指定具体模块查看
command:查看支持的命令
select:选择库,总共16个,默认为0数据库;提示符后会有库号的提示,没有就是默认的库(0)
dbsize:查看当前库key的数量
flushdb:清空当前库
flushall:清空所有库
save:前台执行持久化存储
bgsave:后台执行持久化存储
键(keys):
exists:判断指定的键是否存在
del:删除指定的键值对
keys *:查看指定样式的键,keys *表示查看所有
ttl:查看指定键的剩余有效时间,单位为秒,不存在键返回-2,永久返回-1
expire:设置指定键的生存时间
persist:移除指定键的生存时间,之后该键永久有效
move:移动指定的键到指定的库
rename:修改指定键的名字
字符串(string)
set:设置,存在就修改,不存在就添加
get:获取,获取指定键的值
mset:同时设置多个键值对
mget:同时获取多个键对应的值
getset:设置新值,同时返回旧值
setex:设置值及过期时间,单位为秒
incr:数字值加1
decr:数字值减1
incrby:数字值加上指定值
decrby:数字值减去指定值
incrbyfloat:数字值加上一个浮点数
append:键存在,值为字符串,追加指定的内容到原值的末尾
strlen:返回键对应值的字符长度
哈希(hash)
hset:设置单个属性
hget:获取单个属性
hmset:设置多个属性
hmget:获取多个属性
hgetall:获取所有属性
hexists:判断指定键是否有指定的字段
hdel:删除指定键的指定字段
hkeys:获取指定键的所有字段
hvals:获取指定键的所有字段值
hlen:获取指定键的字段个数
hincrby:在指定键的指定字段上增加一个整数
hincrbyfloat:在指定键的指定字段上增加一个浮点数
列表(list)
lpush:从左边(头部)插入数据
lpop:从左边(头部)删除并返回数据
lrange:获取区间内的数据,0 -1通常可以表示所有范围
lindex:根据索引获取元素
llen:统计列表中元素个数
lset:设置指定索引的元素值
lrem:删除指定数量的元素
linsert:在指定元素的前/后插入元素(before)
ltrim:修剪列表元素(保留指定范围内地,删除其他)
rpop:从右边(尾部)删除并返回数据
rpush:从右边(尾部)插入数据
集合
sadd: 向集合中添加一个元素
scard: 获取集合中的成员数
smembers:返回集合中的所有成员
spop:移除并返回集合中的一个随机元素
redis的发布订阅:
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
创建订阅频道名
subscribe name
通过publish name去往频道名字里面推送信息
然后客户端就能收到此订阅信息
字符串、哈希、列表
集合(set)
sadd:向集合中添加元素(集合不存在会自动创建)
scard:统计集合中元素的个数
smembers:返回所有元素
sismember:判断某个元素是否是集合的成员
spop:随机删除并返回指定个数的元素,不指定个数默认一个元素
srandmember:随机获取指定个数的元素
srem:移除指定元素
smove:将指定的元素从一个集合移动到另一个集合中
sinter:求交集
sinterstore:求交集并保存到一个集合中
sdiff:求差集
sdiffstore:求差集并保存到一个集合中
sunion:求并集
sunionstore:求并集并保存到一个集合中
有序集合(sorted set)
zadd:添加元素
zcard:统计元素个数
zcount:指定分数区间统计
zrange:返回指定索引范围内的元素(升序),zrevrange:降序
zrangebyscore:返回指定分数区间的元素(升序),zrevrangebyscore:降序
zrank:返回指定元素的索引(升序),zrevrank:降序
zrem:移除元素
zscore:返回元素的分数
zincrby:将元素的分数增加一个值
zinterstore:求交集并保存
zunionstore:求并集并保存
安装扩展:pip install redis
简介:
redis扩展库中有两个类,Redis和StrictRedis;StrictRedis实现了官方的命令,Redis是它的子类,兼容老版本。扩展中没有提供select方法,可以在连接时通过参数指定库。
操作:
第一种方法:
1.首先在官网上下载redis最新的版本,命令如下:
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
2.解压下载的redis压缩包
tar -vxzf redis-4.0.8.tar.gz
3.进入src目录并make
make
4.编译完成后可以使用如下命令进行测试
make test
注:如果make过程中出现了如下错误:
error: jemalloc/jemalloc.h: No such file or directory
就执行make MALLOC=libc 就OK了,不过在执行这一句之前最好先执行
make clean清理一下。
启动方法 在src目录下 ./redis-server
第二种方法:
sudo apt-get update
sudo apt-get install redis-server
启动 Redis
redis-server
查看 redis 是否启动?
redis-cli
以上命令将打开以下终端:
redis 127.0.0.1:6379>
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。
redis 127.0.0.1:6379> ping
PONG
有时候会有中文乱码 连接的时候需要 redis-cli --raw
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中最像关系型数据库的一种,是功能最丰富的非关系型数据库。
安装和卸载:
1.导入软件源的公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
2.为mongodb创建软件源list文件
ubuntu12.04:
echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
ubuntu14.04:
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
ubuntu16.04:
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
3.更新软件源并安装mongodb
sudo apt-get update
sudo apt-get install -y mongodb-org
如果想要安装特定的版本,使用下面命令:
sudo apt-get install -y mongodb-org=3.2.9 mongodb-org-server=3.2.9 mongodb-org-shell=3.2.9 mongodb-org-mongos=3.2.9 mongodb-org-tools=3.2.9
4.配置启动文件
如果是ubuntu16.04的版本,需要手动新建/lib/systemd/system/mongod.service文件,并写入下面内容:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
5.启动、重启和关闭命令
sudo service mongod start
sudo service mongod restart
sudo service mongod stop
6.mongodb的完全卸载
先停止运行mongodb
sudo service mongod stop
再卸载软件
sudo apt-get purge mongodb-org*
删除数据库和日志文件
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
如果想要使用远程连接mongo 那么需要
sudo vim /etc/mongo.conf
找到net 将 127.0.0.1 改为0.0.0.0即可
连接到mongodb
直接在终端输入 mongo
相关概念
MySQL | MongoDB |
---|---|
database(数据库) | db(数据库) |
table(数据表) | collection(集合) |
row(行) | document(文档) |
column(列) | field(域/字段) |
show dbs
,若数据库中没有数据,则不会显示出来db
或 db.getName()
use python1806
show dbs
不会显示db.dropDatabase()
help
exit
或 quit()
show collections
db.createCollection('user')
,会创建一个空集合db.stu.insert({name:'shuorui', age:30})
,直接操作不存在的集合,系统会自动创建db.stu.drop()
增加文档:
# 插入一条数据
db.user.insert({name:'jiwei', age:29, height:175, isDelete:0})
# 插入多条数据
db.user.insert([{name:'zhihui',age:18, height:168, isDelete:0},{name:'minghui', age:28, height: 173, isDelete:0}])
# 保存的数据没有_id字段,会插入一个新的文档
db.user.save({name:'wenke', age:40, height:178, isDelete:0})
# 保存的数据有_id字段,会修改对应的数据
db.user.save({_id:ObjectId("5be3ecf105c088a265a0b578"), name:'wenke',age:30, height: 178, isDelete:0})
更新文档
# 保存的数据有_id字段,会修改对应的数据,就相当于更新操作
db.user.save({_id:ObjectId("5be3ecf105c088a265a0b578"), name:'wenke',age:25, height: 178, isDelete:0})
db.集合.update(query, update, {upsert:, multi:})
db.user.update({age: 25}, {$set:{age:26}}) # 只会更新一条
db.user.update({height:175}, {$inc:{height: 1}}, {multi: true}) # 会更新全部
db.user.updateMany({isDelete: 1}, {$set:{isDelete: 0}}) # 更新全部
删除文档
db.集合.remove(query,{justOne:})
db.user.remove({height: 176}) # 默认删除所有数据
db.user.remove({isDelete:0}, {justOne:true}) # 只会删除一条数据
db.user.deleteOne({isDelete: 0}) # 删除一条数据
db.user.deleteMany({isDelete: 0}) # 删除所有数据
查询文档
db.集合.find(query, {key1:0/1, key2:0/1, keyn:0/1})
db.user.find({},{name:1, age:1}).pretty() # 只显示name和age
db.user.find({},{name:0, age:0}).pretty() # 不显示name和age
db.user.find().pretty()
db.user.findOne({isDelete:0}) # 只返回条数据
什么是虚拟环境:
一个隔离了外界干扰的,独立的环境
虚拟环境的搭建:
1.pip install virtualenv
2.pip install virtualenvwrapper
3.whereis virtualenvwrapper.sh
4.source 上面的路径信息
5.source ~/.bashrc
mkvirtualenv name 创建虚拟环境名称(name就是自定义的虚拟环境名字)
rmvirtualenv name 删除虚拟环境名称
workon name 使用某个虚拟环境
deactivate 退出虚拟环境
6.重新打开终端 然后 sudo vim ~/.bashrc
export=/home/huguanyu/.virtualenvs
source /usr/share/virtualenvwrapper
然后强制保存
7.重新source ~/.bashrc
pip install --user virtualenv