• 初识数据库


    存储数据的演变过程

    数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。

    如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。

    很不幸,这些假设都是你自己意淫出来的,数据格式也是千差万别的完全取决于我们自己

    小李
    jason|123|NB
    小王
    egon-123-DBJ
    小红
    tank~123~hecha

    软件的开发目录规范

    限制了存储数据的具体位置

    bin 启动文件
    conf 配置文件
    core 核心逻辑代码
    db 数据文件
    lib 公共类
    log 日志文件
    readme 使用说明

    假设上述是一个单机游戏
    那么每个人的游戏记录只会在自己的计算机上面保存
    注册登录的账号也只能在自己的计算机上有效
    如何将单机变成连网:将数据库保存部分全部统一起来,所有人操作数据都来一个地方操作

     

    数据库的本质

    本质其实就是一款基于网络通信的应用程序
    那其实每个人都可以开发一款数据库软件 因为它仅仅就是一个基于网络通信的应用程序
    也就意味着数据库软件其实有很多很多
    关系型数据库
    MySQL、oracle、db2、access、sql server
    非关系型数据库
    redis、mongodb、memcache
    关系型
    1 数据之间彼此有关系或者约束
    男生表和前女友表
    2 存储数据的表现形式通常是以表格存储
    name password hobby
    jason 123 学习
    egon 123 女教练
    tank 123 吃生蚝
    每个字段还会有存储类型的限制
    比如姓名只能存字符串...
    非关系型
    存储数据通常都是以k,v键值对的形式

    MySQL

    任何基于网络通信的应用程序底层用的都是socket

    -服务端
    -基于socket通信
    -收发消息
    -SQL语句

    -客户端
    -基于socket通信
    -收发消息
    -SQL语句
    MySQL不单单支持MySQL自己的客户端app还支持其他编程语言来充当客户端操作
    如何解决语言沟通的障碍?
    1 让服务端兼容所有的语言(一个人精通多国语言)
    2 采用统一的语言(SQL语句)
    
    

    重要概念介绍

    
    
    库        ------->        文件夹
    -------> 文件
    记录       ------->         文件内一行行的数据
        name      password      hobby
    jason 123 学习
    egon 123 女教练
    tank 123 吃生蚝
    表头 表格的第一行字段
    字段 name、password、hobby

    sql语句初识

    1 MySQL中的sql语句是以分号作为结束的标志

    2 基本命令
    show databases; 查看所有的库名

    3 连接服务端的命令可以简写
    mysql -uroot -p

    4 当你输入的命令不对 又不想让服务端执行并返回报错信息 可以用c取消
    错误命令 c

    5 客户端退出 退出命令加不加分号都可以执行
    quit
    exit

    6 当你在连接服务端的时候 发现只输入mysql也能连接
    但是你不是管理员身份 而只是一个游客模式
    
    
    小知识点补充
    
    
    1 如何查看当前具体进程
    tasklist
    tasklist |findstr mysqld

    2 如何杀死具体进程(只有在管理员cmd窗口下才能成功)
    taskkill /F /PID PID号

    基本sql语句

    PS:大部分程序的业务逻辑其实都是增删改查
    **针对库的增删改查(文件夹)**

    # 增
    create database db1;
    create database db2 charset='gbk';
    # 查
    show databases; # 查所有
    show create database db1; # 查单个
    # 改
    alter database db2 charset='utf8';
    # 删
    drop database db2;

    **针对表的增删改查(文件)**

    在操作表(文件)的时候 需要指定所在的库(文件夹)

    # 查看当前所在的库的名字
    select database();
    # 切换库
    use db1;

    # 增
    create table t1(id int,name char(4));
    # 查
    show tables; # 查看当前库下面所有的表名
    show create table t1;
    describe t1; # 支持简写 desc t1;
    # 改
    alter table t1 modify name char(16);
    # 删
    drop table t1;

    create table db2.t1(id int); 也可以用绝对路径的形式操作不同的库

    **针对数据的增删改查(一行行数据)**

    一定要先有库 有表 最后才能操作记录

    # 增
    insert into t1 values(1,'jason');
    insert into t1 values(1,'jason'),(2,'egon'),(3,'tank');
    # 查
    select * from t1; # 该命令当数据量特别大的时候不建议使用
    select name from t1;
    # 改
    update t1 set name='DSB' where id > 1;
    # 删
    delete from t1 where id > 1;
    delete from t1 where name='jason';
    # 将表所有的数据清空
    delete from t1;
  • 相关阅读:
    段间跳转之陷阱门
    段间跳转之中断门
    段间跳转之调用门
    代码段段间跳转流程
    Window内核学习之保护模式基础
    回顾2020,展望2021
    内存管理之堆
    Windows进程间通讯(IPC)----信号量
    线程本地存储(动态TLS和静态TLS)
    Windows进程间通讯(IPC)----套接字
  • 原文地址:https://www.cnblogs.com/h1227/p/12818406.html
Copyright © 2020-2023  润新知