数据库的概念大致可以分为三层,数据库服务器、库、表。数据库服务器相当于仓库管理员,帮助我们对数据进行管理。库就相当于仓库,用来存放数据。所有的数据最后都是以表(文件)的形式存储的,我们与表的交互也是最多的。我们知道,建立一张表最重要的就是定义表头,也就是声明列的过程。为了使每列的数据既能够存储的下,又不至于浪费很多空间,所以要学习列的类型。


列的类型大致分为三类:


数值型:


    整型:


       tinyint/smallint/mediumint/int/bigint


    小数型:


        float(M,D)/decimal(M,D)




字符串型:


      char(M)/varchar(M)/text




日期和时间型:


        日期:       date


        时间:       time  


       日期和时间型:  datetime


        年:        year




一、数值型


1、整型


整型系列的存储范围如下:



mysql表列与列运算 mysql列的数据类型_mysql之列类型




2、整型的可选属性


   例:tinyint(M) unsigned zerofill;


      M:表示宽度(在0填充的时候才有意义)


      unsigned:表示无符号类型


      zerofill:表示0填充(默认是无符号)




  假如我们要给100名学生进行编号,则应该选用tinyint型,为了使所有学生的号码都是同样的宽度,则用001表示第一名,依次类推。则001就是用0进行填充的。



mysql表列与列运算 mysql列的数据类型_mysql之列类型_02




可以看到这与我们的结论不一样,这是因为M只在0填充的时候才有意义,注意观察id的类型:



mysql表列与列运算 mysql列的数据类型_数据_03




下来我们增加一列id2



mysql表列与列运算 mysql列的数据类型_整型_04




可以看到id2的类型,接下来在增加一条信息。



mysql表列与列运算 mysql列的数据类型_mysql表列与列运算_05




3、小数型


  小数型分为浮点型float(M,D)和定点型decimal(M,D)。在这里M表示总的位数,不包括小数点,D表示小数位。


例:对于float(4,2)表示的范围就是-99.99~+99.99,无符号的话就是0~+99.99。


   


其中decimal更精确。


例如:float(9,2),decimal(9,2),分别输入1234567.23观察其值。


mysql表列与列运算 mysql列的数据类型_数据_06



可以看到float进行了四舍五入,而decimal则保留了原有的数据。




二、字符串型


mysql表列与列运算 mysql列的数据类型_数据_07



注意:M表示字符的个数,不是字节个数。




char和varchar的区别:


1、char定长:申请M个空间,存入小于M个字符,实际占M个字符。


2、varchar变长:申请M个空间,存入N个字符,N<=M,实际占N个字符。


3、一般情况下varchar的空间利用率更高。


5、char(M)存字符的时候,若实际存入的字符个数小于M,则以剩余的空间以空格填充。而当取出这部分内容时,最后一个字符后面的空格全部都被省略。varchar在存入的时候和取出的时候保持数据的一致性。


6、使用定长速度更快。



三、日期和时间类型



mysql表列与列运算 mysql列的数据类型_mysql之列类型_08


1、year是用一个字节表示的,从1901到2155年,还有一个字节表示0000年,用来表示非法的数值。


2、一般都不用datetime类型,而用时间戳。时间戳就是1970-01-01 00:00:00到当前的秒数。




四、枚举类型


命令: 列名 enum('情况');




五、SET类型


      SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。

例如,指定为SET('one', 'two') NOT NULL的列可以有下面的任何值:

''
'one'
'two'
'one,two'




SET最多可以有64个不同的成员。






附加:


1、新增一列


假如我们新建了一张stu表,表中只有name和id两列。


mysql表列与列运算 mysql列的数据类型_字符串_09





现在我们要新增age这一列,可以采用命令:alter table stu add 列名 类型。



mysql表列与列运算 mysql列的数据类型_字符串_10




2、我们发现NULL很讨厌,在mysql里面NULL与任何值比较的结果都为NULL,所以NULL的判断都用is null,is not null。所以我们在声明列的时候一般都指定期默认值的。


命令:列名 类型 not null default 0;


例:接着上面的题,我们再新增一列id2.


mysql表列与列运算 mysql列的数据类型_mysql之列类型_11