MySQL数值操作

来源:互联网 发布:传智大数据100g百度云 编辑:程序博客网 时间:2024/06/18 07:41

MySQL数值操作

显示宽度

可以在类型名称后面的括号中指定显示宽度,显示宽度就是SELECT结果的显示宽度,与范围无关
显示宽度只用于显示,并不能限制取值范围和占用空间

    如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是 INT整型所允许的最大值。

INT(5) ZEROFILL表示数值宽度小于5位时在数字前面填满0;

默认情况是用空格填充,经过试验发现空格没有填充,所以如果不加ZEROFILL,其实意义不大。
如不指定则INT的默认宽度为INT(11);

UNSIGNED:可以用于取消符号位,如果一个列指定为ZEROFILL,则该列自动添加UNSIGNED属性。

AUTO_INCREMENT:这个属性只可以用于整数类型,一般从1开始,没添加一行自动增加1,如果插入一个数据的AUTO_INCREMENT值为NULL,实际插入值为列中当前最大值加1。

一个表中最多只能有一列具有AUTO_INCREMENT属性。AUTO_INCREMENT列应定义为NOT NULL,并定义为UNIQUE或者PRIMARY KEY

创建带有AUTO_INCREMENT的列的三种方式:

1 - CREATE TABLE (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY);2 - CREATE TABLE (id INT AUTO_INCREMENT NOT NULL,..other column..,PRIMARY KEY(ID));3 - CREATE TABLE (id INT AUTO_INCREMENT NOT NULL,..other column..,UNIQUE(ID));

浮点数操作

浮点数和定点数都可以用类型名加(M,D)来修饰。
其中M为数字位数(整数位+小数位),小数点后面有D位。即表示保留M位有效数字,其中小数有D位。

Float(5,5)     Double(5,5)     Decimal(5,5)

MYSQL保存值时采用了四舍五入,所以float(7,4)中插入999.00009 实际存储为 999.0001

另外,最好不要指定float和double的精度,而是采用由实际硬件和操作系统决定的默认精度。
decimal则通常要指定精度,因为其默认值是(10,0)。

floatdouble存储数据超过精度时会进行四舍五入。
decimal存储超过精度时会报错。(MySQL报异常但是能四舍五入后存入)


BIT类型

BIT类型用于存放位字段值。BIT(M)可以存放多个二进制数,M~(1,64),默认为1位;
对于BIT类型的字段,直接查询显示一个笑脸。

正确查询方式:

select bin(bitColumn),hex(bitColumn) from tablename;

bin()hex()分别为二进制操作与十六进制操作。
BIT类型插入时,先将值转化为二进制数,然后插入,如果超过位数会则插入失败。
比如 colunmA bit(1) 如果插入值为2 (10)超过限制的1位,则报错。


日期时间类型

日期时间类型 字节 最小值 最大值 DATE 4 1000-01-01 9999-12-31 DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59 TIMESTAMP 4 1970010108001 2038年的某个时刻 TIME 3 -838:59:59 838:59:59 YEAR 1 1901 2155


这些数据类型的区别如下:

  • 如果表示年月日,则用DATE
  • 如果表示时分秒,则用TIME
  • 如果表示年月日时分秒,则用DATETIME
  • 如果需要经常插入或者更新日期时间为当前系统时间,则用TIMESTAMP
    返回后将格式设置为”YY-MM-DD HH:MM:SS“。
  • 如果只表示年份,则使用YEAR

日期时间存储

如果存储时日期超出有效范围,将所有位以0填充并存储。

 Create table t(time1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,                   time2 TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00');

default 用于设置该列的默认值,在插入为NULL时会自动设为默认值。
CURRENT_TIMESTAMP 为当前的时间戳。
TIMESTAMP的另一个特性是插入时会转为本地时区,取出时也会转为本地时区。
TIMESTAMP存入时,如果从后往前读可以匹配为一个有效时期,则补全存储。否则存0值
now() 获取当前时间。
任何标点符号都可以作为日期部分或时间部分的分隔符。


参考资料:《深入浅出MySQL》

0 0