主要内容:
日期类型
date : YYYY-MM-DD
time : HH:MM:SS
datetime : YYYY-MM-DD HH:MM:SS
year : YYYY
mysql> create table t9(d date,t time,dt datetime); #查看表的结构 mysql> desc t9; # 调用mysql自带的now()函数,获取当前类型指定的时间 如下结构 mysql> insert into t9 values(now(),now(),now());
例题:
mysql> create table student(id int, birth_y year, birth date , class_time time, now_time datatime); mysql> insert into student values -> (1, '1995','1995-08-28','11:11:11',now()); mysql> select * from student; +------+---------+------------+------------+---------------------+ | id | birth_y | birt | class_time | now_time | +------+---------+------------+------------+---------------------+ | 1 | 1995 | 1995-08-28 | 11:11:11 | 2018-09-18 20:25:17 | +------+---------+------------+------------+---------------------+
char 类型和varchar类型
char类型: 定长,简单粗暴, 浪费空间, 存取速度快
字符长度范围:0-255(一个中文是一个字符, 是utf8编码的三个字节)
存储: 在检索或者查询时,查出的结果会自动的删除尾部的元素,除非修改sql模式:让其现出原形;
varchar : 变长,精准, 节省空间,存取速度慢;
存储 : 真实的存储数据, 不会用空格填充,如果'ab ',尾部的空格也会被存起来
两个函数:
length(); 查看字节数
char_length(); 查看字符数
1.char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形。
# 创建t1表,分别指明字段x为char类型,字段y为varchar类型 mysql> create table t1(x char(5),y varchar(4)); # char存放的是5个字符,而varchar存4个字符 mysql> insert into t1 values('你瞅啥 ','你瞅啥 '); # 在检索时char很不要脸地将自己浪费的2个字符给删掉了,装的好像自己没浪费过空间一样,而varchar很老实,存了多少,就显示多少 mysql> select x,char_length(x),y,char_length(y) from t1; +-----------+----------------+------------+----------------+ | x | char_length(x) | y | char_length(y) | +-----------+----------------+------------+----------------+ | 你瞅啥 | 3 | 你瞅啥 | 4 | +-----------+----------------+------------+-------------- #略施小计,让char现原形 mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; #查看当前mysql的mode模式 mysql> select @@sql_mode; #原形毕露了吧。。。。 mysql> select x,char_length(x) y,char_length(y) from t1; +-------------+------+----------------+ | x | y | char_length(y) | +-------------+------+----------------+ | 你瞅啥 | 5 | 4 | +-------------+------+----------------+ # 查看字节数 #char类型:3个中文字符+2个空格=11Bytes #varchar类型:3个中文字符+1个空格=10Bytes mysql> select x,length(x),y,length(y) from t1; +-------------+-----------+------------+-----------+ | x | length(x) | y | length(y) | +-------------+-----------+------------+-----------+ | 你瞅啥 | 11 | 你瞅啥 | 10 | +-------------+-----------+------------+-----------+
枚举类型和集合类型
枚举: enum单选只能在指定的范围内选一个值, 如男或者女
集合: set 多选在给定的范围内选择一个或者多个值
create table consumer( id int unsigned, name char(20), sex enum('male','female') not null default 'male', fav set('抽烟','喝酒','烫头') ); insert into consumer(id,name,sex,fav) values (1,'alex','female','抽烟,烫头'); insert into consumer(id,name,sex) values (2,'alex2','female');wanzheng
完整性约束
not null default(表示该字段不能为空,默认值)
unique(表示该字段的值是唯一)
primary key(标识该字段为该表的主键, 可以唯一的表示记录)
auto-increment (标识该字段的值是自增整数类型)
foreign key(标识该字段为该表的外键)
null : 表示空, 非字符串