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类型可以存储非常多的数据
posted @ 2016-07-20 00:05  -浮云骑士-  阅读(176)  评论(0编辑  收藏  举报