这篇内容较多,尝试加了目录,更结构清晰了。
一、信息储存:位Bits 和字节Bytes(计算机的最小尺度)
1、Bit : the smallest unit of storage
• A bit stores just a 0 or 1 一位只存0或1 it's the smallest building block of storage.
Everything in a computer is 0's and 1's.
• 'Anything with two separate states can store 1 bit':
在计算机内部,所有的数据和信息都被编码为二进制形式,即一系列的0和1。
这些二进制位(bits)可以被组合起来表示更复杂的数据结构和信息。
例如:
一个开关,当它处于打开状态时可以表示1,关闭状态时表示0,因此它可以存储1位信息。
一个LED灯,当它亮起时可以表示1,熄灭时表示0,同样也能存储1位信息。
在磁存储介质(如硬盘或磁带)中,每个微小的磁性区域可以有两种不同的磁化方向,分别对应0和1,因此也能存储1位信息。
In a chip: electric charge = 0/1 芯片:电荷=0/1
In a hard drive: spots of North/South magnetism = 0/1 硬盘驱动器:北/南磁点=0/1
• 字节与位的联系:Group 8 bits together to make 1 byte. 1字节(byte)= 8位(bit)。
• Patterns with bits 位模式数量
In general: add 1 bit, double the number of patterns
1 bit - 2 patterns :0 1
2 bits - 4 :00 01 10 11
3 bits - 8 :
000 001 010 011
100 101 110 111
4 bits - 16
5 bits - 32
6 bits - 64
7 bits - 128
8 bits - 256 - one byte
Mathematically: n bits yields 2 to the nth power patterns.
2、Byte: unit of information storage
以字节为单位进行存储和处理的。All storage is measured in bytes.
例如,一个字符(如英文字母或数字)通常占用1个字节的存储空间,而一个较大的数据单元(如整数、浮点数或字符串)则可能占用多个字节。
此外,计算机的内存和硬盘等存储设备也是以字节为单位来划分和管理的。
One byte = collection of 8 bits
e.g. 0 1 0 1 1 0 1 0
One byte can store one character, e.g. 'A' or 'x' or '$'
1 byte is group of 8 bits, and can make 256 different patterns.
One byte can hold a number between 0 and 255
i.e. with 256 different patterns, we can store a number in the range 0..255
Kilobyte, KB, about 1 thousand bytes
Megabyte, MB, about 1 million bytes
Gigabyte, GB, about 1 billion bytes
Terabyte, TB, about 1 trillion bytes (rare)
3、Bytes and Characters
(1)ASCII is an encoding representing each typed character by a number.
Each number between 0 and 255 is stored in one byte.
固定长度编码方式,即每个字符都占用相同的位数。
(2)Unicode is an encoding for mandarin, greek, arabic, etc. languages,
Typically 2-bytes per character.
可变长度编码方式,根据字符的不同而采用不同长度的编码方式。
4、Typing, Bytes, and You
Each letter is stored in a byte,100 typed letters takes up 100 bytes.
When you send, say, a text message, the numbers are sent.
Text is quite compact, using few bytes, compared to images etc. 文本更紧凑
二、 数据类型 Data types
用来指定 表中列可以存储什么类型的数据。
1、数值类型 Numerical data types:
(1)整数 Integers
用于存储没有小数部分的数值。
类型:TINYINT、SMALLINT、MEDIUMINT、INT/INTEGER、BIGINT等,
主要区别在于存储范围和所需的存储空间。
1)SMALLINT
• Use 2 Bytes of memory
• range: -32768 to +32767
2) INT or INTEGER
• Use 4 Bytes of memory
• range: -2147483648 to +2147483647
• A typical choice for integer.
3) BIGINT
• Use 8 Bytes of memory.
(2)定点数 Fixed Point
小数点固定,存储精确的数值。
可表示整数和小数。整数是小数点位于末尾的32位定点数。
1)DECIMAL(M,D)
2) NUMERIC(M,D)
M是数字的最大总位数(精度),必写;
D是小数点后的位数(标度),可以不写。
(3)浮点数 Float
用于存储带有小数部分的数值。
浮点数被表示为:
一个符号位(Sign bit)、一个指数(Exponent)以及一个尾数(Mantissa)的组合。
这种表示方法允许计算机以较小的存储空间来表示较大范围的数值。
m表示尾数,2>m>=1。
1)FLOAT
单精度浮点数 Use 4 Bytes of memory
2)DOUBLE
双精度浮点数 Use 8 Bytes of memory
2、字符串类型 String Types
• 字符值 String Values:
字符串通常使用单引号括起来,以标识字符串的开始和结束。
String values in SQL are surrounded by single quotes 单引号:
E.g. 'I AM A STRING'
• 当字符串中包含特殊字符时,务必使用转义字符进行转义
若想在字符串内部使用单引号:使用反斜杠\ 加一个单引号'或者双引号'' 代替。
'I''M A STRING'
'I\'M A STRING'
• 空字符串 '' empty string
一个长度为0的字符串,它不包含任何字符。
在数据库中,空字符串与NULL值是不同的。
NULL表示“无值”或“未知值”,而空字符串是一个明确的值,只是这个值不包含任何字符。
在SQL查询中,使用IS NULL或IS NOT NULL来检查NULL值,而使用=或<>来比较空字符串和其他值。
(1) CHAR[(M)]
用于存储固定长度的字符串。
如果存储的字符串长度小于指定的长度,数据库可能会用空格填充剩余部分。
CHAR[(M)], (M)可以不写。
• A fixed-length (M is the length, 0 ~ 255) string
• Always right-padded with spaces to the specified length when stored.
• E.g. if you store 'A' to CHAR(5), it will actually be 'A ' inside the memory.
But when you retrieve the value, the trailing spaces will be removed automatically (this behaviour can be turned on or off).
(2) VARCHAR(M)
VARCHAR(M), (M)必写。
用于存储可变长度的字符串。
• A variable-length string.
• The range of M is 0 to 65,535.
与CHAR类型相比,VARCHAR类型在存储长度可变的字符串时更加节省空间。
(3) TEXT
用于存储大量的文本数据,不支持索引或默认值。
3、 日期和时间类型 Date and Time
(1)DATE
用于存储日期值(年-月-日)。
• The supported range is '1000-01-01' to '9999-12-31'.
• Format: YYYY-MM-DD .
(2)DATETIME[(fsp)]
用于存储时间值(时:分:秒)。
• The supported range is '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999’
• Format: YYYY-MM-DD hh:mm:ss[.fraction]
YYYY
:表示四位数的年份,例如2023
。MM
:表示月份,为两位数的格式,范围从01
(一月)到12
(十二月)。DD
:表示月份中的日,为两位数的格式,范围从01
到31
,具体取决于月份和年份(因为不同年份的二月天数可能不同,且四月、六月、九月、十一月为30天)。hh
:表示小时,为两位数的24小时制格式,范围从00
到23
。mm
:表示分钟,为两位数的格式,范围从00
到59
。ss
:表示秒,为两位数的格式,范围从00
到59
。[.fraction]
:这是一个可选的部分,表示小数秒(fractional seconds)。如果包括在内,它可以是1到6位数字,分别表示时间值精确到十分之一秒、百分之一秒、千分之一秒(毫秒)、万分之一秒、十万分之一秒、百万分之一秒(微秒)。小数秒部分用小数点.
分隔。
E.g. 2023-04-01 14:30:45.123
,表示2023年4月1日14点30分45秒,精确到毫秒(123毫秒)。
如果不需要小数秒部分,则可以省略 [.fraction]
,如 2023-04-01 14:30:45
,表示同样的日期和时间,但只精确到秒。
(3) TIMESTAMP
具有时区支持,其值会根据数据库服务器的时区设置进行自动转换:
尽管TIMESTAMP值在数据库中是以UTC格式存储的,但在检索时可以根据会话的时区设置显示为不同的本地时间。
Similar to DATETIME but stores the time as UTC time.
When date time is looked up, the stored time will be converted to the time of the current timezone of the client.
UTC格式是一种全球统一的时间标准,采用24小时制并以hh:mm:ss的格式表示。
UTC时间通常与时区偏移量结合使用,以表示特定地区的时间。
时区偏移量表示该地区时间与UTC时间的差异。例如UTC+8表示该地区时间比UTC时间快8小时。
4、二进制数据类型
(1)二进制字符串类型
用于存储二进制数据。
如BINARY和VARBINARY。
与字符串类型类似,BINARY是固定长度的,而VARBINARY是可变长度的。
(2)BLOB类型
用于存储大量的二进制数据,如图片、音频或视频文件等。
BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,
它们之间的主要区别在于最大存储大小。
5、其他类型
(1)布尔类型
虽然SQL标准没有直接定义布尔类型,但许多数据库系统(如MySQL)提供了BOOLEAN或BOOL类型作为TINYINT(1)的别名,用于存储真(TRUE)或假(FALSE)的值。
(2)枚举类型(ENUM)
允许列的值被限制在一个预定义的列表中。
(3)集合类型(SET)
与ENUM类型类似,但SET类型的列可以存储零个或多个预定义的值。