Mysql - 二
Mysql - 二
参考自 Mysql经典教程
SQL语言
MySQL使用的SQL语言基本上符合SQL92的标准,但是既有扩展,又有未实现地方。
1)表、列和数据类型
- 表是数据在一个MySQL数据库中的存储机制,它包含一组固定的列
- 表中的列描述该表所追踪的实体的属性,每个列都有一个名字及各自的特性
- 列包含:数据类型、长度
- 关系数据模型中,记录就是行是没有顺序的
2)函数
- 函数是存储在数据库中的代码块
- 差别在于函数可以把值返回调用程序
3)SQL的语句
- SQL是一种典型的非过程化程序设计语言
- 特点:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,及如何执行这些操作,未被指定
- 非过程化优点:简单易学
- 过程化语言:平常熟悉的各种高级程序设计语言,使用灵活,数据操纵能力非常强大
MySQL数据处理
- 数字类型
- 日期和时间类型
- 字符串(字符)类型
1)MySQL的数据
1.字符串值
- 双引号或者单引号
- 可以使用转义序列用来表示特殊字符
- 转义序列以 \ 开始
- 注意 NUL 字节与 NULL值不同;NUL 为一个零值字节,而 NULL 代表没有值
序列 | 涵义 |
---|---|
\0 | ASCII 0(NUL)字符 |
\n | 新行符 |
\r | 回车符(Windows中使用 \r\n 作为新行标志) |
\t | 定位符 |
\b | 退格符 |
' | 单引号 |
" | 双引号 |
\ | 反斜杠\ |
% | 百分号% |
_ | 下划线_ |
2.数字值
- 支持说明为整数或浮点数
- 支持科学计数法表示,整数或浮点数后跟“e”或"E"、符号(+或-)和一个整数指数
- 数值前加 - 表示负数
- 如,1221 0 -32 29.3 -32.4e+10 148.
3.十六进制值
- 支持十六进制值
- 由 0x 开始跟十六进制数值,数值不区分大小写
- 前缀只能是0x , 不能是 0X
- 在数字上下文他表示一个64位精度整数
- 在字符串上下文他表示类似于一个二进制字符串,对每一对十六进制数字变换为一个字符
4.日期和时间值
- 类似于 1999-06-17 或 12:30:43
- 支持日期/时间组合,如 1999-06-17 12:30:43
- 按年-月-日顺序表示日期
5.NULL值
- 适用于各种列类型
- 表示 “没有值”、“无数据”
- 不同于数字类型的0 或字符串类型的空字符串
2)列类型概述
- 每个表都是由一个或多个列构成
- CREATE TABLE 创建表
- 每列指定类型,与数据类型对应,但是更具体
- 描述列包含的值的种类以及范围,不能包含对应的数据类型所允许的所有值
- 例如,CHAR(16)规定了存储的字符串值必须是16位宽度
列类型的特性:
- 可存放类型的值
- 值所占空间多少,及该值是否定长或可变长
- 该类型的值怎样比较和存储
- 该类型是否允许 NULL 值
- 该类型是否可以索引
创建表
CREATE TABLE teacher
(
id TINYINT UNSIGNED NOT NULL,
name CHAR(16) NOT NULL,
tele NUMERIC(8),
sex ENUM("F", "M") DEFAULT "M"
)
col_name col_type [col_attributes][general_attributes]
- col_name 列名字
- col_type 列类型
- col_attributes 专用属性,只应用于制定列,置于列类型后和列通用属性前
- general_attributes 通用属性,可用于少数列的任意列,如 NULL、NOT NULL、和 DEFAULT
数字类型
类型名 | 涵义 |
---|---|
TINYINT | 很小的整数 |
SMALLINT | 小整数 |
MEDIUMINT | 中等整数 |
INT、INTEGER | 正常整数 |
BIGINT | 大整数 |
FLOAT | 小(单精度)浮点数 |
DOUBLE | 正常(双精度)浮点数 |
DOUBLE PRECISION | |
REAL | |
DECIMAL | 未压缩(unpack)的浮点数字,未压缩指被作为字符串存储 |
NUMERIC |
字符串类型
- 串类型不仅可存储字符串,实际任何二进制数据都可存储,如图像、音频、视频
类型名 | 涵义 |
---|---|
CHAR | 定长字符串 |
VARCHAR | 变长字符串 |
TINYBLOB | 最大长度为255(2^8 -1) 个字符的BLOB |
TINYTEXT | 最大长度为255(2^8 -1) 个字符的TEXT |
BLOB | 最大长度为65535(2^16 -1) 个字符的BLOB |
TEXT | 最大长度为65535(2^16 -1) 个字符的TEXT |
MEDIUMBLOB | 最大长度为65535(2^24 -1) 个字符的BLOB |
MEDIUMTEXT | 最大长度为65535(2^24 -1) 个字符的TEXT |
LONGBLOB | 最大长度为65535(2^32 -1) 个字符的BLOB |
LONGTEXT | 最大长度为65535(2^32 -1) 个字符的TEXT |
ENUM('value1','value2',...) | 枚举:列只能赋值为某个枚举成员或NULL |
SET('value1','value2',...) | 集合:列可以赋值为多个集合成员或NULL |
日期和时间类型
- 允许存储某个 不严格地合法 的日期值,如1999-11-31
类型名 | 涵义 |
---|---|
DATE | 日期,以YYYY-MM-DD格式显示 |
TIME | 时间,以HH:MM:SS显示 |
DATETIME | 日期时间组合,以YYYY-MM-DD HH:MM:SS 格式显示 |
TIMESTAMP | 时间戳,以YYYMMDDHHMMSS格式显示 |
3)数字列类型
1.整型
可用UNSIGNED禁用负数值
- TINYINT - 1字节
- SMALLINT - 2字节
- MEDIUMINT - 3字节
- INT - 4字节
- BIGINT - 8字节
2.浮点型
- FLOAT - 4字节
- DOUBLE - 8字节
- DECIMAL - M字节,DECIMAL(M[,D]) 比较复杂待研究??????
4)日期和时间类型
- DATA - 3字节(1000-01-01 ~ 9999-12-31)
- TIME - 3字节
- DATATIME - 8字节
- TIMESTAMP[(M)] - 4字节(19700101000000 ~ 2037年某时刻)
- YEAR[(M)] - 1字节(1901到2155)
1.Y2K问题和日期类型
- 本身Y2K安全
- 2位年份因为世纪未知导致二义性
- 范围00-69的年制变换为 2000-2069
- 范围70-99的年值变换为 1970-1999
2.TIMESTAMP类型
- 自动用当前的日期和时间标记INSERT 或 UPDATE操作
- 列没有明确在一个INSERT 或 LOAD DATAINFILE语句中指定,自动更新
- 列没有明确在一个UPDATE语句中指定且一些另外的列改变值,自动更新
- 明确的设定 TIMESTAMP 列为NULL
3.TIME类型
- 任何分隔符都可作为时间分隔符
- 无分隔符也可被解析,HHMMSS格式数字
4.YEAR类型
- YYYY格式表示year值,1901 ~ 2155
5)字符串类型
- CHAR(M) - 定长字符串,空格填满右边到指定的长度, M字节长度
- 取值大的串类型可以存储近4GM的数据
- 受客户端/服务器通讯一些的最大块尺寸限制,列值的最大限额为24MB
- 比较时忽略大小写
- 同一个表中不能混用 CHAR 和 VARCHAR 这两种类型,否则会将CHAR转为VARCHAR
- BLOB和TEXT列不能有DEFAULT值
- BOLB和TEXT类型可以存储非常多的数据