建表:声明列的过程
列:不同的列类型占的空间不一样
选列的原则:够用,又不浪费
列类型
数值型
①整型
Tinyint / Smallint / Mediumint / Int / Bigint
②小数型(浮点型,定点型)
Float(D,M),Decimal(D,M)
字符串型
Char(M) / Varchar(M) / Text 文本类型
日期/时间型
Date 日期 / Time 时间 / Datetime 时间时间类型 / Year 年类型
整型列的可选属性
Tinyint 默认是有符号的,存储-128--127
Tinyint / Tinyint unsigned / Tinyint(M) zerofill
M:宽度(在0填充(zerofill)时才有意义 )
unsigned:无符号类型(非负)影响存储范围
zerofill:0填充(默认无符号) 00001 00005(M=5)
>alter table 表名 add 新列名 tinyint unsigned; (增加列)
#列可以声明默认值,并且推荐声明默认值#
Not null Default 0(不允许为Null 没有数值的时候显示为0)
>alter table *** add 新列名 tinyint not null default 0; #一次只能增加一列#
小数型
float(M,D) decimal(M,D) (更精确)
M:精度(总位数,不包含点)
D:标度(小数位)
float(4,2) -99.99---99.99
float(4,2) unsigned 0.00---99.99
>create table goods(
>name varchar(10) not null default '',
>price float(6,2) not null default 0.00
>)charset utf8;
字符型
Char:定长 char(M) M:可容纳的字符 数 速度最快
Varchar:变长 varchar(M) M:可容纳的字符 数 约2万-6万
Text :文本串 不用加默认值 约2万-6万个字符,搜索速度较慢
区别:
char:M个字符,如果存的小于M个字符,实占M个字符 0<=M<=255
varchar:M个字符,存的小于M个字符,设为N(N<M),实占N个字符 0<=M<=65535
char:如果实际存储内容不足M个,则后面加空格补齐,取出来的时候再把后面的空格去掉(所以如果内容最后又空格,将会被清除)
选择原则:
1.空间利用率
四字成语表:char(4)
个人简介,微博 140字:varchar(140)
2.速度
用户名:char
日期时间型
①年:year 1901-2155【0000表示错误时选择】
如果输入2位,“00-69” 表示2000-2069,“70-99” 表示1970-1999年
>create table y(
>ya year(4)
>);
②年-月-日:date “1000-01-01”-“9999-12-31”
>create table d(
>title varchar(30),
>dt date
>)charset utf8;
>insert into d values ("开国大典","1949-10-01");
③09:00:00:time “-838:59:59”-“838:59:59”
>create table t(
>tm time
>);
>insert into t values ('13:50:40');
④年-月-日 hh:mm:ss:datetime “1000-01-01 00:00:00”-“9999-12-31 23:59:59”
>create table user(
>name varchar(20) not null default '',
>regtime datetime not null default '1000-01-01 00:00:00'
>)charset utf8;
在开发中很少使用日期时间类型来表示一个需要的精确到秒的列
时间戳:1970-01-01 00:00:00到当前的秒数
一般存注册时间,商品发布时间等,并不是用datetime存储,而是用时间戳
因为datetime虽然直观,但计算不便
而用int型 存储时间戳,方便计算,而对于显示来说,也方便格式化
create table teacher(
name varchar(20),
gender tinyint
);
>insert into teacher values ('张',1);
>create table t2(
>gender enum('男','女')
>)charset utf8;
>inserte into t2 values ('男') / ('女');