SQL语言特点
- 一体化
- 高度自动化
- 简洁
- 能以多种方式使用
SQL语言动词
SQL功能 | 动词 |
---|---|
数据查询 | select |
数据定义 | create, drop, alter |
数据操作 | insert,update, delete |
数据控制 | grant, revoke |
SQL的三级模式
SQL的数据类型
整数类型
类型 | 占用的存储空间(单位:字节) | 无符号数取值范围 | 有符号数取值范围 | 含义 |
---|---|---|---|---|
TINYINT | 1 | 0 ~ 2⁸-1 | -2⁷ ~ 2⁷-1 | 非常小的整数 |
SMALLINT | 2 | 0 ~ 2¹⁶-1 | -2¹⁵ ~ 2¹⁵-1 | 小的整数 |
MEDIUMINT | 3 | 0 ~ 2²⁴-1 | -2²³ ~ 2²³-1 | 中等大小的整数 |
INT (别名:INTEGER ) | 4 | 0 ~ 2³²-1 | -2³¹ ~ 2³¹-1 | 标准的整数 |
BIGINT | 8 | 0 ~ 2⁶⁴-1 | -2⁶³ ~ 2⁶³-1 | 大整数 |
浮点数类型
类型 | 占用的存储空间(单位:字节) | 绝对值最小非0值 | 绝对值最大非0值 | 含义 |
---|---|---|---|---|
FLOAT | 4 | ±1.175494351E-38 | ±3.402823466E+38 | 单精度浮点数 |
DOUBLE | 8 | ±2.2250738585072014E-308 | ±1.7976931348623157E+308 | 双精度浮点数 |
以单精度浮点数类型FLOAT
类型为例,它占用的4个字节的各个组成部分如下图所示:
设置最大位数和小数位数
在定义浮点数类型时,还可以在FLOAT
或者DOUBLE
后边跟上两个参数,就像这样:
FLOAT(M, D)
DOUBLE(M, D)
对于我们用户而言,使用的都是十进制小数。如果我们事先知道表中的某个列要存储的小数在一定范围内,我们可以使用FLOAT(M, D)
或者DOUBLE(M, D)
来限制可以存储到本列中的小数范围。其中:
-
M
表示该小数最多需要的十进制有效数字个数。注意是
有效数字
个数,比方说对于小数-2.3
来说有效数字个数就是2,对于小数0.9
来说有效数字个数就是1
。 -
D
表示该小数的小数点后的十进制数字个数。这个好理解,小数点后有几个十进制数字,
D
的值就是什么。
小数 定点数
正因为用浮点数表示小数可能会有不精确的情况,在一些情况下我们必须保证小数是精确的,所以设计定点数
的数据类型,它也是存储小数的一种方式:
-
numeric(p,q) 或 decimal(p,q)
字符串型
在MySQL中,字符串类型有多种,以下是常见的字符串类型以及它们的表格表示:
字符串类型 | 描述 |
---|---|
CHAR(n) | 固定长度字符串,最多存储n个字符(n<=8000) |
VARCHAR(n) | 可变长度字符串,最多存储n个字符(n<=8000) |
TEXT | 长文本字符串,最多存储65,535个字符 |
TINYTEXT | 短文本字符串,最多存储255个字符 |
MEDIUMTEXT | 中等长度文本字符串,最多存储16MB |
LONGTEXT | 长文本字符串,最多存储4GB |
ENUM(value1,value2,...) | 枚举类型,只能存储给定的值 |
SET(value1,value2,...) | 集合类型,可以存储多个给定的值 |
需要注意的是,除了ENUM和SET类型外,其他字符串类型都需要指定长度。此外,不同的字符串类型在存储和检索上也会有不同的性能表现,需要根据实际情况进行选择。
sql server中的字符串类型
字符串类型 | 描述 |
---|---|
NCHAR(n) | 固定长度字符串,最多存储n个字符(n<=4000) |
NVARCHAR(n) | 可变长度字符串,最多存储n个字符(n<=4000) |
NTEXT | 长文本字符串,最多存储65,535个字符,每个字符占二个字节 |
二进制字符串类型:
字符串类型 | 描述 |
---|---|
Binary(n) | 固定长度字符串,最多存储n个字节(n<=8000) |
Varbinary(n) | 可变长度字符串,最多存储n个字节(n<=8000) |
Image | 大容量、可变长二进制字符数据,可用于存储文件 |
时间和日期类型
类型 | 存储空间要求 | 取值范围 | 含义 |
---|---|---|---|
YEAR | 1字节 | 1901~2155 | 年份值 |
DATE | 3字节 | '1000-01-01' ~ '9999-12-31' | 日期值 |
TIME | 3字节 | '-838:59:59' ~ '838:59:59' | 时间值 |
DATETIME | 8字节 | '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' | 日期加时间值 |
TIMESTAMP | 4字节 | '1970-01-01 00:00:01' ~ '2038-01-19 03:14:07' | 时间戳 |
SQL数据定义
SQL 的数据定义功能主要包括对 SQL 模式、基本表、视图、索引的定义和删除以及对基本表的修改和对域的定义等,如表 6.3 所示。