`
fancyboy2050
  • 浏览: 240973 次
  • 性别: Icon_minigender_1
  • 来自: 皇城根儿下
社区版块
存档分类
最新评论

分库主键设计-Mysql

    博客分类:
  • java
阅读更多
常见的两种方案,遍布网络:

第一种:
replace方案,mysql解释:REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
CREATE TABLE `user_id_seq` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `stub` varchar(3) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `stub` (`stub`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

REPLACE INTO user_id_seq(stub) VALUES ('a');
select last_insert_id();

这种方案一般一个表对应一个类型的主键,个人觉得最好,简单明了,一个表对应一个业务的seq。

第二种:
CREATE TABLE `sequence` (
  `name` varchar(50) NOT NULL,
  `id` bigint(20) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

INSERT INTO `sequence` (`name`) VALUES('users');
update sequence set id=last_insert_id(id+1) where name = 'users'; 
select last_insert_id();

这种方案可以一个表支持多个业务的seq需求,但是太多的业务对这一个表频繁操作,如果某个业务出现锁表,就会导致其他业务无法进行,好像不是太好?

两种方案的都关系到mysql的last_insert_id()这个功能,其实关键点也就是这个last_insert_id()使我们可以通过mysql实现唯一seq的设计。
mysql中对它的解释:【对于LAST_INSERT_ID(),最近生成的ID是在服务器上按连接维护的。它不会被另一个客户端改变。即使用non-magic值(即非Null非0值)更新了另一个AUTO_INCREMENT列,也不会更改它。】

mysql如何获得上次插入行的唯一ID
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#getting-unique-id

这样不管我们如何设计,只要保证select last_insert_id();之前的操作是一个连接完成的原子操作,我们就能从返回值中得到唯一的last_insert_id。
1
2
分享到:
评论

相关推荐

    图书管理系统数据库设计-MYSQL实现.docx

    图书管理系统数据库设计是一个重要的环节,它涉及到数据的组织、存储和检索,对于高效管理图书馆的图书流通至关重要。在这个系统中,我们使用MySQL作为数据库管理系统,它是一个广泛应用的关系型数据库,支持多种...

    mycat对mysql数据库进行分库分表demo-mycat-demo-parent.zip

    标题"mycat对mysql数据库进行分库分表demo-mycat-demo-parent.zip"揭示了本示例主要围绕MyCat这一中间件,用于MySQL数据库的分布式处理,特别是分库分表功能。MyCat是一个开源的分布式数据库系统,它能够将一个大型...

    mysql分库分表sharding-jdbc-sharding-jdbc-demo.zip

    MySQL数据库在处理大数据量时,性能可能会受到挑战,此时就需要采用分库分表策略来提升系统性能。Sharding-JDBC是阿里巴巴开源的一款轻量级Java框架,它可以在不修改现有业务代码的情况下,实现数据的分布式处理。这...

    图书管理系统数据库设计-MYSQL实现.doc

    在这个系统中,MySQL 数据库被选为实现的数据存储解决方案。以下是该系统的主要知识点: 1. **系统概述**: - 系统旨在简化图书管理工作,通过设计良好的数据库结构提供便利。它允许学生直接查询书籍信息和借阅...

    基于mybatis插件实现轻量级分库分表方案-亿级数据mysql存储解决方案-mybatis-sharding.zip

    MyBatis-Sharding 是一种基于 MyBatis 的轻量级分库分表解决方案,它可以帮助开发者有效地解决亿级数据量下的 MySQL 存储问题。下面将详细介绍 MyBatis-Sharding 的核心概念、实现原理以及如何在实际项目中进行应用...

    图书管理系统数据库设计-MYSQL实现.pdf

    图书管理系统数据库设计是信息化时代图书馆管理工作的重要组成部分,它利用MySQL数据库管理系统实现,旨在优化图书的借阅、归还和管理流程。本系统分为借阅者模块和管理员模块,旨在满足不同用户的需求。 一、系统...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    09-分库备份后mysql如何分库恢复实战.avi 10-mysql进程-状态-在线修改参数重要知识讲解.avi 11-mysqlbinlog命令介绍及实战讲解.avi 12-mysqldump-master-data参数答疑详解.avi 第六部 MySQL主从复制原理及实战部署...

    图书管理系统数据库设计-MYSQL实现(2).doc

    在设计表时,注意了完整性约束,例如使用主键(PK)确保数据唯一性,非空(not null)字段要求必填,以保证数据的完整性。 总结来说,这个图书管理系统数据库设计充分考虑了实际业务需求,通过合理的数据模型和表...

    mycat mySql集群配置 含按日分库 按月分库等

    《Mycat MySQL集群配置:实现按日分库与按月分库详解》 在大数据时代,单个MySQL数据库往往无法满足高并发、大数据量的处理需求,这时就需要借助于分布式数据库中间件来提升系统的扩展性和性能。Mycat作为一款开源...

    图书管理系统数据库设计-MYSQL实现(2).docx

    综上所述,图书管理系统数据库设计是一个综合了用户界面、数据处理和数据库管理的复杂项目,使用MySQL数据库提供可靠的数据存储,通过E-R模型和功能模块设计满足用户和管理员的各种操作需求。该系统对于提高图书馆的...

    图书管理系统数据库设计-MYSQL实现说课材料.docx

    ### 图书管理系统数据库设计知识点详解 #### 一、系统概述 **1.1 系统简介** 图书管理系统是一项重要的图书馆管理工具,它旨在通过信息化手段提高图书馆管理效率和服务质量。良好的图书管理系统数据库能够极大地...

    图书管理系统数据库设计-MYSQL实现(3).doc

    图书管理系统数据库设计是一个关键环节,它涉及到图书馆日常运营的高效管理。这个系统旨在方便学生查阅图书信息、借阅和归还图书,同时也便于管理员管理图书库存、学生信息以及执行相关操作。 一、系统概述 图书...

    Python+MySQL分表分库实战

    综上所述,"Python+MySQL分表分库实战"的学习内容涵盖了数据库设计原则、Python数据库操作技巧、分库分表策略以及性能优化等多个方面。通过学习和实践,开发者可以有效地解决大数据场景下的存储和查询问题,提高系统...

Global site tag (gtag.js) - Google Analytics