Day 37 数据库基础1

poll和epoll

select的问题

  1. 当进程被唤醒时不清楚到底哪个socket有数据,只能遍历一遍

  2. 每一次select的执行,都需要将这进程再加入到等待队列中

    为了防止重复添加等待队列,当某一次操作完成时,也必须从等待队列中删除进程,所以select最大限制被设置为了1024

poll和epoll

poll只是简单对select进行了优化,但是不够完美,epool才是最后的解决方案,但是epoll只能在linux中使用


epoll解决了select两个问题:

  1. epoll吧对于等待队列的操作与阻塞进程分开了
  2. epoll自己维护了一个等待队列,避免了遍历所有socket

并发

多进程 开销大

多线程 开销小于进程,但是不能无限开

协程 避免线程数量达到上限的问题,本质上属于非阻塞IO模型

IO模型 多路复用是做好的解决方案

数据库基础概念

数据库是什么:

​ 存储数据的仓库

1. 列表 字典等:都是内存中的数据类型,断电消失
2. 文件存储  优点:可以永久存储 缺点:速度慢

本质就是一台基于网络的客户端/服务端程序,最终数据存储在服务器端

为什么用数据库

直接使用文件存储的问题:

  1. 速度慢

  2. 我们的程序将来可能分布在不同的机器上

    单台机器性能有上限,如果一台机器不能满足,可以用多个机器共同完成

    1. 分布式 每个服务器提供不同的服务,有时候某个业务流程可能会涉及多个服务器

      优点是耦合度降低,易维护

      缺点是通讯繁琐,容灾性没有集群好

    2. 集群 所有的服务器提供的服务都是一样的

      优点是容灾性强,易拓展,可插拔

  3. 用户权限管理

  4. 多个客户端并发访问,数据要保证安全

数据库分类

  1. 关系型数据库

    数据之间可以存在关联关系,数据库会帮我们维护这层关系

    通常存储介质都是硬盘

    常见关系型数据库

    mysql 市场需求 目前最流行的关系型数据库,因为免费开源,性能不错,目前已经被orcale收购

    sqlserver 微软推出,只能用在windows服务器上,所以发展不是很好

    oracle 目前最强大的关系型数据库,主要是在集群和用户管理上,非常适合大型企业

    db2 IBM的产品,主要面向不差钱的企业用户,捆绑硬件销售

  2. 非关系型数据库

    没有能力帮我们维护数据之间的关系

    通常存储介质都是内存

    常见非关系型数据库

    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管理员密码的设置

  1. 知道原始密码

    1. 登录到mysql执行更新语句来修改

      update user set password =password ('123') where host='localhost' and user='root'

      刷新 flush privileges,或者重启mysqld

    2. mysqladmin小工具

      mysqladmin -uroot -p123 password 321

      -p是原始面

  2. 不知道原始密码

    1. 删除权限相关的文件(不推荐)

    2. 跳过授权表

      手动启动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
#第一行是编码,第二行是排序规则

#修改数据库名可以直接访问文件夹修改文件夹名(不推荐)

命名规范

  1. 不区分大小写
  2. 不要使用关键字
  3. 不能使用纯数字
  4. 可以使用下划线,通常字符下划线数字的组合

表的操作

#创建表 需要制定列的信息
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;
posted @ 2019-07-11 15:58  萨萌萌  阅读(119)  评论(0编辑  收藏  举报