澳门十大赌场最新排名 > 澳门十大赌场 > 自增长字段值的连续递增实现

原标题:自增长字段值的连续递增实现

浏览次数:130 时间:2019-08-01

背景

索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。

MySql的前戏

在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中:

#用户名 |密码
root|123321
alex|123123

上面文件内容的规则是我自己定义的,你要想用我这个程序,必须按照我的规则去执行,但凡不是这个规则,就没有交流的余地。

在一开始的时候文件格式的规定是没有规范的,后面学到模块的时候逐渐知道了目录规则,我们会把文件放到db目录下。

类似下面目录结构:

图片 1

 

对于上面db目录中,是可以存放多个文件的,并且文件中可以有多行数据。

 

那么问大家一个问题,如果说上面那个软件是我写好的,在一台服务器或者一台机器上安装了我写好的软件。

现在有张三和李四两个人都安装了我这个软件,张三注册了一个用户,李四也注册了一个用户,那么自己注册的用户应该是自己用的。那么这两个用户是不共享的,

所以这个软件证明我写的不太好,它不能共享,这种类似单机的软件是不好的。

然后呢,我现在将我写的这个软件中目录修改一下,将db目录移除。现在将单机程序(自己的DB)改变成也是单机程序(公用DB)。

 

那么之前给大家介绍过,凡是交互操作,是离不开scoket的,那么现在我这边有个公用DB和一个scoket服务端,然后在张三和李四那边有scoket客户端。张三和李四此时输入用户名和密码,现在我这边scoket服务端某个目录接收用户输入的用户名和密码,看一下该用户名存在不存在,如果存在返回true,如果不存在返回false。也就是说重点的内容我们把db目录放到某台服务器上。

那么上面这个例子呢,其实就给大家慢慢的引出来mysql了,mysql呢其实就一个软件,这个软件安装到某台电脑上或者某台服务器上,那么现在只要我告诉它创建一个文件目录或者创建文件,那么mysql就自动帮我们创建了,比如说我们再在文件中添加一条数据,那么它也帮我们完成。

 

总结一句话:其实mysql就是用于管理我们的文件的一个软件。

 

那么对于mysql这个软件来说有两个软件

图片 2

---服务器软件
     - socket服务端
     - 本地文件操作
   - 解析指令(mysql语句)
---客户端软件
     - socket客户端
     - 发送指令
   - 解析指令(mysql语句)

图片 3

解释:

对于服务器软件中的socket服务器是一直开着,客户端得需要连接,并且还有创建文件、删除文件等等的操作

对于客户端软件中的scoket客户端,我们得需要发送指令去命令scoket服务端对文件进行操作。

 

大家应该知道ftp的项目,上传项目和下载项目的命令是不一样的。那么对于mysql中的客户端和服务端也会有些指令的操作,那么在这两个端中应该是有解析指令的过程,这个指令只有mysql这个软件知道,这种指令就是mysql语句。

再想想我们写的html、css、js.这些好比就是我们客户端写好的语法,然后浏览器充当了服务端的角色去解析我们的的语法,最后来渲染出来结果。

 

接下来我们要学习这些技能:

- 安装 服务端和客户端
- 连接
- 学习SOL语句规则:命令服务端做任何的操作

在上一篇《数据库操作类SqlHelper》博文的最后,提到了一个实践运用中遇到的问题,就是数据库表中的自增长字段的赋值不受人为控制。比如数据库有一个tb_Department表,DeptNO字段为自增长主键。

以 B-tree 形式存储:

图片 4

1                     30
2  
3         10                        40
4  
5    5         15            35             66
6  
7 1   6     11    19      21      39     55     100

现在插入一行数据

MySQL中常见索引有:

图片 5

  • 普通索引
  • 唯一索引
  • 主键索引
  • 组合索引

啊!DeptNO字段怎么就是22了呢,不应该是从4开始吗?

1、普通索引

原因:这个表之前进行过很多插入操作,数据库针对自增长字段的每次插入都会自动 1,后来删除了一部分行数据,然后重新插入的时候,数据库不会依据表中缺失的字段值进行赋值,而是在原先的基础上继续 1赋值。

普通索引仅有一个功能:加速查询

结果:在新插入的“哈哈系”数据行之前,其实数据库已经向表里插入过21次了,只是DeptNO字段值大于3的行数据被删除了,现在要新插入行数据的话,就会在21的基础上 1,也就是第二个表中出现的22了。

图片 6图片 7

期望:

1 create table in1(
2     nid int not null auto_increment primary key,
3     name varchar(32) not null,
4     email varchar(64) not null,
5     extra text,
6     index ix_name (name)
7 )
  1. 在插入新数据的时候,针对自增长字段可以人为控制;
  2. 实际运用中,其实用户并不知道数据表中自增长字段缺失的是哪些值,程序需要自动提供缺失或者缺省值。

创建表 索引

设计

图片 8图片 9

1.在插入新数据的时候,针对自增长字段可以人为控制

1 create index index_name on table_name(column_name)

数据库中针对自增长字段在插入时,不可以指定显式值的。

创建索引

insert into tb_Department(DeptNO,DeptName) values(4,N'嘿嘿系')

图片 10图片 11

这样插入数据会报错的,提示你“当Identity_Insert设置为off时,不能为表’tb_Department’中的标识列插入显式值”。很明显,第一个期望的解决方案就是将Identity_Insert设置on,然后执行显式值插入,最后关闭标识列插入开关。

1 drop index_name on table_name;
set identity_insert tb_Department on
insert into tb_Department(DeptNO,DeptName) values(4,N'嘿嘿系')
set identity_insert tb_Department off

删除索引

执行看看能不能插入,哇哦,成功了,棒棒哒。

图片 12图片 13

图片 14

1 show index from table_name;

2.实际运用中,用户并不知道数据表中自增长字段未使用有哪些值,程序需要自动提供缺失或者缺省值

查看索引

自增长字段的值分为缺失值和缺省值(这个术语是我自己定的,为了方便描述)

注意:对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length。

缺失值:比如数据表中自增长字段的值为(1,2,3,5),则缺失值为4。要想让程序自动检索到缺失值,需要对数据表进行全面扫描,逐行判断自增长字段的值是否连续递增,只要检索到不连续的值就将对应序列的值返回,并显示在窗体上,无需用户自己输入。

图片 15图片 16

本文由澳门十大赌场最新排名发布于澳门十大赌场,转载请注明出处:自增长字段值的连续递增实现

关键词:

上一篇:一次事故的回顾,MySQL去除重复数据

下一篇:没有了