• Day41——数据库基础,基本SQL语句


    数据存取演变史

    1.文本文件

    最基础的数据存储方式,但没有统一的规范,导致它的存放位置和数据格式有所不同,不利于以后不同的人去维护。

    缺点

    1. 没有固定的存储地址
    2. 没有固定的数据存储类型

    总结:程序应用无法做到兼容

    2.软件目录开发规范

    按照文件功能的不同规定了相应的位置,解决了部分兼容问题。

    规定了数据文件的大致存储位置: db文件夹
    但是针对数据格式还是没有完全统一: 比如统一json文件但是内部键值对不同

    3.数据库服务

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

    数据库软件应用史

    1.单机游戏阶段

    当处理完数据储存方式后,只是解决了各种项目上的问题,暂时只能实现数据的区域性共享,无法向互联网上进行交互。

    不足:

    不同计算机上的相同程序,数据不能共享;数据库服务都在本地存储。

    2.网络游戏阶段

    利用服务器解决了数据交互共享,使得开发的项目可以去共更多人使用。

    实现:

    不同的计算机上的相同程序,数据可以共享。

    数据基于网络保存在同一个服务器上。

    不足:

    但是如果所有的数据都保存在同一个服务器里,会降低服务器的安全性,负载量大大增加。

    集群:

    增加远程服务器的数量 数据同步保存 任务均匀分担,具有相同功能的多个服务器组合到一起 就可以称之为是集群

    可以解决服务器的安全问题和服务器负载问题。

    数据库的本质

    数据库三字在不同角度下描述的意思不一样
    1.站在底层原理的角度
    	数据库指的是专用用于操作数据的进程
    		eg:运行在内存中的代码
    2.站在现实应用的角度
    	数据库指的是拥有操作界面的应用程序
    		eg:用于操作进程的界面
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    总结:

    • 我们平时在说数据库的时候大部分指的是操作数据库的应用软件
    • 我们也称数据库软件本质是一款cs架构的应用程序。言外之意就是程序员也可以自己编写出一款数据库软件。现在市面上已经有很多数据库软件了!!!

    数据库的分类

    关系型数据库

    关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。

    特点:

    1.数据的组织方式有明确的表结构
    	id	name  password
    	ps:关系型数据库存取数据的方式可以看成是表格
    2.表与表之间可以建立数据库层面的关系
    	eg:
          用户表	房屋表
    ps:只要获取到用户表的一条数据 就可以获取到与之相关的其他表数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

    非关系型数据库

    NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。对于非结构化数据的处理更合适;出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。

    特点:

    1.数据的组织方式没有明确的表结构 是以k:v键值对的形式组织的
       {'name':'jason'}
    	{'username':'kevin','pwd':123}
    2.数据之间无法直接建立数据库层面的关系
    
    • 1
    • 2
    • 3
    • 4

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

    redis:目前最火 使用频率最高的缓存型数据库
    mongoDB:稳定型数据库 最像关系型的非关系型 主要用于爬虫、大数据
    memcache:已经被redis淘汰
    
    • 1
    • 2
    • 3

    MySQL简介

    1.MySQL版本

    5.6X:前几年使用频率最高的版本
    5.7X:最近尝试迁移的版本(频率+)
    8.0X:最新版 功能很强大 但是线上环境几乎不用(本地自己用非常好用)
    
    • 1
    • 2
    • 3

    虽然版本不同,但是基本使用都是差不多的,主要体现在底层运作。

    2.MySQL的安装与下载

    1. 1.访问官网

      下载地址:https://www.mysql.com/

    2. 下载步骤

      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    3.主要文件目录介绍

    在这里插入图片描述

    bin文件夹
    	mysqld.exe服务端		mysql.exe客户端
    data文件夹
    	存取数据
    my-default.ini
    	默认配置文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    基本使用

    必须要先启动服务端,然后再打开一个窗口用作于客户端

    2.查找mysqld文件位置
    	mysqld
    		cmd窗口就是服务端 不要关闭
    3.再次开启新的cmd窗口
    	mysql
    		直接回车会以游客模式进入 功能很少
    4.用户名密码登录
    	mysql -u用户名 -p密码
    		mysql默认管理员账号 用户名是root 密码是空
    5.退出
    	exit
    	quit 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    提示:

    启动服务端的时候可能会报错
    解决策略:
    拷贝报错信息(mysql启动报错’错误代码)网上搜索,基本都会有解决方式

    系统服务制作

    引入

    取消繁杂的命令启动,利用计算机的系统服务处理。

    问题

    1. 我们不想切换路径 直接输入命令
    2. 我们不想自己启动服务端 设置成开机自启动(消耗的资源很少 不用担心)

    问题一

    针对问题一的解决措施就是添加环境变量

    将D:\MySql\mysql-5.6.44-winx64\bin添加到环境变量
    
    • 1

    问题二

    针对问题二的解决措施就是编写固定的命令,使得跟随电脑开关机自动化

    1. 先确保之前的服务端关闭了,然后重新以管理员的身份打开cmd窗口

    2. 执行系统服务命令

      mysqld --install
      
      • 1
    3. 启动服务端

      方法一.右键直接点击启动
      方法二.命令启动
      		net start mysql
      
      • 1
      • 2
      • 3
    4. 关闭所有的cmd 随意打开一个cmd窗口
      输入mysql即可链接到服务端

    补充知识:

    1. 查看系统服务的命令

      services.msc
      
      • 1
    2. 关闭mysql服务端

      net stop mysql
      
      • 1
    3. 移除系统服务

      1.先确保服务已经关闭
      2.执行移除命令
      	mysqld --remove
      
      • 1
      • 2
      • 3

    密码相关操作

    登录的两种方式

    1. 直接输入mysql命令登录

      默认是游客模式,没有太多的权限

    2. 通过用户和密码登录

      学习阶段不用考虑用户管理 直接使用root用户(管理员账号,第一次登录没有密码)

      mysql -uroot -p 直接回车
      
      • 1

    修改密码

    1. 方式1:在cmd窗口下直接修改(不要登录进去)

      mysqladmin -u用户名 -p原密码 password 新密码
      
      • 1
      • 第一次修改

        mysqladmin -uroot -p password 123
        
        • 1
      • 第二次修改

        mysqladmin -uroot -p123 password 321
        
        • 1
    2. 方式2:登录状态下修改当前用户密码(需要先登录)

      set password=PASSWORD(新密码);  有些版本不支持,比较偏门
      
      • 1

    忘记密码

    直接重装\拷贝对应文件
    先关闭服务端 然后以不需要校验用户身份的方式启动 再修改 最后再安装正常方式启动
    1.net stop mysql
    2.mysqld --skip-grant-tables
    3.mysql -uroot -p
    4.update mysql.user set password=password(123) where Host=‘localhost’ and User=‘root’;
    5.net stop mysql
    6.net start mysql

    SQL与NoSQL

    引入

    数据库服务端支持很多客户端来链接使用,这就使得数据库自带的客户端可能是 python代码编写的也可能是 java代码编写的 …
    那如何让服务端兼容诸多客户端 实现正常交互呢?

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

    1.服务端兼容
        	不合理 消耗数据库服务端资源!!!
    2.制定统一标准
    		统一沟通标准,SQL语句、NoSQL语句
    
    • 1
    • 2
    • 3
    • 4
    • SQL语句
      与关系型数据库交互的语言
    • NoSQL语句
      与非关系型数据库交互的语句

    总结:

    SQL语句的意思是操作关系型数据库的语法
    NoSQL语句的意思操作非关系型数据库的语法
    ps:SQL有时候也用来表示关系型数据库 NoSQL也用来表示非关系型数据库

    数据库重要概念

    1. SQL语句结束符是分号
    2. 取消SQL语句的执行(\c)
    3. 重要概念
      库 >>> 文件夹
      表 >>> 文件夹里的文件
      记录 >>> 文件里一行一行的数据

    查看所有的数据库:show databases;
    查看所有的表:show tables;
    查看user表里面所有的记录:select * from mysql.user;

    针对库的基本SQL语句

    • create database 库名;
      
      • 1
    • show database 库名;
      show create database 库名;
      
      • 1
      • 2
    • alter database 库名 charset='gbk'; # 修改库的编码
      
      • 1
    • drop database 库名;
      
      • 1

    针对表的基本SQL语句

    补充

    查看当前所在的库名:

    select database();

    如果没有没有切换指定的库,那么就会显示NULL

    如何切换库?

    use 库名;
    
    • 1

    强调

    我们在操作库、表、记录的时候 MySQL默认自带的都不要动

    • create table 表名(字段1 字段类型1, 字段2 字段类型2, .......)
      
      • 1
    • select tables;  # 查看所有的表
      select create table 表名;
      describe 表名;
      desc 表名;
      
      • 1
      • 2
      • 3
      • 4
    • alter table 旧表名 rename 新表名;
      
      • 1
    • drop table 表名;
      
      • 1

    针对记录的基本SQL语句

    • insert into 表名 values (数据, 数据);  # 创建单条数据
      insert into 表名 values(数据, 数据), (数据, 数据), (数据, 数据);  # 创建多条数据
      alter table 表名 add 字段名 字段类型;  # 新增字段 
      
      • 1
      • 2
      • 3
    • select * from 表名;  # 查询表中所有数据
      select 字段名,字段名 from 表名;   # 根据字段名查找数据
      ps:如果表中字段较多出现了错乱 可以结尾写\G
      
      • 1
      • 2
      • 3
    • update 表名 set 字段名=新数据值 where 筛选条件;
      
      • 1
    • delete from 表名;  # 删除所有的数据
      delete from 表名 where 筛选条件;
      
      • 1
      • 2
  • 相关阅读:
    Python读取TCP的4字节浮点数
    GO[一起来学习Go吧]
    springboot+html实现密码重置功能
    《WEB安全渗透测试》(33)使用内容安全策略(content-security-policy)来防御XSS漏洞
    PSSecurityException
    论文笔记:YOLOv8-QSD 自动驾驶场景小目标检测算法
    memcpy函数
    OpenHarmony创新赛丨报名倒计时,超强秘籍带你直通大奖!
    22 C++设计模式之备忘录(Memento)模式
    Intel x86_64 LBR功能
  • 原文地址:https://blog.csdn.net/lzq78998/article/details/126307508