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里的日志主要分为4类,使用这些日志文件,可以查看MYSQL内部发生的事情。 分别是 1、错误日志:记录mysql服务的启动、运行、停止mysql服务时出现的问题 2、查询日志:记录建立的客户...
  • lqclh502
  • lqclh502
  • 2015年12月28日 23:22
  • 919

MySQL学习笔记---基础概念和一些基础SQL语句(一)

MySQL学习笔记,以防遗忘 数据库基本概念 数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。 表:某种特定类型数据的结构化清单,数据库中的表都有一个唯一的名字用来标识自己。 模式:关于数...
  • Jung_zhang
  • Jung_zhang
  • 2016年04月14日 20:11
  • 1870

学习日记-html5

已掌握:学习并使用过HTML, CSS, 但并不熟练,特别是css常用效果了解但对于不常用的能实现的效果不清晰,html的各种标签除常用部分,其他在使用时需要去查询. 今日学习:html5 发展,与...
  • trch1989
  • trch1989
  • 2017年02月06日 16:50
  • 178

linux学习日记!!

一,用户的理解 在系统中用户储存为若干字符串+若干个系统配置文件 联系到的配置文件: /etc/passwd        用户信息 /etc/shadow        用户认证信息 /e...
  • SjmMx1314aini
  • SjmMx1314aini
  • 2017年02月13日 00:04
  • 142

2016年寒假学习日记

svn配置管理 mock server 创建测试服务 junit测试 eclipse 插件开发 osgi框架 java bean和oracle type:公司实现,type编程http://blog....
  • xdyzyh
  • xdyzyh
  • 2017年02月20日 21:12
  • 176

计算机系统学习笔记<一>

计算机是由硬件软件组成的, 硬件相当于肉体而软件相当于灵魂,两者是相辅相成的。软件分为系统软件和应用软件他们和硬件的关系是应用软件位于最外层,中心是硬件,系统软件位于两者中间。   系统软件有很多种...
  • yqoneyear
  • yqoneyear
  • 2017年03月19日 20:01
  • 250

菜鸟shell 脚本学习日记

1、shell 脚本统计当前目录下指定后缀文件行数: 获取当前目录下所有后缀为.txt 文件行数,包含空白行(包括子目录): $find . -name "*.sh" |xargs cat |wc -...
  • cxj415
  • cxj415
  • 2017年11月29日 23:10
  • 53

C++学习日记和心得(一)(新手帖,高手勿笑)

我之前三年也学过其他语言,
  • u011004567
  • u011004567
  • 2014年07月11日 14:58
  • 432

今天写了第一个java类

终于今天真的写Java代码了。写了三个类,用ksh调用的。不过基本就是抄,嘿嘿。。。在已有的project下新建package,新建class。把从别处copy来的代码改了改,很容易编译就过了。IDE...
  • OnlyQi
  • OnlyQi
  • 2011年04月23日 09:54
  • 519

javascript学习日记——(1)

1.1    Javascript诞生于1995年。它的主要目的是处理以前由服务器语言(如Perl)负责的一些输入验证操作。 1.2    Javascript虽然和ECMAScript通常都被人...
  • a273944127
  • a273944127
  • 2017年07月01日 16:41
  • 111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql学习日记
举报原因:
原因补充:

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