MySQL基础-数据定义语言(二)
表的创建
有两种方式:1. 新创建一个表;2. 根据旧表结构创建新表;格式如下:
1234567891011121314151617181920212223#################################################1.自定义创建新表CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]########示例1mysql> CREATE TABLE demo_0 ( -> `name` VARCHAR(32), -> age TINYINT, -> gender CHAR(1), -> `resume` TEXT); #如果不指定字符集和校对规则,则采用默认对象########示例2mysql> CREATE TABLE demo_1 ( -> `name` VARCHAR(32) ...
MySQL基础-数据类型
概要
MySQL 数据类型又叫 “列类型” 、“字段类型” 。数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。MySQL 数据类型大致分为 数值类型,字符串/文本类型,二进制类型与时间/日期类型 ,如以下三张表所示:
数值类型
类型
大小(字节)
范围(signed)
范围(unsigned)
TINYINT
1
-128 ~ 127
0 ~ 255
SMALLINT
2
-32768 ~ 32767
0 ~ 65535
MEDIUMINT
3
-8388608 ~ 8388607
0 ~ 16777215
INT
4
-2147483648 ~ 2147483647
0 ~ 4294967295
BIGINT
8
-9223372036854775808 ~ 9223372036854775807
0 ~ 18446744073709551615
FLOAT
4
DOUBLE
8
DECIMAL
M+2
取决于M
依赖于M
字符串类型
类型名称
说明
存储需求
CHAR
固定长度非二进制字符串
取 ...
MySQL基础-数据定义语言(一)
对数据库进行查询和修改操作的语言叫做 SQL(Structured Query Language,结构化查询语言)。SQL 语言是目前广泛使用的关系数据库标准语言,是各种数据库交互方式的基础。绝大多数 DBMS(Datebase Management System) 都支持 SQL 语言,因此,学习 SQL 使你几乎能与所有数据库打交道。同时,许多 DBMS 厂商通过增加语句和指令对 SQL 进行了扩展,虽然各厂商之间的扩展并不兼容,但它们都支持标准 SQL(ANCI SQL),所以无需担心 SQL 不适用于某个 DBMS。
SQL组成
SQL 包含以下 4 部分:
数据定义语言(Data Definition Language,DDL)
用来创建或删除数据库以及表等对象,针对的是表的结构(列) 。主要包含以下几种命令:
DROP :删除数据库和表等对象
CREATE :创建数据库和表等对象
ALTER :修改数据库和表等对象的结构
数据操作语言(Data Manipulation Language,DML)
用来变更表中的记录,针对的是表的内容(行) 。主要包含 ...
MySQL基础-安装配置
MySQL下载
进入到MySQL官网地址 ,选择常用的 5.7.19 版本,操作系统选择 Microsoft Windows ,然后点击 Windows (x86, 64-bit), ZIP Archive 所在行的 Download ,如下图:
下载后得到 .zip 压缩包,单击右键解压到指定的路径,笔者选择的路径是 D:\MySQL ,解压好后如下:
MySQL配置
配置文件
在 D:\MySQL\mysql-5.7.19-winx64 目录下新建 my.ini 文件,创建后写入以下代码:
123456789101112[client]port=3306default-character-set=utf8[mysqld]# 设置MySQL的安装目录basedir=D:\\MySQL\\mysql-5.7.19-winx64\\# 设置MySQL数据库的数据存放目录datadir=D:\\MySQL\\mysql-5.7.19-winx64\\dataport=3306character-set-server=utf8#跳过安全检查,设置密码后才将其注释skip-grant ...
路由器中的排队与调度
经过上一篇文章《路由器的工作原理》的学习,我们应该发现当端口的处理速率与交换结构的转发速率不匹配时,就可能发生排队(Queuing);以何种方式调离队列中的分组,称之为调度(Scheduling)。本文将详细讨论这两个问题。
何处出现排队
排队的位置和程度取决于流量负载、端口处理速率以及交换结构的转发速率,当端口处理速率和转发速率不匹配时,就会发生排队。当队列占满整个缓冲区时,路由器将无法接收到新的分组,这时就会产生 丢包(packet loss) 。在 TCP 一章的讨论中,我们经常说到的丢包就在这里产生。
输入排队
如果交换结构的转发速率慢于输入端口的处理速率,就会在输入端口发生排队,因为到达的分组必须加入输入端口队列中,以等待通过交换结构传输到输出端口。在输入端口的排队大致能分为两种类型:1.端口竞争;2.队头阻塞(Head-Of-The-Line, HOL) 。如下图所示:
端口竞争
如图,当第一排端口的队头分组和第三排的队头分组要发往同一个输出端口时,就会发生排队。即使不发往同一个端口,由于交换结构种类的限制,也可能发生排队,比如经总线交换和经内存交换每次只能交换一个 ...
路由器的工作原理
本文主要讨论网络层数据平面中的转发功能的硬件实现,即如何将分组从路由器的输入链路传输到合适的输出链路。
下图展示了通用路由器的一般结构:
我们可以从图中看到,路由器大致有 输入端口、输出端口、交换结构、路由处理器 四个主要组件,下面我们简单分析各个组件的功能:
输入端口
1 号部分负责物理层功能:PHY(Physical Layer Device)模块或者 MAU(Medium Attachment Unit)模块将信号转换成通用格式,并将信号发送给 MAC 模块;
2 号部分负责链路层功能:MAC 模块收到 PHY 模块发来的信号后,将信号转换为数字信息,到达信号末尾时检查 FCS,如果 FCS 出错则直接丢弃此分组 ,若无错则 再检查分组 MAC 头部中的接收方 MAC 地址是否与自己一致 ,若不一致则直接丢弃,若一致则去掉 MAC 报头并将数据部分移交给网络层;
3 号部分负责网络层功能:查询转发表 ,决定此分组的输出端口;
为了更清楚地了解 PHY 和 MAC 模块在输入与输出端口中的作用,我们来看看电脑的网卡是如何将信息发送到网络中的:
首先,MAC 模块从报头开 ...
IP编址
IP地址的定义
IP 地址(IPv4)由 32 位 bit 储存,范围为 000 ~ 232−12^{32}-1232−1 ,即允许最多 43 亿台设备连入网络。为方便人为识别 IP 地址,我们采用 点分十进制 来表示 IP 地址,如下:
需要注意的是,IP 地址并非根据主机台数来配置,而是根据主机的网卡(NIC)来配置 。由于每一台主机一般都有多张网卡,而每张网卡又必须分配一个 IP 地址,所以 IPv4 的 IP 地址数目(约43亿)根本不够用,为了在 IPv4 的基础上容纳更多的主机, NAT技术应运而生。IPv6 也能很好的解决此问题,但由于网络规模巨大,全面替代 IPv4 还需要假以时日。
同时,为了方便网络管理和路由控制,IP 地址分为网络号和主机号 。网络号(网段)用来表示相邻的一片主机(如公司内的主机采用一个网络号),主机号则表示网络段中的某一台主机。IP 地址的主机标识不能在同一网段中重复出现。网络号和主机号如何方便网络管理和路由控制呢?举例来说,对于网络管理,广播利用网络号直接将数据报发送到具有同一网络号的所有主机中,而无需一台主机一台主机地发送;对于路由控制,进 ...
差错检测和纠正技术
虽然将本节放入链路层专栏,但需要知道,差错检测和纠正技术不单单出现在链路层,传输层也有此技术的应用,比如 TCP/UDP 中的校验和。校验和主要用于传输层,奇偶校验和循环冗余检测(CRC)则主要用于链路层。
校验和
校验和(Checksum) 是一个端到端的校验方式,由发送端计算,然后由接收端验证,如果接收方检测到校验和有差错,则报文会被直接丢弃 。其目的是为了发现首部和数据在发送端到接收端之间发生的任何改动。UDP 可选择使用校验和,而 TCP 则强制使用校验和 。CheckSum 不同领域可能采用不同算法,算法存在细微差别,且覆盖区域也不同:
IP校验和:IP 首部
ICMP校验和:ICMP 首部 + ICMP 数据
UDP、TCP校验和:首部 + 数据 + 伪首部
伪首部并非 TCP&UDP 数据报中实际的有效成分,它是一个虚拟的数据结构,其中的信息是从数据报所在 IP 分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和 。伪头部 = 源 IP 地址 + 目的 IP 地址 + 8 位协议 + 16 位 UDP 长度,通过 伪头部+ ...
TCP存活检测机制
TCP存活检测的背景
由于 TCP 位于传输层,两端的连接为逻辑信道(由五元组控制)而非物理连接,所以当两端处于连接状态但未发送数据时,理论上即使中间的路由器崩溃重启、或者中间的网络线路拔掉在插上等等,只要客户端和服务器端的主机没有发生异常,这个TCP连接仍然是处于连接状态的。这会引发以下问题:
服务器资源被持续占用(需要保存连接的状态信息)
防火墙和NAT设备可能会保存一个连接超时的定时器,如果这个 TCP 连接长时间没有数据传输,定时器超时后,服务器端和客户端实际上已经不能在进行通信。
为了解决上面的两个问题,TCP连接需要一个存活检测机制,定时检测当前的 TCP 连接是否可用,以刷新防火墙和 NAT 信息,或者当检测到连接失败的时候释放相关资源。TCP 存活检测机制主要为 长连接 服务。
存活检测实现方式
应用层心跳机制
TCP保活机制
相比传输层的存活检测,应用层的检测更灵活且不依赖传输层的协议,但需要应用自定义心跳消息头。心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉对方自己还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别 ...
TCP计时器详解
建立连接定时器 (connection-establishment timer)
重传定时器 (retransmission timer)
延迟应答定时器 (delayed ACK timer)
坚持定时器 (persist timer)
保活定时器 (keepalive timer)
FIN_WAIT_2 定时器 (FIN_WAIT_2 timer)
TIME_WAIT 定时器 (TIME_WAIT timer, 也叫2MSL timer)
建立连接定时器
建立连接的过程中,在发送 SYN 时, 会启动一个定时器(1秒或3秒,取决于实现),如果 SYN 包丢失了, 那么 1 秒以后会重新发送 SYN 包,若再次超时,则会将 RTO 设为 2,再超时则设为 4,每次翻倍(指数回退)。在 Linux 里,客户端的 SYN 报文最大重传次数由 tcp_syn_retries内核参数控制,这个参数是可以自定义的,默认值一般是 5,所以一般等待 60 秒后再无回应就会关闭连接。
重传定时器
重传定时器在 TCP 发送普通报文时设定,具体大小(一般为1秒)参见RTT的测量,在计时器超时后 ...