杂记
tinyint 跟布尔型类似
注释方法:
# --
bin是二进制的缩写
encrypted是否加密
存储过程
触发器
事件
事务
ER模型
备份
日志
左连接,左边的表无论如何都能显示,右连接同理
走进Mysql
(SQL语句的大小写无所谓)
1.1.1: Mysql的启动和停止
启动Mysql服务的sql命令如下:
NET START mysql55
停止Mysql服务的命令如下:
NET STOP mysql55
1.1.2: 登录Mysql数据库
在命令执行窗口,执行连接并登录Mysql的命令行格式如下:
mysql -h hostname -u username-p
-h hostname:主机地址,可以用localhost或127.0.0.1
-u username:用户名
-p表示后面的参数为指定用户的密码
ps:不写-h hostname好像也行
1.1.3: Mysql的相关命令:
查看Mysql命令帮助:mysql>help
如图所示:
1.1.4:查看Mysql字符集
mysql>SHOW CHARACTER SET;
1.1.5:设置Mysql字符集
1.描述字符集的系统变量
系统变量名:character_set_server
character_set_client
character_set_connection
character_set_results
character_set_database
character_set_system
说明:
(character_set_server) 默认的内部操作字符集,标识服务器的字符集。服务器启动时通过该变量设置字符集,当未设置值时,系统默认为latin1.该变量为create database命令提供的默认值。
(character_set_client) 客户端来源数据使用的字符集,该变量用来决定Mysql如何解释客户端发到服务端的SQL命令。
(character_set_connection) 连接层字符集。用来决定MYSQL如何处理客户端发来的SQL命令
(character_set_results) 查询结果字符集。当SQL返回结果时,该变量的值决定了发给客户端的字符编码。
创建数据库过程
小tips
字符串
char 写定长度
varchar 分配空间可变
时间类型
datatime 写死
timestamp 时间戳(加时区)
union
约束
primary key,foreign key,not null,unique,default,ckeck,auto_increament
1.创建库
CREATE DATABASE 库名;
USE 库名;
删除库
DROP DATABASE 库名;
2.建表
CREATE TABLE 表名(
字段定义(字段名 数据类型 约束)
)
删除表
DROP TABLE 表明;
3.插入表
INSERT INTO 表名(字段列表) VALUES(值列表),
删除
DELETE FROM 表名 WHERE 条件
TRUNCATE 表名;(删了又创建)
修改
UPDATE 表名 SET 字段名 = 新值/表达式 WHERE 条件
查询
单表查询
SELECT 字段名/*/表达式 AS 别名 FROM 表名 WHERE 条件
多表查询
SELECT 字段名/*/表达式 AS 别名 FROM 表名1 JOIN 表名2 ON 共同点 WHERE 条件
触发器
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
事件
什么时间 调用
操作周期 做什么
打开Mysql服务器事件调度器
1 | SET GLOBAL EVENT_SCHEDULER = 1; |
1 | CREATE EVENT_OVERDUE (注:事件名) |
1 | CREATE PROCEDURE proc_overdue() |
事务
start transaction
update …
commit
isolaction隔离等级
read-uncommitted 脏读
read-committed 不可重复读
repeatable-read(默认,可重复读取)幻读
serializable 一次只允许一个事务进行读写操作
deadlock死锁
两个或两个以上进程因争夺资源,而造成的相互等待现象。若无外力作用,系统将无法推进。
锁
事务在对一个数据对象(表、记录)进行操作之前向系统发出请求,对其上锁
排他锁/写锁/X锁 以行为单位
共享锁/读锁/S锁
意向排他/意向共享锁 以整表为单位,只阻塞对全表的操作
备份
1 | mysqldump -uroot -p 库名 >文件绝对路径 |
热备份
冷备份(完全备份、差异备份、增量备份)
还原
1 | source 文件绝对路径 |
日志
二进制日志
DDL: Data Definition Language
DML: Date Manipulation Language
错误日志
通用日志
慢查询日志
CAP原则
Consisteacy一致性
Availability可用性
Partitiontolerance分区容错性
NOSQL
- 大数据的四个特点:四个V
- Volume
- Variety
- Velocity
- Value/Veracity
索引原理
本质都是:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。
B+树
B+树是通过二叉查找树,再由平衡二叉树,B树演化而来
在数据库中,B+树的高度一般都在24层,这也就是说查找某一个键值的行记录时最多只需要2到4次IO,这倒不错。因为当前一般的机械硬盘每秒至少可以做100次IO,24次的IO意味着查询时间只需要0.02~0.04秒。
数据库中的B+树索引可以分为聚集索引(clustered index)和辅助索引(secondary index),
聚集索引与辅助索引相同的是:不管是聚集索引还是辅助索引,其内部都是B+树的形式,即高度是平衡的,叶子结点存放着所有的数据。
聚集索引与辅助索引不同的是:叶子结点存放的是否是一整行的信息
创建/删除索引的语法
1 | #方法一:创建表时 |
实例
1 | #方式一 |
MangoDB
基本指令
- show dbs 查看数据库
- use 库名 //如果没有,创建再切换库,有就直接切换
- db 查看当前数据库
- db.createCollection(键值对)创建集合
- show collections 查看集合
- db.集合名.insert({键值对},{}…) //插入数据
- db.集合名.find() //查看集合所有内容
- pretty() //格式化查询
- db.集合.drop() //删除集合
- db.dropDatabase() //删除库
- db.collection_name.update(criteria,odjNew,upsert,multi)
- upsert:判断是否匹配,匹配不到直接新建一条数据(默认关闭
- multi:多行判断,多行执行(默认关闭)
- db.集合名.update({条件:
},{$set:{key:value}}) !–修改语句 - db.集合名.deleteOne({<条件>:<>}) !–删除语句
- db.集合名.daletemany({条件:}) !—删除多行
- db.集合名.find(“条件”) !—-指定查询(条件中格式:{“age”:{$gte:”20”}})其中条件符号将使用
- $lte(小于等于)
- $gt(大于)
- $lt(小于)
- $ne(不等于)
- $in(包含)
- $nin(not in)
- db.集合名称.find({“userid”:{$lte:”1004”},”age”:{$gte:”20”}}).pretty() !–多条件查询,默认and 同时满足
- db.集合名称.find({&or:[“条件”:<>],{“条件”:<>}}).pretty !–查询只需满足一个条件的数据
- db.集合名称。find({“uesr”:{$in:[“1005”,”1006”]}}) !—查询满足一个条件的数据
常见聚合管道操作
- $group:将集合中的文档进行分组
- $limit:用于限制MongoDB聚合管道返回的文档数
- $match:用于过滤数据,只输出符合条件的文档
- $sort:将输入的文档先进行排序,再输出
- $project:用于修改输入文档的结构(增加、删除字段等)和名称
- $skip:在聚合管道中跳过指定数量的文档,并返回剩余数量恶的文档
具体语法
1 | # $group操作符 |
常见管道表达式
$sum:计算总和
$avg:计算平均值
$min:获取集合中所有文档对应值的最小值
$max:获取集合中所有文档对应值的最大值
$push:在结果文档中插入值到一个数组中
$first:获取分组文档中的第一个文档
$last:获取分组文档中的最后一个文档
Redis
服务器启动
1 | redis-server.exe redis.windows.conf |
客户端启动
1 | redis-cli.exe -h 地址 -p 端口号 |
1 | # 操作字符串 |
操作键
1 | #序列化指定的键,并返回被序列化的值 |
事务
1 | #开启事务 |
操作列表
1 | # 将一个元素或多个元素推入到列表的右端 |
操作集合
1 | # 将一个或多个元素添加到集合中 |
操作有序集合
1 | # 为有序集合添加一个或多个键值对 |
操作散列
1 | # 为散列中的指定键设置值 |