MySQL
1.展示数据库
show databases;
information_schema 数据库内置信息
mysql 系统用户权限
performance_schema 性能参数信息
sys 系统信息
2.创建数据库
create database test1;
删除数据库 drop database test1;
3.使用数据库
use test1;
4.展示所有表
show tables;
mysql表的操作
1.创建表
create table user(name varchar(10),age int(2),date date);
2.查看表格式
desc user(表名);
3.查看详细描述
show create table user;
4.删除表
drop table user;
5.修改表
修改表字段类型:alter table user modify name varchar(20);
新增: alter table user add column new varchar(10);
删除: alter table user drop column new;
修改表字段名字:alter table user change age age1 int(4);
表名:alter table user rename user1;
change需要写两次 modify 不能改列名。
mysql增删改查
1.插入数据
insert into user values(‘ccc’,’22’,’2022-5-19’);
insert into user (name) values(‘dk’),(‘test’)
2.查询数据
select from user;
select name,age from user;
select from user where name = ‘ccc’;
3.更新数据
update user age = 20 where name =’ccc’;
4.删除数据
delete from user where name = ‘test’;
mysql数据类型
1.数据值类型
tinyint int bigint float double bit(2进制)
int(5) 指的是具体宽度显示
如果数值宽度小于5位的时候填满5位
默认10,一般配合zerofill用0填充
create table t1(id1 int, id2 int(5));
insert into t1 values(1,1,);
alter table t1 modify id1 int zerofill;
2.字符串类型
char 长度 0~255 text 0-65535字节
varchar 长度 0~65535 mediumtext 0-167772150字节
longtext 0 - 4294967259字节
二进制字符串 binary varbinary
检索的时候 char 会删除尾格空格
length() 可以计算长度
select v1,length(v1),v2,length(v2) from vc;
concat 可以连接
create table vc (v1 varchar(10), v2 char(10));
insert into vc values(“你好 “,”世界 “);
pymysql 操作数据库
python操作mysql
db = pymysql.connect(host='localhost',user='root',password='123456',database='test1',port=3306)# 游标cursor = db.cursor()# 搜索数据cursor.execute("select * from user")data = cursor.fetchall()print(data)# 插入数据 因为你的表的引擎默认是innodb# 默认开启事物 所以提交需要commit 错误自动rollbackcursor.execute("insert into user value ('ccc2',23,'2022-5-20')")db.commit()# 更新数据, 在进行更新操作时建议使用try...except包裹try:cursor.execute("update user set name='ccc3' where name ='ccc2'")db.commit()print('done')except:db.rollback()cursor.close()db.close()
使用多线程操作pymysql
import pymysqlimport threadingfrom threading import Lock# 创建Lock对象lock = Lock()db = pymysql.connect(host='localhost',user='root',password='123456',database='test1',port=3306)def write_conn():print('开启线程', threading.currentThread().getName())cursor = db.cursor()try:lock.acquire()cursor.execute("insert into user values('ccc100',100,'2022-5-20')")db.commit()lock.release()except:db.rollback()def read_conn():print("开启线程", threading.currentThread().getName())cursor = db.cursor()lock.acquire()cursor.execute("select * from user")data = cursor.fetchall()lock.release()print("select的数据:", data)cursor.close()t1 = threading.Thread(target=write_conn)t2 = threading.Thread(target=read_conn)t1.start()t2.start()t1.join()t2.join()print("多线程执行完毕")db.close()
Redis
https://github.com/tporadowski/redis/releases
key-value数据库,nosql非关系数据库
值可以是字符串、哈希、列表、集合和有序集合
开启 redis 服务
redis-server.exe redis.windows.conf
连接redis客户端
redis-cli.exe -h 127.0.0.1 -p 6379
redis数据类型
1.字符串类型
set “ccc” “ccc nb”
get “ccc”
如果不存在返回nil
strlen返回字符串长度
append 追加长度
mset 同时设置多个 用空格分开
mget
2.列表类型
列表能够让一个键对应多个值
左端插入
lpush key v1 v2 [v2,v1]
右端插入
rpush key v1 v2 [v1,v2]
中间插入
linsert key after v1 c3
弹出内容 lpop rpop
弹出内容-阻塞版本
blpop brpop key timeout
获取内容
lindex key 0
获取长度
llen key
获取指定范围内容
lrange key start stop
3.哈希类型
hmset name key value key value *一个哈希最多存储2^32-1个字段
hmget name key key … 字段为空自动释放内存
是否存在某个字段
hexists name key
获取所有字段和值
hgetall name
修改或者添加
hset name key value
删除字段
hdel name key value
4.集合类型-去重
集合成员是唯一的,不能出现重复数据
添加数据
sadd key v1 v2 v3
删除数据
srem key v1
获取长度
scard key
判断存在
sismember key v1
列出成员
smembers key
redis设置过期时间
lpush “spider cache” baidu google
expire “spider cache” 10
查看剩余过期时间
TTL “spidr cache”
exists “spider cache”
redis事务
启动事务multi
放弃事务 discard
提交事务 exec
监控键 watch (如果在事务exec之前修改了键,则取消事务)
redis和关系型数据库的事务区别
- redis没有回滚
- 如果语法错误,exec不会被执行 —-原子性
- 如果执行过程错误,发生错误之后的命令继续执行—打破原子性
redis消息发布订阅机制
发包订阅模式PubSub
经典消息传递机制,即频道把消息数据发送出去
订阅了该频道的用户会收到消息
kafka和zeroMQ这些消息中间件就使用了这个模式构建消息传递
subscribe channel 用于订阅
publish channel 用于发布
pubsub channels 用于展示频道
unsubscribe 用于退订
当频道无订阅时会自动销毁,而且订阅消息不支持持久化
