a>.字符型
1>.固定长度的字符类型,换句话说就是定义了一个字符长度,如果你存储的字节长度不足时,系统会自动给你用“0”进行占位操作,当字符类型的长度超过我们预定义的长度时,就会报错。用char(#number[最多存储255个字符])关键字来定义。(也就是说,char(10),就表示你每个字符串存储的长度应该是10,比如你的单个字符串长度是7,那么还有3个空位系统自动会用“0”进行占位。也就没有字符存储的大小是一致的。)
2>.自动变化长度的字符类型,即varchar(#bumber[最多存储65535个字符,即2个字节])。和上面的char(#number)用法相似,只不过唯一不同的是存储的字符的长度是可变化的。也就是说,varchar(10),就表示你每个字符串的长度应该是10,如果你的单个字符串长度是6,那么它就会以6个长度来存取的你的数据,而不会去可以给你填满其他的占位符,它是以你实际长度为准的。注意,char(#number)和varchar(#num)存储数据的时候都不区分大小写。如果你强烈要求要区分大小写的话也是可以的,和char(#number)类似的一种方法叫做binary(#number),他们唯一不同就是char(#number)不区分大小写,而binary(#number)是区分大小写的。同理,和varchar(#number)对应的就是varbinary(#number)。
3>.其实char(#number),var(#number),binary(#number),varbinary(#number)它们的存储数据的大小是有上限的。如果你写博客,里面的正文数据长度一定是很大的。这个时候这四种定义类型就不再合适了,这个时候就有了面向对象存储的概念,就是不讲数据放在一个表中了,而是将数据放在一个指定的文件,而在表中存储的只是一个指针。当用户用到该数据时,就会去调用这个指针所对应的文件。而这种存储方式也是区分大小写的,相比之前学习的四种定义类型,test和blob数据类型存储的容量更大,test的类型拥有char(#number),binary(#number)的特点,而blob数据类型拥有varchar(#number),varbinary(#number)。而test和blob又被细分了4类,例如blob分为TinyBlob(最多存储255个字符,即一个字节),Blob(最多存储64kb,需要减去2个字节的空间),MediumBlob(最多存储16MB的空间,需要减去3个字节),LongBlob(最多存储4G的空间,需要减去4个字节)。test分为TinyText(最多存储255个字符,即一个字节与char索引方式是不同的,TinyText不能使用全字段索引而char确实可以的),Text(最多存储65535个字符,需要减去2个字节),MediumText(最多存储16777215个字符,需要减去3个字节),LongText(最多存储4294967295个字符,表示可以存储4个G)等等。
4>.字符型(char、varchar和text)常用的属性修饰符:
A>.NOT NULL(非空约束)
B>.NULL(允许为空)
C>.default ‘string’(默认值,不适用于text类型)
D>.CHARACTER SET 字符集
mysql>show variables like '%char%'; #查看默认的字符集
mysql>show character set; #查看数据库支持的字符集
E>.collation '规则':排序规则
msyql>show collation; #查看数据库支持的排序规则
5>.binary,varbinaray和blob字符常用的属性修饰符
A>.NOT NULL
B>.NULL
C>.default 不适用与blob
b>.数值型
1>.精确数值型
精确数值型有两类,即整形(integer)和十进制(decimal)。在金融领域中,一般都用十进制存储数值型。而integer类型来讲,它有好几种变化形式分别用来表示所能够存储的范围大小的,比如:
A>.只占用一个字节的tinyint(微整型,取值范围是-128127或者0255);
B>.占用两个字节的samllint(小整型,取值范围是-3276832767或者065535);
C>.占用三个字节的mediuint(中等整型,取值范围-83886088388607或者016777215);
D>.占用四个字节的int(整型,取值范围-21474836482147483647或者04294967295);
E>.占用八个字节的bingint(大整形,取值范围是-92233720368547758089223372036854775807或者018446744073709551615)等等。
整形的常用属性修饰符:
A>.AUTO_INCREMENT:自动增长(前提:非空,且唯一,支持索引,非负值[UNSIGNED],注意:TRUNCATE 用来清空表中数据)
B>.LEST_INSERT_ID():可以查看上次增长的数值,当插入多行时,只记录第一行
C>.UNSIGNED:无符号
D>.NULL
E>.NOT NULL
F>.DEFAULT
2>.近似数值型
近似数值型又分为单精度浮点型(float)和双精度浮点型(double)。
浮点型常用修饰符:(使用g,f来定义总共有多少数字和小数点后有多少数字)
A>.NULL
B>.NOT NULL
C>.UNSIGNSD
D>.DEFAULT
3>.位
按位(bit)实现数据存储的。这种方式不建议使用。
c>.日期时间型
1>我们在数据库中可能需要存储日期或时间,日期时间型其实本质上被我们存储为数值或字符。
A>.其中我们可以用占用三个字节的date(日期型)来存储时间;
B>.用占用三个字节的time(时间型)来存储时间;
C>.用占用八个字节的datetime(日期时间型)来存储日期和时间;
D>.当然,你也可以存储在四个字节的timestamp(时间戳,存储自1970年1月1号0点0分0秒至你所指定的时间为止所经过的秒数。);
E>.对了还有一个字节来记录年的year类型。即Year(2)和year(4),前者表示方法是:“0099”,默认值是:“00”;后者表示方法是:“19012155”,默认为“0000”。
2>.日期时间型常用的修饰符
A>.NULL
B>.NOT NULL
C>.DEFAULT
d>.布尔型
MySQL其实没有真正意义上的布尔型,而是使用的tinyint(微整型),而且只显示一位来表示的,要么是0,要么是1.
e>NULL
表示什么也没有存,注意空白字符不等于空哟,数字0也不代表空。
f>.内置类型(事实上ENUM和SET也是属于字符型哟)
1>.MySQL也有两种常见的内置类型,即ENUM(枚举)和SET(集合)。
2>.枚举类型是指将所有的情况的列举出来,我们从中挑选处一种即可。比如今天是星期几,我们通过枚举方法列出所有的可能性,将星期一至星期日的其中情况都枚举出来,这样用户输入的星期八则是不合法的。集合类型是指在一个范围内有很多元素,你可以把这些元素任意拼凑,怎么拼都行,但是每个元素必须是在给定范围内的,不能超出限定范围。就好比你是某学校的大一新生的班主任,现在你要对你的学生进行分组处理。其中每个组的每一个成员必须都是你的班级的学生,而不能讲其他班级的学生拉倒你的班级进行分组。
3>.ENUM和SET的修饰符
A>.NULL
B>.NOT NULL
C>.DEFAULT ‘’