tinyblob, blob, mediumblob, longblob
text 非二进制字符串(字符字符串)
tinytext, text, mediumtext, longtext
text 在定义时,不需要定义长度,也不会计算总长度。
text 类型在定义时,不可给default值
– c. binary, varbinary ----------
类似于char和varchar,用于保存二进制字符串,也就是保存字节字符串而非字符字符串。
char, varchar, text 对应 binary, varbinary, blob.
-
日期时间类型
一般用整型保存时间戳,因为PHP可以很方便的将时间戳进行格式化。
datetime 8字节 日期及时间 1000-01-01 00:00:00 到 9999-12-31 23:59:59
date 3字节 日期 1000-01-01 到 9999-12-31
timestamp 4字节 时间戳 19700101000000 到 2038-01-19 03:14:07
time 3字节 时间 -838:59:59 到 838:59:59
year 1字节 年份 1901 - 2155
datetime YYYY-MM-DD hh:mm:ss
timestamp YY-MM-DD hh:mm:ss
YYYYMMDDhhmmss
YYMMDDhhmmss
YYYYMMDDhhmmss
YYMMDDhhmmss
date YYYY-MM-DD
YY-MM-DD
YYYYMMDD
YYMMDD
YYYYMMDD
YYMMDD
time hh:mm:ss
hhmmss
hhmmss
year YYYY
YY
YYYY
YY -
枚举和集合
– 枚举(enum) ----------
enum(val1, val2, val3…)
在已知的值中进行单选。最大数量为65535.
枚举值在保存时,以2个字节的整型(smallint)保存。每个枚举值,按保存的位置顺序,从1开始逐一递增。
表现为字符串类型,存储却是整型。
NULL值的索引是NULL。
空字符串错误值的索引值是0。
– 集合(set) ----------
set(val1, val2, val3…)
create table tab ( gender set(‘男’, ‘女’, ‘无’) );
insert into tab values (‘男, 女’);
最多可以有64个不同的成员。以bigint存储,共8个字节。采取位运算的形式。
当创建表时,SET成员值的尾部空格将自动被删除。
七、列属性(列约束)
/* 列属性(列约束) */ ------------------
- PRIMARY 主键
- 能唯一标识记录的字段,可以作为主键。
- 一个表只能有一个主键。
- 主键具有唯一性。
- 声明字段时,用 primary key 标识。
也可以在字段列表之后声明
例:create table tab ( id int, stu varchar(10), primary key (id)); - 主键字段的值不能为null。
- 主键可以由多个字段共同组成。此时需要在字段列表后声明的方法。
例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));
- UNIQUE 唯一索引(唯一约束)
使得某字段的值也不能重复。 - NULL 约束
null不是数据类型,是列的一个属性。
表示当前列是否可以为null,表示什么都没有。
null, 允许为空。默认。
not null, 不允许为空。
insert into tab values (null, ‘val’);
– 此时表示将第一个字段的值设为null, 取决于该字段是否允许为null - DEFAULT 默认值属性
当前字段的默认值。
insert into tab values (default, ‘val’); – 此时表示强制使用默认值。
create table tab ( add_time timestamp default current_timestamp );
– 表示将当前时间的时间戳设为默认值。
current_date, current_time - AUTO_INCREMENT 自动增长约束
自动增长必须为索引(主键或unique)
只能存在一个字段为自动增长。 默
认为1开始自动增长。可以通过表属性
auto_increment = x进行设置,或 alter table tbl auto_increment = x; - COMMENT 注释
例:create table tab ( id int ) comment ‘注释内容’; - FOREIGN KEY 外键约束
用于限制主表与从表数据完整性。
alter table t1 add constraintt1_t2_fk
foreign key (t1_id) references t2(id);
– 将表t1的t1_id外键关联到表t2的id字段。
– 每个外键都有一个名字,可以通过 constraint 指定
存在外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。
作用:保持数据一致性,完整性,主要目的是控制存储在外键表(从表)中的数据。
MySQL中,可以对InnoDB引擎使用外键约束:
语法:
foreign key (外键字段) references 主表名 (关联字段) [主表记录删除时的动作] [主表记录 更新时的动作]
此时需要检测一个从表的外键需要约束为主表的已存在的值。外键在没有关联的情况下,可以设置为 null.前提是该外键列,没有not null。
可以不指定主表记录更改或更新时的动作,那么此时主表的操作被拒绝。
如果指定了 on update 或 on delete:在删除或更新时,有如下几个操作可以选择: - cascade,级联操作。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表记录被 删除,从表相关记录也被删除。
- set null,设置为null。主表数据被更新(主键值更新),从表的外键被设置为null。主表记录 被删除,从表相关记录外键被设置成null。但注意,要求该外键列,没有not null属性约束。
- restrict