(细节)My SQL中主键为0和主键自排约束的关系
开始不设置主键
表的设计如下:


如果id的位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增;


Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样;



现在主键是没有0的,如果把某个id改成0的话,0不会变!直接会进行排序;


再insert一个id=0的看看,居然还是跟刚才一样直接跟行数相关!


再重置一下自动排序,看看这个0会不会有变化,
先取消自排;


再加上自排,果然跟想的一样,0要变成1了,错误提示说的是主键有重复的1所以不让自排,

修改之后,果真可以了,0变成1了,


我觉得也就这几种情况吧,无符号的情况应该没什么区别,还有什么没有考虑的希望大家给我留言,可以告诉我你是怎么想的,我也很想知道,现在抛砖引玉我把我的总结和想法写一下:
对我来说,0在数据库里很特殊。
使用limit查看指定范围数据的时候这时候表就会是从0开始往下排的顺序,但是insert添加一行数据的时候反而是跟行数有关系,这时候又是按照从1开始往下排的顺序。如果使用主键自排约束以前表里有0,再设置完主键自排以后所有的0又不会根据行数,而是直接按照自上而下的顺序从1开始排。如果把表中的某个主键的数改成0,那直接就会进行排序放到正数前面,也就是说主键自排是允许有0存在的,那为什么本身存在的0要去修改成从1开始的递增序列呢?哪怕没加主键自排以前只有一个0,加了主键自排以后还是会变成1。
开始有0,增加主键自排约束,0依次变为1,2,3,4.......
开始没0,增加主键自排约束,新添加的主键是0的行会根据行数自行变化,注意这里是新添加的行,使用的是insert。
开始没0,把某个主键的数修改成0,这个0会直接在排好序了再在表里显示出来。
说得简单一点就是,增加主键自排约束后:
主键的值:修改成的0,可以存在,就是排个序。
新添加的0,不允许存在,要根据行号改变。
本身存在的0,不允许存在,要从1开始递增变化。
(细节)My SQL中主键为0和主键自排约束的关系的更多相关文章
- (解释文)My SQL中主键为0和主键自排约束的关系
上一篇我们说了关于自排如果主键是0的问题,在这里我搞清楚了原因,导致这种情况是因为在SQL中对自排设置了初始值: 从这里可以看到这两个变量一个是自增的初始值,一个是增量,这里都是1,所以在设置自增的时 ...
- 在SQL中 给字符串补0方法
--第一种方法SELECT RIGHT('00000'+CAST(ID AS nvarchar(50)),5) FROM dbo.TableName --左边补0,如 00001,00039 SELE ...
- Sql中的主键和外键
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- SQL中的每一张表都必须设有主键吗
问题描述: 公司的数据库表有时候会看到没有主键的,SQL中的每一张表都必须设有主键吗? 主键的作用: 1)保证实体的完整性: 2)加快数据库的操作速度: 3)在表中添加新记录时,数据库ACCESS会自 ...
- SQL中的主键,候选键,外键,主码,外码
1.码=超键:能够唯一标识一条记录的属性或属性集. 标识性:一个数据表的所有记录都具有不同的超键 非空性:不能为空 有些时候也把码称作"键" 2.候选键=候选码:能够唯一标识一条记 ...
- SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)
索引类型 1. 唯一索引:唯一索引不允许两行具有相同的索引值 2. 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的 ...
- SQL反模式学习笔记4 建立主键规范【需要ID】
目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...
- SQL Server分区键列必须是主键一部分
SQL Server分区键列必须是主键一部分. 必须把分区列包含在主键/唯一约束/唯一索引的键列中. USE tempdb GO -- 测试表 CREATE TABLE dbo.tb( id int, ...
- Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射
Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射 Hibernate提供了两 ...
随机推荐
- ExtJS:Grid数据导出至excel实例
导出函数ExportExcel() var config={ store: alldataStore, title: '测试标题' }; var tab=tabPanel.getActiveTab() ...
- LeetCode之“字符串”:最长回文子串
题目要求: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串.例如,给出字符串 "abcdzdcab",它的最长回文子串为 & ...
- Mahout SlopOne
关于推荐引擎 如今的互联网中,无论是电子商务还是社交网络,对数据挖掘的需求都越来越大了,而推荐引擎正是数据挖掘完美体现:通过分析用户历史行为,将他可能喜欢内容推送给他,能产生相当好的用户体验,这就是推 ...
- obj-c编程10:Foundation库中类的使用(1)[数字,字符串]
我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj ...
- 恶补web之二:css知识(1)
css指层叠样式表(Cascading Style Sheets) 样式定义如何显示html元素,样式通常存储在样式表里.把样式添加到html4.0中,是为了解决内容与表现分离的问题.外部样式 ...
- ARP 协议抓包分析
ARP(Address Resolution Protocol)- 地址解析分析 ARP 协议是根据IP地址获取物理地址的一个TCP/IP协议. 当PC1 想与 PC2 进行通信时,需要同时知道PC2 ...
- LeetCode - 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. ...
- 进程间通信——IPC之共享内存
共享内存是三个IPC机制中的一个.它允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式. 大多数的共享内存的实现,都把由不同进程之间共享 ...
- Bash的一些零星笔记
1.变量带入操作符 在脚本中,使用变量前做检查是很重要的.通过代入操作符,可以实现这方面的功能.比如当变量未赋值时为变量赋默认值,以及更多内容: ${parameter:-默认为空}:当paramet ...
- SQL Server 表的管理_关于完整性约束的详解(案例代码)
SQL Server 表的管理之_关于完整性约束的详解 一.概述: ●约束是SQL Server提供的自动保持数据库完整性的一种方法, 它通过限制字段中数据.记录中数据和表之间的数据来保证数据的完整性 ...