Mysql学习日记

原创 2015年11月19日 22:33:14

今天在CSDN看到了一个笑话,是这么写的:程序猿的读书历程:x语言入门—>x语言应用实践—>x语言高阶编程—>x语言的科学与艺术—>编程之美—>编程之道—>编程之禅—>颈椎病康复指南。然后我默默看了看书架,任重而道远啊,感觉自己还要努力,争取早日读到劲椎病康复指南……

今天花时间复习了mysql的列数据类型,怎么说呢,感觉以前学习真是囫囵吞枣,很多细节都忽略了。重新复习一遍,收获挺多的。

先说说今天补上的第一个问题:关于整形数据后面小括号的问题,比如int(M),那么这个M是什么意思?我以前学习mysql,是一边坐着小项目,一边学习的,也没注意这个问题,今天突然有人问道这个问题。当时就想,不就是代表数据的宽度吗?结果在看燕十八老师的PHP视频的时候,才知道我的理解有误。

这里的M要配上一个zerofill属性才能够起作用,我用mysql进行了测试

-- 没有zerofill 的整型数据
create table human (
human_id int auto_increment primary key,
human_name varchar(20) not null default '',
human_num smallint(4) not null default 0
)engine = myisam charset = utf8;

-- human_num插入数据宽度一致  插入正常
insert into human (human_name,human_num) values ('张浩',1000);
Query OK, 1 row affected (0.00 sec)
-- 插入宽度不一致<M  插入正常
insert into human (human_name,human_num) values ('刘伟',10);
Query OK, 1 row affected (0.00 sec)
-- 插入宽度不一致>M  插入正常
insert into human (human_name,human_num) values ('王浩',10000);
Query OK, 1 row affected (0.00 sec)

那么在这里可以做一个小小的总结:这个宽度对普通数据无其它特殊作用,和不加宽度限制是一样的,那么它不是作为 字符宽度限制?
既然不是作为字符限制,有是不是作为字节限制呢?显然M也不是作为字节限制,如下

-- 测试2 将smallint(4) 替换成 smallint(1)
create table human (
human_id int auto_increment primary key,
human_name varchar(20) not null default '',
human_num smallint(1) not null default 0
)engine = myisam charset = utf8;

-- 插入
insert into human (human_name,human_num) values ('张浩',1000);
-- 插入正常 Query OK, 1 row affected (0.00 sec)

由此看出M也不是作为字节限制,因为如果是一个字节的话,一个字节8位,最大取值为255,1000超过了限制,如果作为字节限制的话,显然是插不进去的。

那么 它既不是字符宽度,也不是字节限制,它是干嘛的?

-- 测试3 含有zerofill 属性 的整型数据 
-- 还是human 表
create table human (
human_id int auto_increment primary key,
human_name varchar(20) not null default '',
human_num smallint(4) zerofill not null default 0
)engine = myisam charset = utf8;

-- 插入数据
insert into human (human_name,human_num) values ('张浩',1000);
-- Query OK, 1 row affected (0.00 sec)
-- 插入正常 没什么变化 
insert into human (human_name,human_num) values ('王浩',10000);
-- Query OK, 1 row affected (0.00 sec)

+----------+------------+-----------+
| human_id | human_name | human_num |
+----------+------------+-----------+
|        1 | 张浩       |      1000 |
|        2 | 王浩       |     10000 |
+----------+------------+-----------+

这时插入小于4字符宽度的数据时,再次查询

insert into human (human_name,human_num) values ('刘伟',10);
-- 再次查询数据库
+----------+------------+-----------+
| human_id | human_name | human_num |
+----------+------------+-----------+
|        1 | 张浩       |      1000 |
|        2 | 王浩       |     10000 |
|        3 | 刘伟       |      0010 |
+----------+------------+-----------+

可以看出human_id=3的行的human_num少于4的部分被 0 填充了,这就是M的作用,只有有了zerofill才能发挥神奇的作用。显然这个用法可以用于一些号码的自动生成 比如 某序列号 必须保证6位 ,设定了M=6,那么少于的6位的就能够自动完成了。

PS:百度 【mysql 数据类型后加一个数字的作用】时找了很长时间才找到正确的解释,换个方法百度 【mysql zerofill的作用】第一个就是,也是醉了。
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MySql学习 日记

MySql学习 日记 - 第一篇 基础篇ucloud learning背景知识 1970 年 IBM E.F.Codd 博士发表论文“大型共享数据银行的数据关系模型” 使用表集合来表示数据,相...

MySql数据库运维 学习日记(一)

MySql 业务评估 (1)响应时间有关。responsetime。 (2)数据总量。一到两年的数据总量,根据数据总量,规划数据库的构建。 (3)每秒请求量。网站申请浏览。 (4)读写比。 ...

Java学习日记3-MySql中的模糊查询

SQL 模糊查询 在进行数据库查询时,有完整查询和模糊查询之分。   一般模糊查询语句如下:   SELECT 字段 FROM 表 WHERE 某字段Like 条件     其中关于条件,SQL提...

mysql学习日记之锁

在当前事务中包含select.......lock in share mode时,就是所谓的共享锁,就是确保某行记录存在,在该事务获得共享锁的同时,其他事务也可以获得共享锁。如果在这个时候某个事务开始...

MySQL 学习日记 2011-8-29

前言 NoSQL都出来很久了。。。我最近刚开始重温重学MySQL的确被某同学鄙视了一下= =  ============================= 今天又在折腾那user...

跟我一起学习MySQL技术内幕(第五版):(第二章学习日记13)

2.14使用 fulltext搜索

跟我一起学习MySQL技术内幕(第五版):(第二章学习日记1)

第二章 使用SQL管理数据 2.1服务器的SQL模式 2.2MySQL的标识(zhi)符语法和命名规则 2.3SQL语句的大小写规则...

跟我一起学习MySQL技术内幕(第五版):(第三章学习日记8)

(补2)(single dog single day 人丑就要多读书) 3.2.5.5字符串数据类型属性 3.2.5.6选择字符串数据类型...

跟我一起学习MySQL技术内幕(第五版):(第三章学习日记6)

3.2.5字符串数据类型3.2.5.1char和varchar数据类型 3.2.5.2binary和varbinary数据类型 3.2.5.3blob和text数据类型 3.2.5.4enum和...

跟我一起学习MySQL技术内幕(第五版):(第三章学习日记17)

3.5.2.1时态值的解释规则 3.5.2.2测试或强制类型转换
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql学习日记
举报原因:
原因补充:

(最多只允许输入30个字)