语法
CREATE TABLE Persons
(
PersonID tinyint(5) zerofill,
PersonID int unsigned,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
数值型
数值型分为整型,浮点型,定型
整型:
name | 占位(字节) | 最大值(无符号) |
---|---|---|
bigint | 8 | 太大了 |
int | 4 | 4294967295 |
mediumint | 3 | 16777215 |
smallint | 2 | 65535 |
tinyint | 1 | 255 |
注意:默认是有符号的,也就是最小值是负数
一些可选参数:
- unsigned 无符号(全是正数)
- zerofill 填充至多宽,适合用于学号、编码等固定数字的,可以用 0 填充至固定宽度。默认带 unsigned,前面的例如 int(5) 代表填充长度为5
浮点型:
name | 解释 |
---|---|
float(M,D) | M:精度,总位数 D:标度,小数点后位数 |
double(M,D) | 比 float 范围更大 |
定点型:
decimal
浮点型与定点型的区别:
浮点型有精度损失,定点型更精确
比如:
creat table t4 (
a float(9,2),
b decimal(9,2)
)
insert into t4(1234567.23, 1234567.23)
得到的结果是:
a:1234567.25
b:1234567.23
所以定点型更精确,因为定点型小数点前后是用不同的数字存储的,而 float 就比较复杂,专门有协会定的规则。
字符串
char,varchar,text,blob,enum
name | 意思 | 宽度 | 实际存字符(i<M) | 实际占空间 | 利用率 |
---|---|---|---|---|---|
char(M) | 定长 | M | i | M | i/M <=100% |
varchar(M) | 变长 | M | i | i字符 + (1-2)字节 | i/(i+1-2) <100% |
注释:
char(M) 不足 M个字符给字符右侧加空格,取出时删掉空格,这就意味着,如果存的数据右侧本身有空格,则取出会丢失,varchar 则不会
varchar(M) 第一个字符会有专门的字符长度说明
举例:
char(10),最多存 10 个字符,如果存一个字符,还是占了 10 个字符的空间,但是尽量用 char,寻址快,varchar 比较麻烦
text 一般存大段文本,还有更大的 mediumtext
blob 二进制,其实也是大段文本,但是不会因为字符集过滤掉而丢失信息,比如:一张图片有 0xFF 个字节,在 ASCII 字符集认为非法,会被过滤掉
enum 枚举
create table t3 (
gender enum ('男', '女')
);
set 集合,和枚举差不多,可以选其中的多个
时间型
year 年:95/1995
date 日期:1998-12-27
time 时间:13:56:23
datetime日期时间:1998-12-27 13:56:23
timestamp 时间戳:1970-1-1 0:0:0 到当前时间的秒数,一般存注册时间、发布时间都用这个,容易计算。