数据库简介、安装以及基本sql语句

数据存取演变史

  1. 文本文件

    文件路径不一致:C:\a.txt D:\aaa\b.txt E:\ccc.txt

    数据格式不一致:jason|123 tony$123 kevin@123

  2. 软件开发目录规范

    规定了数据文件的大致存储位置:db文件夹

    针对数据格式还是没完全统一:比如统一json文件但是内部键值对不同

  3. 数据库服务

    统一了存取位置,也统一了数据格式(完全统一)

数据库软件应用史

  1. 单机游戏

    不同计算机上的相同程序,数据无法共享。数据库服务全部在本地完成

  2. 网络游戏

    不同计算机上的相同程序,数据可以共享。数据库服务单独在网络架设(远程数据库服务)

  3. 补充

    远程数据库服务中,数据库集群基本解决了数据库安全性问题服务器负载问题(让多台服务器运行相同的数据库服务)

数据库的本质

数据库在不同的角度下描述的意思不一样

  • 站在底层原理的角度

    数据库指的是专门用于操作数据的过程

    eg:运行在内存中的代码

  • 站在现实应用的角度

    数据库指的是拥有操作界面的应用程序

    eg:用于操作进程的界面

我们不做特殊说明的情况下提数据库其实都是在指数据库软件,也可以称数据库软件的本质是一款cs架构的应用程序,言外之意所有的程序员理论上都可以编写。市面上已经有很多数据库软件

数据库的分类

关系型数据库

  • 数据的组织方式有明确的表结构

    id name password

    关系型数据库的存取数据的方式可以看成是表格

  • 表与表之间可以建立数据库层面的关系

    即两张表或多张表可以通过外键等关系进行关联查询

    用户表 房屋表---->可以根据用户表的用户查找房屋表中用户的房屋信息

    只要获取到用户表的一条数据,就可以获取到与之相关的其他表的数据

常见的关系型数据库有:MySQL、PostgreSQL、MariaDB、Oracle、sqlite、db2、sql server

  • MySQL:开源、使用最为广泛、数据库学习必学
  • PostgreSQL:开源、支持二次开发
  • MariaDB:开源、与MySQL是同一个作者、用法也极其相似
  • Oracle:收费、安全性极高、主要用于银行及各大重要机关
  • sqlite:小型数据库、主要用于本地测试(django框架自带该数据库)

非关系型数据库

  • 数据的组织方式没有明确的表结构,是以k:v键值对的形式组织的

    {'name':'jason'}

    {'username':'jerry','pwd':123}

  • 数据之间无法直接建立数据库层面的关系

    NoSQL

常见的非关系型数据库有:redis、mongoDB、memcache

  • redis:目前最火、使用频率最高的缓存型数据库(数据在加载在内存中进行查询,速度极快)
  • mongoDB:稳定型数据库、最像关系型的非关系型、主要用于爬虫、大数据
  • memcache:已经被redis淘汰

MySQL简介

虽然数据库软件很多,但是底层操作几乎一致,学会一个其他的都可以快速上手。学会了MySQL基本就可以快速上手所有的关系型数据库甚至非关系型数据库

  1. MySQL版本问题

    5.6X:前几年使用频率最高的版本

    5.7X:最近尝试迁移的版本(频率+)

    8.0X:最新版、功能很强大、但是线上环境几乎不同(本地自己用非常好用)

虽然版本有区别,但是操作上几乎没有区别、主要体现在底层运作

  1. 下载与安装

    1. 访问官网
    2. 点击DOWNLOADS
    3. 点击GPL
    4. 点击community server
    5. 点击archives
    6. 点击download
  2. 解压安装

    上诉方式下载的压缩包里还有服务端和客户端,支持本地操作

  3. 主要文件介绍

    bin文件夹:mysqld.exe服务端 mysql.exe(客户端)

    data文件夹:存取数据

    My-default.ini:默认配置文件

基本使用(windows)

  1. 先启动服务端

    可能会报错,拷贝关键信息去百度

  2. 查找mysqld文件位置

    mysqld:cmd窗口就是服务端,不要关闭

  3. 再次开启新的cmd窗口

    mysql:直接回车会以 游客模式进入,功能很少

  4. 用户名密码登录

    mysql	-u用户名	-p密码:mysql默认管理员账号,用户名是root,密码是空	  # 首次启动情况下
    
  5. 退出

    exit
    
    quit
    

系统服务制作

如何解决每次都需要切换路径查找文件的缺陷: 添加环境变量

将mysql服务端制作成系统服务(随着计算机的开启而启动,关闭而结束)

1.以管理员身份打开cmd窗口

2.执行系统服务命令

# 执行系统服务命令
mysqld --install

# 启动服务端(两种)
# 1.右键直接点击启动
# 2.命令启动
net start mysql

# 查看系统服务的命令
services.msc

# 关闭mysql服务端
net stop mysql

# 移除系统服务
1.先确保服务已经关闭
2.执行移除命令

mysqld --remove

密码相关操作

修改密码

mysqladmin命令

# 通用方式  直接在cmd中写
mysqladmin -u用户名	-p原密码	password	新密码 

# 第一次修改
mysqladmin -u root -p password 123

# 第二次修改
mysqladmin -u root -p123 password 321


# 偏门方式(有些版本无法使用): 需要先登录
set password=PASSWORD(新密码);

忘记密码

解决方式1:直接重装、拷贝对应文件

解决方式2:先关闭服务端,然后以不需要校验用户身份的方式启动、在修改、最后再安全正常方式启动

# 关闭服务端
net stop mysql

# 以不需要校验用户的方式启动mysql
mysqld --skip-grant-tables

# 无密码就可以登录
mysql -uroot -p

# 在mysql库的user用户表中修改密码即可
update mysql.user set password=password(123) where Host='localhsot' and User='root'

# 重启mysql
net stop mysql
net start mysql

SQL与NoSQL

数据库的服务端支持各种语言充当客户端

以mysql服务端为例:mysql客户端、python代码编写的客户端、java编写的客户端

为了能够兼容所有类型的客户端,有两种策略

  • 服务端兼容:不合理、消耗数据库服务端资源
  • 指定统一标准:SQL语句、NoSQL语句

SQL与NoSQL

  • SQL语句的意思是操作关系型数据库的语法
  • NoSQL语句的意思是操作非关系型数据库的语法

SQL有些时候也用来表示关系型数据库,NoSQL也用来表示非关系型数据库

数据库重要概念

下述概念仅仅是诶了小白更快的理解,并不是完全的准确

库 ---> 文件夹

表 ---> 文件夹里面的文件

记录 ---> 文件里一行行的数据

show databases;					-- 查看所有的数据库
show tables;					-- 查看库下所有的表
select * from mysql.user;			-- 查看mysql库下user表中的所有的记录

补充

  1. SQL语句结束符是分号:;
  2. 取消SQL语句的执行:\c

针对库的基本SQL语句

-- 增
create database 库名;

-- 查
show databases;
show create database 库名;

-- 改
alter database 库名 charset='gbk';

-- 删
arop database 库名;

针对表的基本SQL语句

-- 查看当前所在的库名
select database();  -- 如果没有进入库,那么就是NULL, use 库名;

-- 增
create table 表名(字段名 字段类型,字段名 字段类型...);

-- 查
show tables;  						-- 查询当前所在库的所有表名
show create table 表名;					 -- 查询建表语句
describe/desc 表名;					 -- 查询表结构

-- 改
alter table 旧表名 rename 新表名;	 -- 改表明

-- 删
drop table 表名;

针对记录的基本SQL语句

-- 增
insert into 表名 values(数据,数据);
insert into 表名 values(数据,数据),(数据,数据),(数据,数据),(数据,数据);

-- 查
select * from 表名;    		  -- 查看表的所有数据
select 字段1,字段2 from 表名;      -- 查看表中字段1,字段2的数据

-- 改
update 表名 set 字段名=新数据 where 筛选条件;

-- 删
delete from 表名;  		 	 -- 删除整张表
delete from 表名 where 筛选条件		 -- 按照筛选条件删除数据
posted @ 2022-08-12 17:11  荀飞  阅读(84)  评论(0编辑  收藏  举报