id主键的创建及作用
1. 作用
- 从业务上来说
在设计数据库时不需要费尽心思去考虑设置哪个字段为主键。然后是这些字段只是理论上是唯一的,例如使用图书编号为主键,这个图书编号只是理论上来说是唯一的,但实践中可能会出现重复的 情况。所以还是设置一个与业务无关的自增ID作为主键,然后增加一个图书编号的唯一性约束。 - 从技术上来说
如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。 总的来说就是可以提高查询和插入的性能。 - 对InnoDB(数据存储引擎)来说
- 主键索引既存储索引值,又在叶子节点中存储行的数据,也就是说数据文件本身就是按照b+树方式存放数据的。
- 如果没有定义主键,则会使用非空的UNIQUE键做主键 ; 如果没有非空的UNIQUE键,则系统生成一个6字节的rowid做主键;
聚簇索引中,N行形成一个页(一页通常大小为16K)。如果碰到不规则数据插入时,为了保持B+树的平衡,会造成频繁的页分裂和页旋转,插入速度比较慢。所以聚簇索引的主键值应尽量是连续增长的值,而不是随机值(不要用随机字符串或UUID)。
故对于InnoDB的主键,尽量用整型,而且是递增的整型。这样在存储/查询上都是非常高效的。
2. 业务主键和非业务主键
- 自增字段作为主键(一般多用int类型定义),也称为非业务主键(逻辑主键或者代理主键)意思就是这列数据与业务无关,仅仅作为主键而设计,会浪费主键资源。
3. sqlserver修改主键为自增
- 先删除id字段, 执行下面sql即可:
alter table 表名 add id int IDENTITY (1,1) PRIMARY KEY
如果在navicat中需要移动id字段位置,可以将其他字段复制粘贴到id字段,再将id字段前的删除
4. 优缺点
自增主键 | 业务主键 | |
---|---|---|
优点 |
1. 索引所占空间小 2. 增删改查效率高 3.业务变化不需要更新主键 |
1. 保证业务逻辑的完整性 2. 安全性高 3.可以转移数据库 |
缺点 | 无法转移数据库 |
1. 效率低 2.业务变化需要修改主键 |
仅作个人笔记,参考博主
- https://www.cnblogs.com/lanqi/p/10185172.html
- https://blog.csdn.net/hao_0514
- 百度词条
id主键的创建及作用相关推荐
- mysql 联合主键_Mysql 创建联合主键
Mysql 创建联合主键 2008年01月11日 星期五 下午 5:21 使用primary key (fieldlist) 比如: create table mytable ( aa int, bb ...
- mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键
多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...
- python字典添加主键_Python--MySql(主键的创建方式、存储引擎、存储过程、索引、pymsql)...
主键的创建方式 1. create tablestud( idint not null unique, namevarchar(20) ); mysql> descstud;+-------+- ...
- MySQL 使用自增ID主键和UUID 作为主键的优劣比較具体过程(从百万到千万表记录測试)...
測试缘由 一个开发同事做了一个框架.里面主键是uuid.我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿 ...
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)...
Reference: https://blog.csdn.net/mchdba/article/details/52336203 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不 ...
- 数据库面试 - 分库分表之后,id 主键如何处理?
数据库面试 - 分库分表之后,id 主键如何处理? 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后, ...
- Sqlite 主键自动创建
在用sqlite设计表时,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,但是由s ...
- Controller规范和接口定义,添加一条新数据并返回此数据的ID(主键)
参考文章: 烂代码之:Controller规范和接口定义 添加一条新数据并返回此数据的ID(主键) 删除数据返回boolean 添加数据后返回Id <insert id="" ...
- php id如何设置主键自增,phpmyadmin设置id主键自增报错怎么办_数据库
phpmyadmin啥意思_数据库 phpmyadmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库,如建立.修 ...
最新文章
- Java调用ocx控件以及dll
- 机器学习案例 特征组合——高帅富 冷启动——从微博等其他渠道搜集数据进行机器学习 用户年龄——线性分段处理...
- WP老杨解迷:可知评论系统还能勾搭用户呢
- [PM Tools]软件项目进度跟踪表v4.0
- 统计学---数据的标准化
- numeric比较大小 数据库_mysql大小写敏感与校对规则
- 历史命令与实时记录(redhat6.8)
- [渝粤教育] 辽宁对外经贸学院 国际集装箱多式联运 参考 资料
- 设计模式之单例模式(C++代码实现)
- Python常用数据结构之heapq模块
- Linux Workqueue
- vmp给驱动加壳的注意事项
- js之按键控制div移动
- 计算机二级Python错题
- delphi学习笔记(1)-object pascal语言的数据类型 选择自 xmz2629 的 Blog
- 拆字在线版-扌斥字在纟戋片反
- 关于Contiguous()方法
- node版本、npm版本随意切换
- 华为荣耀3x G750-T01 Root操作
- 主流hpc应用安装之QE