Day 37 数据库基础1
poll和epoll
select的问题
-
当进程被唤醒时不清楚到底哪个socket有数据,只能遍历一遍
-
每一次select的执行,都需要将这进程再加入到等待队列中
为了防止重复添加等待队列,当某一次操作完成时,也必须从等待队列中删除进程,所以select最大限制被设置为了1024
poll和epoll
poll只是简单对select进行了优化,但是不够完美,epool才是最后的解决方案,但是epoll只能在linux中使用
epoll解决了select两个问题:
- epoll吧对于等待队列的操作与阻塞进程分开了
- epoll自己维护了一个等待队列,避免了遍历所有socket
并发
多进程 开销大
多线程 开销小于进程,但是不能无限开
协程 避免线程数量达到上限的问题,本质上属于非阻塞IO模型
IO模型 多路复用是做好的解决方案
数据库基础概念
数据库是什么:
存储数据的仓库
1. 列表 字典等:都是内存中的数据类型,断电消失
2. 文件存储 优点:可以永久存储 缺点:速度慢
本质就是一台基于网络的客户端/服务端程序,最终数据存储在服务器端
为什么用数据库
直接使用文件存储的问题:
-
速度慢
-
我们的程序将来可能分布在不同的机器上
单台机器性能有上限,如果一台机器不能满足,可以用多个机器共同完成
-
分布式 每个服务器提供不同的服务,有时候某个业务流程可能会涉及多个服务器
优点是耦合度降低,易维护
缺点是通讯繁琐,容灾性没有集群好
-
集群 所有的服务器提供的服务都是一样的
优点是容灾性强,易拓展,可插拔
-
-
用户权限管理
-
多个客户端并发访问,数据要保证安全
数据库分类
-
关系型数据库
数据之间可以存在关联关系,数据库会帮我们维护这层关系
通常存储介质都是硬盘
常见关系型数据库
mysql 市场需求 目前最流行的关系型数据库,因为免费开源,性能不错,目前已经被orcale收购
sqlserver 微软推出,只能用在windows服务器上,所以发展不是很好
oracle 目前最强大的关系型数据库,主要是在集群和用户管理上,非常适合大型企业
db2 IBM的产品,主要面向不差钱的企业用户,捆绑硬件销售
-
非关系型数据库
没有能力帮我们维护数据之间的关系
通常存储介质都是内存
常见非关系型数据库
mongoDB
redis
memcache
数据库重要概念
数据(Column) 文件中的某个字符串
记录(Row) 文件中的某一行
表(Table) 某个文件
库(DataBase) 就是一个文件夹
DBMS 数据库管理系统(指的就是数据库软件
数据库服务器 运行DBMS的计算机
安装数据库
采用压缩包的方式来安装,解压到本地即可
bin 存储所有执行文件
data 存储数据的位置
mysqld:服务端程序
mysql:客户端程序
需要先运行mysqld.exe
运行客户端时需要先登录,如果直接双击则表示直接进入游客模式,正常的操作方式是在终端中运行并且加入参数 ,指定用户名密码等参数
常见参数:
-h 主机名称 如果是本机可以忽略
-P 指定端口,默认3306 可以不写
-u 指定用户名
-p 指定密码
添加环境变量
注册系统服务
注册 mysqld --install
删除 sc delete mysql
启动服务 net start mysql
停止服务 net stop mysql
查找某个进程 tasklist | findstr mysqld
杀死某个进程 taskkill /f /pid 进程的PID
mysql5.6管理员密码的设置
-
知道原始密码
-
登录到mysql执行更新语句来修改
update user set password =password ('123') where host='localhost' and user='root'
刷新 flush privileges,或者重启mysqld
-
mysqladmin小工具
mysqladmin -uroot -p123 password 321
-p是原始面
-
-
不知道原始密码
-
删除权限相关的文件(不推荐)
-
跳过授权表
手动启动mysqld指定参数
mysqld -skip -gra
update user set password =password ('123') where host='localhost' and user='root'
重启mysqld即可
-
简单使用
数据必须找一个文件存起来,也就是表,表必须存在于库中,也就是文件夹
第一步应该是创建数据库,创建表
库的操作
#切换数据库
use databasename 可以不加分号
#查看所有数据库
show databases;
show create databases; #查看数据库详细信息
#创建新的数据库
create database databasename;
create database databasename charset utf8; #指定字符编码
#删除数据库
drop database databasename;
#修改数据库编码 可以进去到数据库文件夹中的db.opt
#第一行是编码,第二行是排序规则
#修改数据库名可以直接访问文件夹修改文件夹名(不推荐)
命名规范
- 不区分大小写
- 不要使用关键字
- 不能使用纯数字
- 可以使用下划线,通常字符下划线数字的组合
表的操作
#创建表 需要制定列的信息
create table 表名(列名 列的数据类型,列名2 类型2,....) charset gbk;
#查看当前库下的所有表
show tables;
#查看表结构
desc tablename;
#查看表的创建语句
show create table tablename;
#删除表
drop table tablename;
#清空表数据 重建表
truncate table tablename;
#修改表结构
#添加字段
alter table tablename add 列名称 列数据类型;
#删除字段
alter table tablename drop 列名称;
#修改数据类型
alter table tablename modify 列名称 列数据类型;
#修改列名
alter table tablename change 旧的列名称 新的列名称 新的列数据类型;
#修改表名
rename table 旧表名 to 新表名;
#修改编码
alter table tablename charset utf8;