mysql分库主键_分库主键设计-Mysql
常见的两种方案,遍布网络:
第一种:
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。但是在高并发的情况下很容易导致mysql死锁。
第二种:
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需求,但是太多的业务对这一个表频繁操作,如果某个业务出现锁表,就会导致其他业务无法进行。
第三种:
如果是java的项目,可以使用spring框架的MySQLMaxValueIncrementer解决,在mysql上实现原理同第二种,只是在业务层加了一段本地缓存,对于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。
mysql分库主键_分库主键设计-Mysql相关推荐
- c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...
这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...
- mysql实现关注收藏_收藏|我的Mysql学习笔记
欢迎关注我的公众号:早起Python 大家好,今天是陈熹专栏 SQL是一个存活近半个世纪的语言,如今仍有大量人在使用.它语法简单,对培养数据整理和提取的思维有很大帮助.我将我过去的笔记分享给大家,希望 ...
- mysql date 默认值_通过Oracle DB了解MySQL
Oracle数据库是业界的翘楚,各行各业拥有大量的Oracle DB的DBA,本文尝试通过将Oracle与MySQL数据库的架构.安全.模式对象.数据类型及数据存储进行对比,以方便熟悉Oracle数据 ...
- mysql innodb 缓存设置_数据库分享一: MySQL的Innodb缓存相关优化
无论是对于哪一种数据库来说,缓存技术都是提高数据库性能的关键技术,物理磁盘的访问速度永 远都会与内存的访问速度永远都不是一个数量级的.通过缓存技术无论是在读还是写方面都可以大大提 高数据库整体性能. ...
- mysql主流使用版本_简述3个主流MySQL版本特性
MySQL作为一个关系型数据库管理系统,在数据处理方面有其独特的优势.MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,使得MySQL占 ...
- ubuntu安装mysql 密码忘了怎么办_在ubuntu上面安装mysql都密码忘记及一些常用命令...
重改密码! # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & ...
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
- mysql实现心跳表_第29问:MySQL 的复制心跳说它不想跳了
问题 最近年底,大家的数据库经常跑批量大事务,会发现复制突然断开,报错"心跳与本地信息不兼容": 会是什么原因? 实验 我们先来复现一下,再进行分析. 宽油,做一对主从数据库: 我 ...
- mysql 字符大对象_第02期:MySQL 数据类型的艺术 - 大对象字段
我以前分享过一篇<MySQL 大对象一例>,今天就来详细说下大对象的优缺点以及使用场景. 我们把 MySQL 的大对象类型分 TEXT/BLOB 和 JSON 两部分来说明. 一.TEXT ...
- mysql 做回归模型_技术分享 | 我对 MySQL 隔离级别的剖析
隔离级别的产生 在串型执行的条件下,数据修改的顺序是固定的.可预期的结果,但是并发执行的情况下,数据的修改是不可预期的,也不固定,为了实现数据修改在并发执行的情况下得到一个固定.可预期的结果,由此产生 ...
最新文章
- 互联网人的平均时长,居然这么短...
- k8s 自定义dns_K8S 生态周报| Docker v19.03.10 正式发布
- SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库
- 一起学设计模式 - 命令模式
- CallContext和多线程
- linux的write是线程安全的吗,socket的write/send还是是否是线程安全?
- ASP.NET Core开发常见“坑”
- 【演讲实录】下一代企业级应用架构管理体系
- 实战篇|风控策略效率的测试、调优与评估
- 对数组名取地址a和 数组首地址a
- C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。...
- 基于arduino WS2812b RGB灯带控制程序一
- 陀螺仪数据转换成角度_MPU6050 计算角度
- 企业如何避交所得税__公司如何才能少交企业所得税
- 【AIOT】HumanCenteredSensing
- Python温度转换程序
- UVA1449 Dominating Patterns
- 成考计算机专业难不难,成人高考计算机专业难吗?
- 移动端架构师学习路线
- 超简单的位运算---再也不用担心看不懂题解了
热门文章
- Spring Security 实战干货:OAuth2第三方授权初体验
- Facebook 开源 Instagram 安全工具 Pysa
- 有比 ReadWriteLock更快的锁?
- 接地气的数据分析入门与进阶
- 每秒上万并发下的Spring Cloud参数优化实战
- pytorch 计算相似度,相关系数
- DetNAS ThunderNet
- linux Pytorch C++ 环境搭建
- Layout of the output array img is incompatible with cv::Mat (step[ndims-1] !
- map/set iterator not dereferencable