0x10 网络编程与数据库

1. TCP/IP 模型


    1. 应用层: 用于提供常见的网络应用服务
      • FTP、POP3、SMTP、HTTP(S)、DHCP、DNS
    1. 传输层:提供端口到端口之间的通信功能
      • TCP(传输控制协议)、UDP(用户数据包协议)
    1. 网络互连层:用于在IP主机和路由间传输信息
      • IP、ICMP、ARP
    1. 网络接口层:用于将数据从一个设备传输到另一个设备
      • SLIP、PPP

2. 网络编程


  • 网络编程基础
    • 在Windows中,无论使用何种方式进行网络编程,第一个调用的函数始终是WSAStartup()
    • 套接字分为三种,分别是流式套接字(TCP),数据报套接字(UDP),原始套接字(RAW)
    • 在网络传输中,通常使用的是大端模式,可以通过 htonX(l\h) 函数将主机序(小端)转为网络序(大端)
      • 0x00 00 00 01 -> 服务器 0x01 00 00 00
  • 什么是TCP?
    • TCP是一种面向连接的、可靠的的传输层通信协议。
    • 客户端不需要绑定端口设置接听,需要使用connect连接目标服务器
  • 什么是UDP?
    • UDP是一种面向无连接的、不可靠的传输层通信协议
    • 因为UDP传输基于无连接,所以没有等待连接和连接的部分 | TCP 连接流程 | UDP 连接流程 | | —- | —- | | TCP是一种面向连接的、可靠的的传输层通信协议 | UDP是一种面向无连接的、不可靠的传输层通信协议 | | image.png | image.png |

3. SQL语法


  • SQL约束

    • 主键(PRIMARY KEY): 唯一标识数据库表中的每条记录,通常有且只能有一个。
    • 外键(FOREIGN KEY):一个表中的外键通常绑定到另一个表的主键,可以有多个。
    • 唯一(UNIQUE): 规定该字段的数据是唯一的,可以有多个。
    • 非空(NOT NULL): 规定该字段不能为NULL,可以有多个。
    • 默认(DEFAULT):指定当不设置数据时的默认值,可以有多个。
    • 检查(CHECK): 用于检查设置的值是否合理,可以有多个。
  • 数据库指令 ```cpp

    创建一个不存在的数据库并指定编码

    CREATE DATABASE IF NOT EXISTS test;

删除一个已存在的数据库

DROP DATABASE IF EXISTS test;

显示所有的数据库

SHOW DATABASES;

  1. - **表操作指令**
  2. ```cpp
  3. # 创建一个表
  4. Create table 表名
  5. (
  6. Id int primary key, #主键约束
  7. Name varchar(20) unique, #唯一约束
  8. Age int not null, #非空约束
  9. Sex varchar(5) check(Sex=’男’ or Sex=’女’), #检查约束
  10. Ethnic varchar(5) default ’汉’ #默认约束
  11. );
  12. # 显示所有表
  13. SHOW TABLES;
  14. # 删除一张表
  15. DROP TABLE name;
  16. # 修改列名以及属性名
  17. ALTER TABLE table4 CHANGE name2 char(20);
  18. # 删除一个已存在的列
  19. ALTER TABLE table4 DROP name3;
  • 项操作指令 ```cpp

    向表中指定字段添加数据

    INSERT INTO name(column1, column2) VALUES (value1, value2);

向表中添加多列数据

INSERT INTO name(column1, column2) VALUES (1,2),(3,4);

更新表中指定字段的所有数据

UPDATE name SET column = xxx;

更新表中满足条件的指定字段

UPDATE name SET column = xxx [WHERE];

删除表中的指定列

DELETE FROM 表名 [WHERE];

删除表中所有数据

delete from 表名;

  1. - **查询数据**
  2. ```cpp
  3. # 查询表中的所有记录
  4. SELECT * FROM 表名;
  5. # 查找指定字段
  6. SELECT 字段名 FROM 表名;
  7. # 条件查询
  8. # 常见的比较运算符有: > < <= >= = <>
  9. # 可以使用 and or not 组成多个条件的判断
  10. SELECT 字段名 FROM 表名 WHERE 字段名 = ?;
  11. # 模糊查询: % 匹配任意长度字符
  12. select * from 表明 where name like '1%2'
  13. # 模糊查询: _ 匹配任意一个字符
  14. select * from 表明 where name like '_M_'